strchr.c (1254B)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #include "plstr.h" 7 #include <string.h> 8 9 PR_IMPLEMENT(char*) 10 PL_strchr(const char* s, char c) { 11 if ((const char*)0 == s) { 12 return (char*)0; 13 } 14 15 return strchr(s, c); 16 } 17 18 PR_IMPLEMENT(char*) 19 PL_strrchr(const char* s, char c) { 20 if ((const char*)0 == s) { 21 return (char*)0; 22 } 23 24 return strrchr(s, c); 25 } 26 27 PR_IMPLEMENT(char*) 28 PL_strnchr(const char* s, char c, PRUint32 n) { 29 if ((const char*)0 == s) { 30 return (char*)0; 31 } 32 33 for (; n && *s; s++, n--) 34 if (*s == c) { 35 return (char*)s; 36 } 37 38 if (((char)0 == c) && (n > 0) && ((char)0 == *s)) { 39 return (char*)s; 40 } 41 42 return (char*)0; 43 } 44 45 PR_IMPLEMENT(char*) 46 PL_strnrchr(const char* s, char c, PRUint32 n) { 47 const char* p; 48 49 if ((const char*)0 == s) { 50 return (char*)0; 51 } 52 53 for (p = s; n && *p; p++, n--); 54 55 if (((char)0 == c) && (n > 0) && ((char)0 == *p)) { 56 return (char*)p; 57 } 58 59 for (p--; p >= s; p--) 60 if (*p == c) { 61 return (char*)p; 62 } 63 64 return (char*)0; 65 }