diff options
Diffstat (limited to 'missing/strchr.c')
| -rw-r--r-- | missing/strchr.c | 57 |
1 files changed, 22 insertions, 35 deletions
diff --git a/missing/strchr.c b/missing/strchr.c index 50714c9942..465f07b61e 100644 --- a/missing/strchr.c +++ b/missing/strchr.c @@ -1,45 +1,32 @@ -/* - * strchr --- search a string for a character - * - * We supply this routine for those systems that aren't standard yet. - */ +/* public domain rewrite of strchr(3) and strrchr(3) */ -#include <stdio.h> +#include "ruby/missing.h" + +size_t strlen(const char*); char * -strchr(str, c) -register const char *str, c; +strchr(const char *s, int c) { - if (c == '\0') { - /* thanks to Mike Brennan ... */ - do { - if (*str == c) - return (char *) str; - } while (*str++); - } else { - for (; *str; str++) - if (*str == c) - return (char *) str; - } - - return NULL; + if (c == 0) return (char *)s + strlen(s); + while (*s) { + if (*s == c) + return (char *)s; + s++; + } + return 0; } -/* - * strrchr --- find the last occurrence of a character in a string - * - * We supply this routine for those systems that aren't standard yet. - */ - char * -strrchr(str, c) -register const char *str, c; +strrchr(const char *s, int c) { - register const char *save = NULL; - - for (; *str; str++) - if (*str == c) - save = str; + const char *save; - return (char *) save; + if (c == 0) return (char *)s + strlen(s); + save = 0; + while (*s) { + if (*s == c) + save = s; + s++; + } + return (char *)save; } |
