xref: /freebsd/contrib/ntp/sntp/libopts/compat/strchr.c (revision 416ba5c74546f32a993436a99516d35008e9f384)
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