Ruby: missing/strstr.c Source File

Ruby 3.0.5p211 (2022-11-24 revision ba5cf0f7c52d4d35cc6a173c89eda98ceffa2dcf)

strstr.c
Go to the documentation of this file.
1/* public domain rewrite of strstr(3) */
2
3#include "ruby/missing.h"
4
5 size_t strlen(const char*);
6
7char *
8 strstr(const char *haystack, const char *needle)
9{
10 const char *hend;
11 const char *a, *b;
12
13 if (*needle == 0) return (char *)haystack;
14 hend = haystack + strlen(haystack) - strlen(needle) + 1;
15 while (haystack < hend) {
16 if (*haystack == *needle) {
17 a = haystack;
18 b = needle;
19 for (;;) {
20 if (*b == 0) return (char *)haystack;
21 if (*a++ != *b++) {
22 break;
23 }
24 }
25 }
26 haystack++;
27 }
28 return 0;
29}
missing.h
Prototype for *.c in ./missing, and for missing timeval struct.
strlen
size_t strlen(const char *)
strstr
char * strstr(const char *haystack, const char *needle)
Definition: strstr.c:8