tech-userlevel archive

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

Re: strtonum(3) from OpenBSD?

At Sat, 27 Jun 2009 18:40:55 +0000, David Holland 
<> wrote:
Subject: Re: strtonum(3) from OpenBSD?
> That's the POINT. Calls that succeed may set errno anyway. You have to
> check that an error occurred before inspecting errno.

Well, with strtol(3) _both_ conditions must hold exactly -- it doesn't
really matter which test is done first!  :-)

It should also not matter for strtol(3) which order you check for
overflow, "no digits", and "trailing garbage" conditions either.

> The convention is that no (normal) call *clears errno to 0* on success.

Indeed.  Even if you've set errno to zero before making the call there
is no guarantee that it will remain as zero after a call (perhaps not
even if the call is guaranteed to be a direct system call with no other
intervening library calls).  Thus with strtol(3) and friends it is
necessary to both set errno to zero (or at least assure it has a value
other than ERANGE :-)) before calling them (assuming you do want to
accept their full range of possible return values) and use the combined
conditions of a min/max return value _and_ errno being set explicitly to
ERANGE to know that there was an overflow.

> A few calls that are specifically required to preserve the prior value
> of errno on success.

Hmmm...  I wasn't aware of that.  Which?

> Unfortunately, when standards compliance is at issue, sanity has
> little relevance.


                                                Greg A. Woods
                                                Planix, Inc.

<>       +1 416 218-0099

Attachment: pgpZR2RhS7Trv.pgp
Description: PGP signature

Home | Main Index | Thread Index | Old Index