/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "plstr.h" #include PR_IMPLEMENT(char*) PL_strstr(const char* big, const char* little) { if (((const char*)0 == big) || ((const char*)0 == little)) { return (char*)0; } if (((char)0 == *big) || ((char)0 == *little)) { return (char*)0; } return strstr(big, little); } PR_IMPLEMENT(char*) PL_strrstr(const char* big, const char* little) { const char* p; size_t ll; size_t bl; if (((const char*)0 == big) || ((const char*)0 == little)) { return (char*)0; } if (((char)0 == *big) || ((char)0 == *little)) { return (char*)0; } ll = strlen(little); bl = strlen(big); if (bl < ll) { return (char*)0; } p = &big[bl - ll]; for (; p >= big; p--) if (*little == *p) if (0 == strncmp(p, little, ll)) { return (char*)p; } return (char*)0; } PR_IMPLEMENT(char*) PL_strnstr(const char* big, const char* little, PRUint32 max) { size_t ll; if (((const char*)0 == big) || ((const char*)0 == little)) { return (char*)0; } if (((char)0 == *big) || ((char)0 == *little)) { return (char*)0; } ll = strlen(little); if (ll > (size_t)max) { return (char*)0; } max -= (PRUint32)ll; max++; for (; max && *big; big++, max--) if (*little == *big) if (0 == strncmp(big, little, ll)) { return (char*)big; } return (char*)0; } PR_IMPLEMENT(char*) PL_strnrstr(const char* big, const char* little, PRUint32 max) { const char* p; size_t ll; if (((const char*)0 == big) || ((const char*)0 == little)) { return (char*)0; } if (((char)0 == *big) || ((char)0 == *little)) { return (char*)0; } ll = strlen(little); for (p = big; max && *p; p++, max--); p -= ll; if (p < big) { return (char*)0; } for (; p >= big; p--) if (*little == *p) if (0 == strncmp(p, little, ll)) { return (char*)p; } return (char*)0; }