OSDN Git Service

* omp-low.c (gate_expand_omp_ssa): Remove.
[pf3gnuchains/gcc-fork.git] / libiberty / strtol.c
index db27ee0..acc7882 100644 (file)
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
+ * 3. [rescinded 22 July 1999]
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  * SUCH DAMAGE.
  */
 
+/*
+
+@deftypefn Supplemental {long int} strtol (const char *@var{string}, char **@var{endptr}, int @var{base})
+@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, char **@var{endptr}, int @var{base})
+
+The @code{strtol} function converts the string in @var{string} to a
+long integer value according to the given @var{base}, which must be
+between 2 and 36 inclusive, or be the special value 0.  If @var{base}
+is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x}
+to indicate bases 8 and 16, respectively, else default to base 10.
+When the base is 16 (either explicitly or implicitly), a prefix of
+@code{0x} is allowed.  The handling of @var{endptr} is as that of
+@code{strtod} above.  The @code{strtoul} function is the same, except
+that the converted value is unsigned.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_LIMITS_H
 #include <limits.h>
-#include <ctype.h>
+#endif
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+#endif
 #include <errno.h>
-#if 0
-#include <stdlib.h>
+#ifdef NEED_DECLARATION_ERRNO
+extern int errno;
 #endif
-#include "ansidecl.h"
+#include "safe-ctype.h"
 
 /* FIXME: It'd be nice to configure around these, but the include files are too
    painful.  These macros should at least be more portable than hardwired hex
  * alphabets and digits are each contiguous.
  */
 long
-strtol(nptr, endptr, base)
-       CONST char *nptr;
-       char **endptr;
-       register int base;
+strtol(const char *nptr, char **endptr, register int base)
 {
-       register CONST char *s = nptr;
+       register const char *s = nptr;
        register unsigned long acc;
        register int c;
        register unsigned long cutoff;
@@ -80,7 +100,7 @@ strtol(nptr, endptr, base)
         */
        do {
                c = *s++;
-       } while (isspace(c));
+       } while (ISSPACE(c));
        if (c == '-') {
                neg = 1;
                c = *s++;
@@ -116,15 +136,15 @@ strtol(nptr, endptr, base)
        cutlim = cutoff % (unsigned long)base;
        cutoff /= (unsigned long)base;
        for (acc = 0, any = 0;; c = *s++) {
-               if (isdigit(c))
+               if (ISDIGIT(c))
                        c -= '0';
-               else if (isalpha(c))
-                       c -= isupper(c) ? 'A' - 10 : 'a' - 10;
+               else if (ISALPHA(c))
+                       c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10;
                else
                        break;
                if (c >= base)
                        break;
-               if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
+               if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
                        any = -1;
                else {
                        any = 1;