root/maint/gnulib/lib/wcsstr-impl.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. wcsstr

   1 /* Locate a substring in a wide string.
   2    Copyright (C) 1999, 2011-2021 Free Software Foundation, Inc.
   3    Written by Bruno Haible <bruno@clisp.org>, 1999.
   4 
   5    This file is free software: you can redistribute it and/or modify
   6    it under the terms of the GNU Lesser General Public License as
   7    published by the Free Software Foundation; either version 3 of the
   8    License, or (at your option) any later version.
   9 
  10    This file is distributed in the hope that it will be useful,
  11    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13    GNU Lesser General Public License for more details.
  14 
  15    You should have received a copy of the GNU Lesser General Public License
  16    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  17 
  18 wchar_t *
  19 wcsstr (const wchar_t *haystack, const wchar_t *needle)
     /* [previous][next][first][last][top][bottom][index][help] */
  20 {
  21   wchar_t n = needle[0];
  22 
  23   /* Is needle empty?  */
  24   if (n == (wchar_t)'\0')
  25     return (wchar_t *) haystack;
  26 
  27   /* Is needle nearly empty?  */
  28   if (needle[1] == (wchar_t)'\0')
  29     return wcschr (haystack, n);
  30 
  31   /* Search for needle's first character.  */
  32   for (; *haystack != (wchar_t)'\0'; haystack++)
  33     {
  34       if (*haystack == n)
  35         {
  36           /* Compare with needle's remaining characters.  */
  37           const wchar_t *hptr = haystack + 1;
  38           const wchar_t *nptr = needle + 1;
  39           for (;;)
  40             {
  41               if (*hptr != *nptr)
  42                 break;
  43               hptr++; nptr++;
  44               if (*nptr == (wchar_t)'\0')
  45                 return (wchar_t *) haystack;
  46             }
  47         }
  48     }
  49 
  50   return NULL;
  51 }

/* [previous][next][first][last][top][bottom][index][help] */