diff options
author | ache <ache@FreeBSD.org> | 2001-12-25 04:10:50 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 2001-12-25 04:10:50 +0000 |
commit | 091d3aa837daf60bd832f189e92df8ab66586197 (patch) | |
tree | f459d8eef7a900e7333840ef9c570e9ce81b1125 /lib/libc/stdlib/atoll.c | |
parent | 91aada8d5feb4ccebe48ea3ab211000016c9aeaf (diff) | |
download | FreeBSD-src-091d3aa837daf60bd832f189e92df8ab66586197.zip FreeBSD-src-091d3aa837daf60bd832f189e92df8ab66586197.tar.gz |
Preserve errno.
According to C99:
"The functions atof, atoi, atol, and atoll need not
affect the value of the integer expression errno on an
error. If the value of the result cannot be represented,
the behavior is undefined."
Diffstat (limited to 'lib/libc/stdlib/atoll.c')
-rw-r--r-- | lib/libc/stdlib/atoll.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/libc/stdlib/atoll.c b/lib/libc/stdlib/atoll.c index 72ca59a..c0a7212 100644 --- a/lib/libc/stdlib/atoll.c +++ b/lib/libc/stdlib/atoll.c @@ -33,12 +33,18 @@ * $FreeBSD$ */ -#include <stddef.h> +#include <errno.h> #include <stdlib.h> long long atoll(str) const char *str; { - return(strtoll(str, (char **)NULL, 10)); + long long r; + int saverr; + + saverr = errno; + r = strtoll(str, (char **)NULL, 10); + errno = saverr; + return r; } |