aboutsummaryrefslogtreecommitdiffstats
path: root/field.c
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2017-03-09 20:44:09 -0500
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2017-03-09 20:44:09 -0500
commit39c46265139aa8faf87160b30710876bde4c6ba9 (patch)
tree7d55e7d483a2e35ec675223cf0b3e5755b693a61 /field.c
parentfeb12baf11e39f60e57b988d29aa96bda4dddcff (diff)
downloadegawk-39c46265139aa8faf87160b30710876bde4c6ba9.tar.gz
egawk-39c46265139aa8faf87160b30710876bde4c6ba9.tar.bz2
egawk-39c46265139aa8faf87160b30710876bde4c6ba9.zip
For API input field parsing, use an array of structs instead of an array of integers.
Diffstat (limited to 'field.c')
-rw-r--r--field.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/field.c b/field.c
index 5bdc05f7..5ef4d74b 100644
--- a/field.c
+++ b/field.c
@@ -59,7 +59,7 @@ static long fw_parse_field(long, char **, int, NODE *,
Regexp *, Setfunc, NODE *, NODE *, bool);
static long api_parse_field(long, char **, int, NODE *,
Regexp *, Setfunc, NODE *, NODE *, bool);
-static const int *api_fw = NULL;
+static const awk_input_field_info_t *api_fw = NULL;
static long fpat_parse_field(long, char **, int, NODE *,
Regexp *, Setfunc, NODE *, NODE *, bool);
static void set_element(long num, char * str, long len, NODE *arr);
@@ -262,7 +262,7 @@ rebuild_record()
* but better correct than fast.
*/
void
-set_record(const char *buf, int cnt, const int *fw)
+set_record(const char *buf, int cnt, const awk_input_field_info_t *fw)
{
NODE *n;
static char *databuf;
@@ -802,24 +802,25 @@ api_parse_field(long up_to, /* parse only up to this field number */
long nf = parse_high_water;
char *end = scan + len;
int skiplen;
+ size_t flen;
if (up_to == UNLIMITED)
nf = 0;
if (len == 0)
return nf;
while (nf < up_to) {
- if (((skiplen = api_fw[2*nf]) < 0) ||
- ((len = api_fw[2*nf+1]) < 0)) {
+ if ((skiplen = api_fw[nf].skip) < 0) {
*buf = end;
return nf;
}
if (skiplen > end - scan)
skiplen = end - scan;
scan += skiplen;
- if (len > end - scan)
- len = end - scan;
- (*set)(++nf, scan, (long) len, n);
- scan += len;
+ flen = api_fw[nf].len;
+ if (flen > end - scan)
+ flen = end - scan;
+ (*set)(++nf, scan, (long) flen, n);
+ scan += flen;
}
*buf = scan;
return nf;