tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: strtonum(3) from OpenBSD?



On Tue, 23 Jun 2009 16:28:11 +0200
Marc Balmer <marc%msys.ch@localhost> wrote:

> OpenBSD has the strtonum(3) function to reliably convert string values  
> to an
> integer since the 3.6 release.
> 
> I could make good use of this function in NetBSD; has it been  
> discussed before
> whether to add it to NetBSD?
> 
> If there are no particular reasons why it is not in NetBSD, I would  
> like to make
> an effort to port it and mail a diff.
> 
> 

Hi Marc!

Yeah, I also think we could use something like that. Currently I use the 
following in my own stuff to parse a string to int:

static int                      
parseint(const char *str)
{
        char            *ep;            
        long            lval;
 
        errno = 0;
        lval = strtol(str, &ep, 10);    
        if (str[0] == '\0' || *ep != '\0')
                errx(1, "not a number");
        if (errno == ERANGE) {
                if (lval >= INT_MAX)
                        errx(1, "out of range, maximum is %d", INT_MAX);
                else if (lval <= INT_MIN)
                        errx(1, "out of range, minimum is %d", INT_MIN);
        }
        return (int) lval;
}


I guess

  i = (int) strtonum(str, INT_MIN, INT_MAX, &err);

would do the same in fewer lines, and ssh, bioctl and sdiff in our tree are 
already using this function it seems.

-- 
Adam Hoka <Adam.Hoka%Gmail.com@localhost>
Adam Hoka <ahoka%NetBSD.org@localhost>
Adam Hoka <ahoka%MirBSD.de@localhost>


Home | Main Index | Thread Index | Old Index