diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 34257eea5..1997b083b 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2003-11-27 Jeff Johnston + + * libc/include/stdlib.h (_atoi_r): New prototype. + * libc/stdlib/atoi.c (_atoi_r): New reentrant function. + 2003-11-27 Jeff Johnston * libc/include/stdlib.h (_atoll_r, _atol_r): New prototypes. diff --git a/newlib/libc/include/stdlib.h b/newlib/libc/include/stdlib.h index 2b8a1765f..9354b1ea2 100644 --- a/newlib/libc/include/stdlib.h +++ b/newlib/libc/include/stdlib.h @@ -62,6 +62,7 @@ double _EXFUN(atof,(const char *__nptr)); float _EXFUN(atoff,(const char *__nptr)); #endif int _EXFUN(atoi,(const char *__nptr)); +int _EXFUN(_atoi_r,(struct _reent *, const char *__nptr)); long _EXFUN(atol,(const char *__nptr)); long _EXFUN(_atol_r,(struct _reent *, const char *__nptr)); _PTR _EXFUN(bsearch,(const _PTR __key, diff --git a/newlib/libc/stdlib/atoi.c b/newlib/libc/stdlib/atoi.c index c7792a454..6156eda4d 100644 --- a/newlib/libc/stdlib/atoi.c +++ b/newlib/libc/stdlib/atoi.c @@ -6,11 +6,17 @@ INDEX atoi INDEX atol +INDEX + _atoi_r +INDEX + _atol_r ANSI_SYNOPSIS #include int atoi(const char *<[s]>); long atol(const char *<[s]>); + int _atoi_r(struct _reent *<[ptr]>, const char *<[s]>); + long _atol_r(struct _reent *<[ptr]>, const char *<[s]>); TRAD_SYNOPSIS #include @@ -20,6 +26,14 @@ TRAD_SYNOPSIS long atol(<[s]>) char *<[s]>; + int _atoi_r(<[ptr]>, <[s]>) + struct _reent *<[ptr]>; + char *<[s]>; + + long _atol_r(<[ptr]>, <[s]>) + struct _reent *<[ptr]>; + char *<[s]>; + DESCRIPTION <> converts the initial portion of a string to an <>. @@ -28,12 +42,15 @@ DESCRIPTION <> is implemented as <<(int)strtol(s, NULL, 10).>> <> is implemented as <> + <<_atoi_r>> and <<_atol_r>> are reentrant versions of <> and + <> respectively, passing the reentrancy struct pointer. + RETURNS The functions return the converted value, if any. If no conversion was made, <<0>> is returned. PORTABILITY -<> is ANSI. +<>, <> are ANSI. No supporting OS subroutines are required. */ @@ -45,10 +62,20 @@ No supporting OS subroutines are required. #include #include <_ansi.h> +#ifndef _REENT_ONLY int _DEFUN (atoi, (s), _CONST char *s) { return (int) strtol (s, NULL, 10); } +#endif /* !_REENT_ONLY */ + +int +_DEFUN (_atoi_r, (s), + struct _reent *ptr _AND + _CONST char *s) +{ + return (int) _strtol_r (ptr, s, NULL, 10); +}