diff options
Diffstat (limited to 'field.c')
-rw-r--r-- | field.c | 36 |
1 files changed, 18 insertions, 18 deletions
@@ -1175,39 +1175,39 @@ set_FIELDWIDTHS() /* * Detect an invalid base-10 integer, a valid value that * is followed by something other than a blank or '\0', - * or a value that is not in the range [1..INT_MAX]. + * or a value that is not in the range [1..UINT_MAX]. */ errno = 0; tmp = strtoul(scan, &end, 10); if (errno == 0 && *end == ':' && (0 < tmp && tmp <= UINT_MAX)) { FIELDWIDTHS->fields[i].skip = tmp; scan = end + 1; - if (*scan == '*') - goto got_star; + if (*scan == '-') { + fatal_error = true; + break; + } // try scanning for field width tmp = strtoul(scan, &end, 10); } else FIELDWIDTHS->fields[i].skip = 0; - if (*scan == '*') { - got_star: - for (scan++; is_blank(*scan); scan++) - continue; - - if (*scan != '\0') - fatal(_("`*' must be the last designator in FIELDWIDTHS")); - - FIELDWIDTHS->fields[i].len = UINT_MAX; - FIELDWIDTHS->nf = i+1; - break; - } - if (errno != 0 || (*end != '\0' && ! is_blank(*end)) - || !(0 < tmp && tmp <= INT_MAX) + || !(0 < tmp && tmp <= UINT_MAX) ) { - fatal_error = true; + if (*scan == '*') { + for (scan++; is_blank(*scan); scan++) + continue; + + if (*scan != '\0') + fatal(_("`*' must be the last designator in FIELDWIDTHS")); + + FIELDWIDTHS->fields[i].len = UINT_MAX; + FIELDWIDTHS->nf = i+1; + } + else + fatal_error = true; break; } FIELDWIDTHS->fields[i].len = tmp; |