On Fri, Mar 02, 2018 at 12:27:05PM +0100, Klemens Nanni wrote:
> On Thu, Mar 01, 2018 at 09:27:49PM -0600, Scott Cheloha wrote:
> > Hey,
> > 
> > This adds the more typical strtoll(3) checks we have elsewhere
> > in the tree to cmp(1).  Make sure we (a) got a number at all,
> > (b) that it doesn't have any dangling non-digits, (c) that it's
> > non-negative, and (d) that it didn't overflow.
> 
> > Index: usr.bin/cmp/cmp.c
> > ===================================================================
> > RCS file: /cvs/src/usr.bin/cmp/cmp.c,v
> > retrieving revision 1.16
> > diff -u -p -r1.16 cmp.c
> > --- usr.bin/cmp/cmp.c       28 Oct 2016 07:22:59 -0000      1.16
> > +++ usr.bin/cmp/cmp.c       2 Mar 2018 03:24:02 -0000
> 
> > @@ -141,6 +123,23 @@ main(int argc, char *argv[])
> >             c_regular(fd1, file1, skip1, sb1.st_size,
> >                 fd2, file2, skip2, sb2.st_size);
> >     return 0;
> > +}
> > +
> > +static off_t
> > +get_skip(const char *arg, const char *name)
> > +{
> > +        off_t skip;
> > +        char *ep;   
> > + 
> > +        errno = 0;
> > +        skip = strtoll(arg, &ep, 0);
> > +        if (ep == arg || *ep != '\0')
> > +                fatalx("%s is invalid: %s", name, arg);
> > +        if (skip < 0)
> > +                fatalx("%s is too small: %s", name, arg);
> > +        if (skip == LLONG_MAX && errno == ERANGE)
> > +                fatalx("%s is too large: %s", name, arg);
> > +        return skip;
> That's what strtonum(3) is for, why not using it?
> 

because strtonum only understands decimal. cmp -s takes octal and
hexadecimal as well

Reply via email to