diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-13 10:20:14 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-13 10:20:14 +0000 |
commit | 6ae3d6f033c48302455960dd869c54da03dbca63 (patch) | |
tree | 26b49e0e1fc71647bd4d25d2cce43f9d5282a22b /missing | |
parent | d0dc94e494bc6fd0f3432c1d59f24ad697d11e28 (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')
-rw-r--r-- | missing/strstr.c | 83 | ||||
-rw-r--r-- | missing/strtol.c | 89 |
2 files changed, 35 insertions, 137 deletions
diff --git a/missing/strstr.c b/missing/strstr.c index c54349983e..1673518f06 100644 --- a/missing/strstr.c +++ b/missing/strstr.c @@ -1,73 +1,26 @@ -/* - * strstr.c -- - * - * Source code for the "strstr" library routine. - * - * Copyright 1988-1991 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 appears 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. - */ - -#ifndef lint -static char rcsid[] = "$Header$ SPRITE (Berkeley)"; -#endif /* not lint */ - -/* - *---------------------------------------------------------------------- - * - * strstr -- - * - * Locate the first instance of a substring in a string. - * - * Results: - * If string contains substring, the return value is the - * location of the first matching instance of substring - * in string. If string doesn't contain substring, the - * return value is 0. Matching is done on an exact - * character-for-character basis with no wildcards or special - * characters. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ +/* public domain rewrite of strstr(3) */ char * -strstr(string, substring) - register char *string; /* String to search. */ - char *substring; /* Substring to try to find in string. */ +strstr(haystack, needle) + char *haystack, *needle; { - register char *a, *b; - - /* First scan quickly through the two strings looking for a - * single-character match. When it's found, then compare the - * rest of the substring. - */ + char *hend; + char *a, *b; - b = substring; - if (*b == 0) { - return string; - } - for ( ; *string != 0; string += 1) { - if (*string != *b) { - continue; - } - a = string; - while (1) { - if (*b == 0) { - return string; - } - if (*a++ != *b++) { - break; + if (*needle == 0) return haystack; + hend = haystack + strlen(haystack) - strlen(needle) + 1; + while (haystack < hend) { + if (*haystack == *needle) { + a = haystack; + b = needle; + for (;;) { + if (*b == 0) return haystack; + if (*a++ != *b++) { + break; + } } } - b = substring; + haystack++; } - return (char *) 0; + return 0; } 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; } |