summaryrefslogtreecommitdiff
path: root/missing
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
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')
-rw-r--r--missing/strstr.c83
-rw-r--r--missing/strtol.c89
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;
}