1ea906c41SOllivier Robert /*
2ea906c41SOllivier Robert SYNOPSIS
3ea906c41SOllivier Robert #include <string.h>
4ea906c41SOllivier Robert
5ea906c41SOllivier Robert char *strchr(char const *s, int c);
6ea906c41SOllivier Robert
7ea906c41SOllivier Robert char *strrchr(char const *s, int c);
8ea906c41SOllivier Robert
9ea906c41SOllivier Robert DESCRIPTION
10ea906c41SOllivier Robert The strchr() function returns a pointer to the first occurrence of the
11ea906c41SOllivier Robert character c in the string s.
12ea906c41SOllivier Robert
13ea906c41SOllivier Robert The strrchr() function returns a pointer to the last occurrence of the
14ea906c41SOllivier Robert character c in the string s.
15ea906c41SOllivier Robert
16ea906c41SOllivier Robert Here "character" means "byte" - these functions do not work with wide
17ea906c41SOllivier Robert or multi-byte characters.
18ea906c41SOllivier Robert
19ea906c41SOllivier Robert RETURN VALUE
20ea906c41SOllivier Robert The strchr() and strrchr() functions return a pointer to the matched
21ea906c41SOllivier Robert character or NULL if the character is not found.
22ea906c41SOllivier Robert
23ea906c41SOllivier Robert CONFORMING TO
24ea906c41SOllivier Robert SVID 3, POSIX, BSD 4.3, ISO 9899
25ea906c41SOllivier Robert */
26ea906c41SOllivier Robert
27*2b15cb3dSCy Schubert static char *
28*2b15cb3dSCy Schubert strchr(char const *s, int c);
29*2b15cb3dSCy Schubert
30*2b15cb3dSCy Schubert static char *
31*2b15cb3dSCy Schubert strrchr(char const *s, int c);
32*2b15cb3dSCy Schubert
33*2b15cb3dSCy Schubert static char *
strchr(char const * s,int c)34ea906c41SOllivier Robert strchr(char const *s, int c)
35ea906c41SOllivier Robert {
36ea906c41SOllivier Robert do {
37*2b15cb3dSCy Schubert if ((unsigned char)*s == (unsigned char)c)
38ea906c41SOllivier Robert return s;
39ea906c41SOllivier Robert
40ea906c41SOllivier Robert } while (*(++s) != NUL);
41ea906c41SOllivier Robert
42ea906c41SOllivier Robert return NULL;
43ea906c41SOllivier Robert }
44ea906c41SOllivier Robert
45*2b15cb3dSCy Schubert static char *
strrchr(char const * s,int c)46ea906c41SOllivier Robert strrchr(char const *s, int c)
47ea906c41SOllivier Robert {
48ea906c41SOllivier Robert char const *e = s + strlen(s);
49ea906c41SOllivier Robert
50ea906c41SOllivier Robert for (;;) {
51ea906c41SOllivier Robert if (--e < s)
52ea906c41SOllivier Robert break;
53ea906c41SOllivier Robert
54*2b15cb3dSCy Schubert if ((unsigned char)*e == (unsigned char)c)
55ea906c41SOllivier Robert return e;
56ea906c41SOllivier Robert }
57ea906c41SOllivier Robert return NULL;
58ea906c41SOllivier Robert }
59ea906c41SOllivier Robert
60ea906c41SOllivier Robert /*
61ea906c41SOllivier Robert * Local Variables:
62ea906c41SOllivier Robert * mode: C
63ea906c41SOllivier Robert * c-file-style: "stroustrup"
64ea906c41SOllivier Robert * indent-tabs-mode: nil
65ea906c41SOllivier Robert * End:
66ea906c41SOllivier Robert * end of compat/strsignal.c */
67