1/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
2This file is part of the GNU C Library.
3
4The GNU C Library is free software; you can redistribute it and/or
5modify it under the terms of the GNU Library General Public License as
6published by the Free Software Foundation; either version 2 of the
7License, or (at your option) any later version.
8
9The GNU C Library is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12Library General Public License for more details.
13
14You should have received a copy of the GNU Library General Public
15License along with the GNU C Library; see the file COPYING.LIB.  If
16not, write to the Free Software Foundation, Inc., 59 Temple Place -
17Suite 330, Boston, MA 02111-1307, USA.
18
19This file was modified slightly by Ian Lance Taylor, May 1992, for
20Taylor UUCP.  */
21
22#include "uucp.h"
23
24/* Return the first ocurrence of NEEDLE in HAYSTACK.  */
25char *
26strstr (haystack, needle)
27     const char *const haystack;
28     const char *const needle;
29{
30  register const char *const needle_end = strchr(needle, '\0');
31  register const char *const haystack_end = strchr(haystack, '\0');
32  register const size_t needle_len = needle_end - needle;
33  register const size_t needle_last = needle_len - 1;
34  register const char *begin;
35
36  if (needle_len == 0)
37    return (char *) haystack_end;
38  if ((size_t) (haystack_end - haystack) < needle_len)
39    return NULL;
40
41  for (begin = &haystack[needle_last]; begin < haystack_end; ++begin)
42    {
43      register const char *n = &needle[needle_last];
44      register const char *h = begin;
45      do
46	if (*h != *n)
47	  goto loop;
48      while (--n >= needle && --h >= haystack);
49
50      return (char *) h;
51    loop:;
52    }
53
54  return NULL;
55}
56