Hi Ian, On 12/8/22 13:34, Ian Abbott wrote:
The `scanf()` function does not intentionally set `errno` to `ERANGE`. That is just a side effect of the code that it uses to perform conversions. It also does not work as reliably as indicated in the 'man' page when the target integer type is narrower than `long`. Typically (at least in glibc) for target integer types narrower than `long`, the number has to exceed the range of `long` (for signed conversions) or `unsigned long` (for unsigned conversions) for `errno` to be set to `ERANGE`. Documenting `ERANGE` in the ERRORS section kind of implies that `scanf()` should return `EOF` when an integer overflow is encountered, which it doesn't (and doing so would violate the C standard). Just remove any mention of the `ERANGE` error to avoid confusion. Fixes: 646af540e467 ("Add an ERRORS section documenting at least some of the errors that may occur for scanf().") Cc: Michael Kerrisk <mtk.manpages@xxxxxxxxx> Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx>
I see. How about saying something like "it may also fail for any of any errors that functions used to perform the conversions may fail"?
Cheers, Alex
--- man3/scanf.3 | 7 ------- 1 file changed, 7 deletions(-) diff --git a/man3/scanf.3 b/man3/scanf.3 index ba470a5c1..c5ff59f45 100644 --- a/man3/scanf.3 +++ b/man3/scanf.3 @@ -576,10 +576,6 @@ is NULL. .TP .B ENOMEM Out of memory. -.TP -.B ERANGE -The result of an integer conversion would exceed the size -that can be stored in the corresponding integer type. .SH ATTRIBUTES For an explanation of the terms used in this section, see .BR attributes (7). @@ -609,9 +605,6 @@ The functions and .BR sscanf () conform to C89 and C99 and POSIX.1-2001. -These standards do not specify the -.B ERANGE -error. .PP The .B q
-- <http://www.alejandro-colomar.es/>
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature