From cc2a11e0d098c27f11dc4bc930a8b9815f85bf7a Mon Sep 17 00:00:00 2001
From: Jeff Johnston <jjohnstn@redhat.com>
Date: Thu, 27 Nov 2003 20:54:12 +0000
Subject: [PATCH] 2003-11-27  Jeff Johnston  <jjohnstn@redhat.com>

        * libc/include/stdlib.h (_atoi_r): New prototype.
        * libc/stdlib/atoi.c (_atoi_r): New reentrant function.
---
 newlib/ChangeLog             |  5 +++++
 newlib/libc/include/stdlib.h |  1 +
 newlib/libc/stdlib/atoi.c    | 29 ++++++++++++++++++++++++++++-
 3 files changed, 34 insertions(+), 1 deletion(-)

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  <jjohnstn@redhat.com>
+
+	* libc/include/stdlib.h (_atoi_r): New prototype.
+	* libc/stdlib/atoi.c (_atoi_r): New reentrant function.
+
 2003-11-27  Jeff Johnston  <jjohnstn@redhat.com>
 
 	* 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 <stdlib.h>
         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 <stdlib.h>
@@ -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
    <<atoi>> converts the initial portion of a string to an <<int>>.
@@ -28,12 +42,15 @@ DESCRIPTION
    <<atoi(s)>> is implemented as <<(int)strtol(s, NULL, 10).>>
    <<atol(s)>> is implemented as <<strtol(s, NULL, 10).>>
 
+   <<_atoi_r>> and <<_atol_r>> are reentrant versions of <<atoi>> and
+   <<atol>> respectively, passing the reentrancy struct pointer.
+
 RETURNS
    The functions return the converted value, if any. If no conversion was
    made, <<0>> is returned.
 
 PORTABILITY
-<<atoi>> is ANSI.
+<<atoi>>, <<atol>> are ANSI.
 
 No supporting OS subroutines are required.
 */
@@ -45,10 +62,20 @@ No supporting OS subroutines are required.
 #include <stdlib.h>
 #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);
+}