diff options
Diffstat (limited to 'field.c')
-rw-r--r-- | field.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -884,8 +884,19 @@ get_field(long requested, Func_ptr *assign) * reference to the field and NF only gets set if the field * is assigned to -- this case is handled below */ - if (parse_extent >= fields_arr[0]->stptr + fields_arr[0]->stlen) + 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 wierd, 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)) + 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; } |