It is a mistake copying the idiomatic example from the bottom of the man page.
I always copy it, and then fix the indentation. Then, I consider adjusting the local variables to match the idiomatic example. Usually it feels better to do that, rather than edit every variable occurance in the strtol incantation ("Double, double toil and trouble; fire burn and cauldron bubble.") Anton Lindqvist <an...@basename.se> wrote: > On Wed, Aug 28, 2024 at 05:40:33AM -0600, Omar Polo wrote: > > CVSROOT: /cvs > > Module name: src > > Changes by: o...@cvs.openbsd.org 2024/08/28 05:40:33 > > > > Modified files: > > lib/libpcap : scanner.l > > > > Log message: > > libpcap: replace hand-rolled number parser with strtol > > > > can't use strtonum here since it needs to handle octal and hex > > notations as well. Part of a larger diff that's ok beck@ > > This broke slaacd, vxlan, wg and rip6cksum regress. I doubt it was ever > tested. > > According to the manual, strtol() assigns endptr to '\0' when the > complete string is valid. > > Index: scanner.l > =================================================================== > RCS file: /cvs/src/lib/libpcap/scanner.l,v > diff -u -p -r1.31 scanner.l > --- scanner.l 28 Aug 2024 11:40:33 -0000 1.31 > +++ scanner.l 29 Aug 2024 04:43:02 -0000 > @@ -344,7 +344,7 @@ stoi(char *s) > > errno = 0; > lval = strtol(s, &ep, 0); > - if (*s == '\0' || *ep == '\0') > + if (*s == '\0' || *ep != '\0') > bpf_error("invalid number %s", s); > if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) || > (lval > INT_MAX || lval < INT_MIN)) >