|
|
1.1 ! root 1: /* ! 2: * strtol.c -- ! 3: * ! 4: * Source code for the "strtol" library procedure. ! 5: * ! 6: * Copyright 1988 Regents of the University of California ! 7: * Permission to use, copy, modify, and distribute this ! 8: * software and its documentation for any purpose and without ! 9: * fee is hereby granted, provided that the above copyright ! 10: * notice appear in all copies. The University of California ! 11: * makes no representations about the suitability of this ! 12: * software for any purpose. It is provided "as is" without ! 13: * express or implied warranty. ! 14: */ ! 15: ! 16: #ifndef lint ! 17: static char rcsid[] = "$Header: /sprite/src/lib/tcl/compat/RCS/strtol.c,v 1.1 91/09/22 15:42:49 ouster Exp $ SPRITE (Berkeley)"; ! 18: #endif /* not lint */ ! 19: ! 20: #include <ctype.h> ! 21: ! 22: ! 23: /* ! 24: *---------------------------------------------------------------------- ! 25: * ! 26: * strtol -- ! 27: * ! 28: * Convert an ASCII string into an integer. ! 29: * ! 30: * Results: ! 31: * The return value is the integer equivalent of string. If endPtr ! 32: * is non-NULL, then *endPtr is filled in with the character ! 33: * after the last one that was part of the integer. If string ! 34: * doesn't contain a valid integer value, then zero is returned ! 35: * and *endPtr is set to string. ! 36: * ! 37: * Side effects: ! 38: * None. ! 39: * ! 40: *---------------------------------------------------------------------- ! 41: */ ! 42: ! 43: long int ! 44: strtol(string, endPtr, base) ! 45: char *string; /* String of ASCII digits, possibly ! 46: * preceded by white space. For bases ! 47: * greater than 10, either lower- or ! 48: * upper-case digits may be used. ! 49: */ ! 50: char **endPtr; /* Where to store address of terminating ! 51: * character, or NULL. */ ! 52: int base; /* Base for conversion. Must be less ! 53: * than 37. If 0, then the base is chosen ! 54: * from the leading characters of string: ! 55: * "0x" means hex, "0" means octal, anything ! 56: * else means decimal. ! 57: */ ! 58: { ! 59: register char *p; ! 60: int result; ! 61: ! 62: /* ! 63: * Skip any leading blanks. ! 64: */ ! 65: ! 66: p = string; ! 67: while (isspace(*p)) { ! 68: p += 1; ! 69: } ! 70: ! 71: /* ! 72: * Check for a sign. ! 73: */ ! 74: ! 75: if (*p == '-') { ! 76: p += 1; ! 77: result = -(strtoul(p, endPtr, base)); ! 78: } else { ! 79: if (*p == '+') { ! 80: p += 1; ! 81: } ! 82: result = strtoul(p, endPtr, base); ! 83: } ! 84: if ((result == 0) && (endPtr != 0) && (*endPtr == p)) { ! 85: *endPtr = string; ! 86: } ! 87: return result; ! 88: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.