From 83bf7d2f89d008a8d6c958f2020f78e26c525a4d Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Thu, 27 Nov 2003 20:15:47 +0000 Subject: [PATCH] 2003-11-27 Jeff Johnston * libc/include/stdlib.h (_atoll_r, _atol_r): New prototypes. * libc/stdlib/atol.c (_atol_r): New reentrant function. * libc/stdlib/atoll.c (_atoll_r): Ditto. --- newlib/ChangeLog | 6 ++++++ newlib/libc/include/stdlib.h | 2 ++ newlib/libc/stdlib/atol.c | 9 +++++++++ newlib/libc/stdlib/atoll.c | 27 ++++++++++++++++++++++++--- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 211c0664a..34257eea5 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +2003-11-27 Jeff Johnston + + * libc/include/stdlib.h (_atoll_r, _atol_r): New prototypes. + * libc/stdlib/atol.c (_atol_r): New reentrant function. + * libc/stdlib/atoll.c (_atoll_r): Ditto. + 2003-11-27 Artem B. Bityuckiy Jeff Johnston diff --git a/newlib/libc/include/stdlib.h b/newlib/libc/include/stdlib.h index 53dec3ec4..2b8a1765f 100644 --- a/newlib/libc/include/stdlib.h +++ b/newlib/libc/include/stdlib.h @@ -63,6 +63,7 @@ float _EXFUN(atoff,(const char *__nptr)); #endif int _EXFUN(atoi,(const char *__nptr)); long _EXFUN(atol,(const char *__nptr)); +long _EXFUN(_atol_r,(struct _reent *, const char *__nptr)); _PTR _EXFUN(bsearch,(const _PTR __key, const _PTR __base, size_t __nmemb, @@ -164,6 +165,7 @@ unsigned short * _VOID _EXFUN(srand48,(long)); _VOID _EXFUN(_srand48_r,(struct _reent *, long)); long long _EXFUN(atoll,(const char *__nptr)); +long long _EXFUN(_atoll_r,(struct _reent *, const char *__nptr)); long long _EXFUN(llabs,(long long)); lldiv_t _EXFUN(lldiv,(long long __numer, long long __denom)); long long _EXFUN(strtoll,(const char *__n, char **__end_PTR, int __base)); diff --git a/newlib/libc/stdlib/atol.c b/newlib/libc/stdlib/atol.c index 6b059a8d2..8d0e5cd0b 100644 --- a/newlib/libc/stdlib/atol.c +++ b/newlib/libc/stdlib/atol.c @@ -5,8 +5,17 @@ #include #include <_ansi.h> +#ifndef _REENT_ONLY long _DEFUN (atol, (s), _CONST char *s) { return strtol (s, NULL, 10); } +#endif /* !_REENT_ONLY */ + +long +_DEFUN (_atol_r, (ptr, s), struct _reent *ptr _AND _CONST char *s) +{ + return _strtol_r (ptr, s, NULL, 10); +} + diff --git a/newlib/libc/stdlib/atoll.c b/newlib/libc/stdlib/atoll.c index 1dd4ec39e..a6abd9595 100644 --- a/newlib/libc/stdlib/atoll.c +++ b/newlib/libc/stdlib/atoll.c @@ -4,21 +4,32 @@ FUNCTION INDEX atoll +INDEX + _atoll_r ANSI_SYNOPSIS #include long long atoll(const char *<[str]>); + long long _atoll_r(struct _reent *<[ptr]>, const char *<[str]>); TRAD_SYNOPSIS #include long long atoll(<[str]>) const char *<[str]>; + long long _atoll_r(<[ptr]>, <[str]>) + struct _reent *<[ptr]>; + const char *<[str]>; + DESCRIPTION The function <> converts the initial portion of the string -pointed to by <<*<[str]>>> to a type <>. The call to -atoll(str) should be equivalent to strtoll(str, (char **)NULL, 10) -except that <> doesn't detect errors. +pointed to by <<*<[str]>>> to a type <>. A call to +atoll(str) in this implementation is equivalent to +strtoll(str, (char **)NULL, 10) including behavior on error. + +The alternate function <<_atoll_r>> is a reentrant version. The +extra argument <[reent]> is a pointer to a reentrancy structure. + RETURNS The converted value. @@ -65,9 +76,19 @@ No supporting OS subroutines are required. #include #include +#ifndef _REENT_ONLY long long _DEFUN(atoll, (str), _CONST char *str) { return strtoll(str, (char **)NULL, 10); } +#endif /* !_REENT_ONLY */ + +long long +_DEFUN(_atoll_r, (ptr, str), + struct _reent *ptr _AND + _CONST char *str) +{ + return _strtoll_r(ptr, str, (char **)NULL, 10); +}