tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

strstr.c (2198B)


      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_strstr(const char* big, const char* little) {
     11  if (((const char*)0 == big) || ((const char*)0 == little)) {
     12    return (char*)0;
     13  }
     14  if (((char)0 == *big) || ((char)0 == *little)) {
     15    return (char*)0;
     16  }
     17 
     18  return strstr(big, little);
     19 }
     20 
     21 PR_IMPLEMENT(char*)
     22 PL_strrstr(const char* big, const char* little) {
     23  const char* p;
     24  size_t ll;
     25  size_t bl;
     26 
     27  if (((const char*)0 == big) || ((const char*)0 == little)) {
     28    return (char*)0;
     29  }
     30  if (((char)0 == *big) || ((char)0 == *little)) {
     31    return (char*)0;
     32  }
     33 
     34  ll = strlen(little);
     35  bl = strlen(big);
     36  if (bl < ll) {
     37    return (char*)0;
     38  }
     39  p = &big[bl - ll];
     40 
     41  for (; p >= big; p--)
     42    if (*little == *p)
     43      if (0 == strncmp(p, little, ll)) {
     44        return (char*)p;
     45      }
     46 
     47  return (char*)0;
     48 }
     49 
     50 PR_IMPLEMENT(char*)
     51 PL_strnstr(const char* big, const char* little, PRUint32 max) {
     52  size_t ll;
     53 
     54  if (((const char*)0 == big) || ((const char*)0 == little)) {
     55    return (char*)0;
     56  }
     57  if (((char)0 == *big) || ((char)0 == *little)) {
     58    return (char*)0;
     59  }
     60 
     61  ll = strlen(little);
     62  if (ll > (size_t)max) {
     63    return (char*)0;
     64  }
     65  max -= (PRUint32)ll;
     66  max++;
     67 
     68  for (; max && *big; big++, max--)
     69    if (*little == *big)
     70      if (0 == strncmp(big, little, ll)) {
     71        return (char*)big;
     72      }
     73 
     74  return (char*)0;
     75 }
     76 
     77 PR_IMPLEMENT(char*)
     78 PL_strnrstr(const char* big, const char* little, PRUint32 max) {
     79  const char* p;
     80  size_t ll;
     81 
     82  if (((const char*)0 == big) || ((const char*)0 == little)) {
     83    return (char*)0;
     84  }
     85  if (((char)0 == *big) || ((char)0 == *little)) {
     86    return (char*)0;
     87  }
     88 
     89  ll = strlen(little);
     90 
     91  for (p = big; max && *p; p++, max--);
     92 
     93  p -= ll;
     94  if (p < big) {
     95    return (char*)0;
     96  }
     97 
     98  for (; p >= big; p--)
     99    if (*little == *p)
    100      if (0 == strncmp(p, little, ll)) {
    101        return (char*)p;
    102      }
    103 
    104  return (char*)0;
    105 }