Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Jan 2005 00:44:06 +0300
From:      Andrey Chernov <ache@nagual.pp.ru>
To:        Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
Cc:        bde@FreeBSD.ORG
Subject:   Re: Implementation errors in strtol()
Message-ID:  <20050120214406.GA70088@nagual.pp.ru>
In-Reply-To: <20050120211449.GC30862@uriah.heep.sax.de>
References:  <20050120192324.GA30862@uriah.heep.sax.de> <20050120205501.GA69123@nagual.pp.ru> <20050120211449.GC30862@uriah.heep.sax.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jan 20, 2005 at 10:14:49PM +0100, Joerg Wunsch wrote:
> Yes, I know.  Anyway, how could POSIX (or the Single UNIX
> Specification, for that matter) possibly contradict to the C standard?

There is common practice for both POSIX and SUS to extend errno values 
beyond C standard, see lots of other functions. Personally I do not 
research the reason of their decision, just point to the fact.

> ``The value of errno is zero at program startup, but is never set to
> zero by any library function.170) The value of errno may be set to
                                                 ^^^^^^^^^^^^^^^^
> nonzero by a library function call whether or not there is an error,
> provided the use of errno is not documented in the description of the
                             ^^^^^^^^^^^^^^^^^
> function in this International Standard.''

Errno may be set in case of error with not documented errno. Thats how I 
read it, but I may miss something.

> Still, my major point was that "0x" sequences are falsely rejected as

It clearly should be rejected with EINVAL in case base == 16, 
because 0 alone is not valid HEX sequence and no valid sequence found at 
this point. I am not sure about other bases.

> conversion errors, and that strings consisting solely of a plus or
> minus sign should not throw an error either, as I read the C standard.

+- may produce EINVAL, as POSIX says.

In general please don't forget that strtol(), atol() etc. supposed to 
parse user input and _detect_ syntax errors, it is their purpose. If they 
not do it or do it in half, each program forced to use its own parser 
instead.

-- 
http://ache.pp.ru/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050120214406.GA70088>