summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib/atoll.c
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2001-12-25 04:10:50 +0000
committerache <ache@FreeBSD.org>2001-12-25 04:10:50 +0000
commit091d3aa837daf60bd832f189e92df8ab66586197 (patch)
treef459d8eef7a900e7333840ef9c570e9ce81b1125 /lib/libc/stdlib/atoll.c
parent91aada8d5feb4ccebe48ea3ab211000016c9aeaf (diff)
downloadFreeBSD-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.c10
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;
}
OpenPOWER on IntegriCloud