diff options
Diffstat (limited to 'missing/strstr.c')
-rw-r--r-- | missing/strstr.c | 83 |
1 files changed, 18 insertions, 65 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; } |