tech-userlevel archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: strtonum(3) from OpenBSD?
On Fri, Jun 26, 2009 at 06:20:15PM +0000, David Holland wrote:
> Unless strtol is specifically granted permission to clear errno to 0
> after calling other functions, which it isn't in C99 (don't have POSIX
> on hand) there's a problem.
The POSIX version is explicit that it will not touch errno on success.
It also gives explicitly the errno = 0 + strtol idiom.
> There's also possibly an issue that C99 does not specifically say that
> endptr is set on the overflow failure case, so in principle one ought
> to test for that case before touching it. (Which is also unlike the
> example in strtol(3).)
I would expect a correct implementation of strtol to set endptr either
to the point of overflow or the first non-digit. I am not sure if the
standard requires full processing of the input or not for the overflow
case.
> It's too bad they didn't define the overflow case to return with
> endptr pointing at a digit. That would make things a lot easier in the
> common cases.
I don't think so. Overflow is detected by errno value, period. I think
you want to make the interface worse than it is for no good reason.
> What if some failing (and defective) internal call leaves a trap
> representation in errno?
I can't find anything in the C standard that allows setting errno for
integer arithmetic.
Joerg
Home |
Main Index |
Thread Index |
Old Index