aboutsummaryrefslogtreecommitdiffstats
path: root/field.c
diff options
context:
space:
mode:
Diffstat (limited to 'field.c')
-rw-r--r--field.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/field.c b/field.c
index 8ede8744..151fea68 100644
--- a/field.c
+++ b/field.c
@@ -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;
}