home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.2 (Developer) / NS_dev_3.2.iso / NextDeveloper / Source / GNU / cctools / as / strstr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-07  |  2.0 KB  |  84 lines

  1. /* strstr - find first occurrence of wanted in s
  2.    Copyright (C) 1989, Free Software Foundation.
  3.  
  4. This file is part of GAS, the GNU Assembler.
  5.  
  6. GAS is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 1, or (at your option)
  9. any later version.
  10.  
  11. GAS is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GAS; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.    
  20.  
  21.  
  22. #define CONST
  23. #define SIZET int
  24.  
  25. #define    NULL    0
  26.  
  27. char *                /* found string, or NULL if none */
  28. strstr(s, wanted)
  29. CONST char *s;
  30. CONST char *wanted;
  31. {
  32.     register CONST char *scan;
  33.     register SIZET len;
  34.     register char firstc;
  35.  
  36.     /*
  37.      * The odd placement of the two tests is so "" is findable.
  38.      * Also, we inline the first char for speed.
  39.      * The ++ on scan has been moved down for optimization.
  40.      */
  41.     firstc = *wanted;
  42.     len = strlen(wanted);
  43.     for (scan = s; *scan != firstc || strncmp(scan, wanted, len) != 0; )
  44.         if (*scan++ == '\0')
  45.             return(NULL);
  46.     return(scan);
  47. }
  48. #ifdef NeXT
  49. char *                /* found string, or NULL if none */
  50. strstrn(s, wanted, n)
  51. CONST char *s;
  52. CONST char *wanted;
  53. int n;
  54. {
  55.     register CONST char *scan;
  56.     register SIZET len;
  57.     register char firstc;
  58.     char *lim;
  59.  
  60.     /*
  61.      * The odd placement of the two tests is so "" is findable.
  62.      * Also, we inline the first char for speed.
  63.      * The ++ on scan has been moved down for optimization.
  64.      */
  65.     lim = s + n;
  66.     firstc = *wanted;
  67.     len = strlen(wanted);
  68. #if 0
  69.     for (scan = s; *scan != firstc || strncmp(scan, wanted, len) != 0; )
  70.         if (scan++ >= lim)
  71.             return(NULL);
  72.     return(scan);
  73. #endif
  74.     scan = s;
  75.     while(n >= len) {
  76.       if (strncmp(scan, wanted, len) == 0)
  77.         return(scan);
  78.       scan++;
  79.       n--;
  80.     }
  81.     return(NULL);
  82. }
  83. #endif NeXT
  84.