bug-gawk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FPAT/printing fields bug


From: Ed Morton
Subject: Re: FPAT/printing fields bug
Date: Sun, 3 Nov 2019 10:10:10 -0600
User-agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0

Thanks for the quick turnaround as always!

    Ed.

On 11/3/2019 8:30 AM, address@hidden wrote:
Hi Ed.

Thanks for the report. The diff below seems to fix the problem. I want
to do a little more testing and then will push it to git, along with
your test case.

Thanks for the report,

Arnold


Ed Morton <address@hidden> wrote:

Looks like there's an FPAT bug in gawk 5.0.1:

$ echo ',b' | gawk -v FPAT='[^,]*' '{print $2}'
b

$ echo ',b' | gawk -v FPAT='[^,]*' '{print $1, $2}'

$

It can be worked around in the same way as a previous bug
(https://lists.gnu.org/archive/html/bug-gawk/2017-04/msg00000.html):

$ echo ',b' | gawk -v FPAT='[^,]*' '{oFPAT=FPAT; FPAT=""; FPAT=oFPAT;
print $1, $2}'
  ??b
$

Regards,

  ?????? Ed.
-------------------------------------
diff --git a/field.c b/field.c
index 8814233a..e4dd66a3 100644
--- a/field.c
+++ b/field.c
@@ -916,17 +916,6 @@ get_field(long requested, Func_ptr *assign)
                 */
                if (parse_extent == fields_arr[0]->stptr + fields_arr[0]->stlen)
                        NF = parse_high_water;
-               else if (parse_field == fpat_parse_field) {
-                       /* FPAT parsing is weird, isolate the special cases */
-                       char *rec_start = fields_arr[0]->stptr;
-                       char *rec_end = fields_arr[0]->stptr + 
fields_arr[0]->stlen;
-
-                       if (    parse_extent > rec_end
-                           || (parse_extent > rec_start && parse_extent < rec_end 
&& requested == UNLIMITED-1))
-                               NF = parse_high_water;
-                       else if (parse_extent == rec_start) /* could be no 
match for FPAT */
-                               NF = 0;
-               }
                if (requested == UNLIMITED - 1) /* UNLIMITED-1 means set NF */
                        requested = parse_high_water;
        }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]