summaryrefslogtreecommitdiff
path: root/missing/strtol.c
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-13 10:20:14 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-13 10:20:14 +0000
commit6ae3d6f033c48302455960dd869c54da03dbca63 (patch)
tree26b49e0e1fc71647bd4d25d2cce43f9d5282a22b /missing/strtol.c
parentd0dc94e494bc6fd0f3432c1d59f24ad697d11e28 (diff)
Merge from 1.7: replace with public-domain ones.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'missing/strtol.c')
-rw-r--r--missing/strtol.c89
1 files changed, 17 insertions, 72 deletions
diff --git a/missing/strtol.c b/missing/strtol.c
index 4941f43b91..e94aa54ca0 100644
--- a/missing/strtol.c
+++ b/missing/strtol.c
@@ -1,84 +1,29 @@
-/*
- * strtol.c --
- *
- * Source code for the "strtol" library procedure.
- *
- * Copyright 1988 Regents of the University of California
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies. The University of California
- * makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without
- * express or implied warranty.
- */
+/* public domain rewrite of strtol(3) */
#include <ctype.h>
-
-/*
- *----------------------------------------------------------------------
- *
- * strtol --
- *
- * Convert an ASCII string into an integer.
- *
- * Results:
- * The return value is the integer equivalent of string. If endPtr
- * is non-NULL, then *endPtr is filled in with the character
- * after the last one that was part of the integer. If string
- * doesn't contain a valid integer value, then zero is returned
- * and *endPtr is set to string.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
-long int
-strtol(string, endPtr, base)
- char *string; /* String of ASCII digits, possibly
- * preceded by white space. For bases
- * greater than 10, either lower- or
- * upper-case digits may be used.
- */
- char **endPtr; /* Where to store address of terminating
- * character, or NULL. */
- int base; /* Base for conversion. Must be less
- * than 37. If 0, then the base is chosen
- * from the leading characters of string:
- * "0x" means hex, "0" means octal, anything
- * else means decimal.
- */
+long
+strtol(nptr, endptr, base)
+ char *nptr;
+ char **endptr;
+ int base;
{
- register char *p;
- int result;
-
- /*
- * Skip any leading blanks.
- */
+ long result;
+ char *p = nptr;
- p = string;
while (isspace(*p)) {
- p += 1;
+ p++;
}
-
- /*
- * Check for a sign.
- */
-
if (*p == '-') {
- p += 1;
- result = -(strtoul(p, endPtr, base));
- } else {
- if (*p == '+') {
- p += 1;
- }
- result = strtoul(p, endPtr, base);
+ p++;
+ result = -strtoul(p, endptr, base);
+ }
+ else {
+ if (*p == '+') p++;
+ result = strtoul(p, endptr, base);
}
- if ((result == 0) && (endPtr != 0) && (*endPtr == p)) {
- *endPtr = string;
+ if (endptr != 0 && *endptr == p) {
+ *endptr = nptr;
}
return result;
}