strmatch.c
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:2k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /************************************************************************/
  2. /* strmatch - matches two strings */
  3. /* */
  4. /* Author: Marcus E. Hennecke <marcush@leland.stanford.edu> */
  5. /* Copyright (C) 1995 by Marcus E. Hennecke */
  6. /* This program 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 2 of the License, or */
  9. /* (at your option) any later version. */
  10. /* */
  11. /* This program 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. /* You should have received a copy of the GNU General Public License */
  16. /* along with this program; if not, write to the Free Software */
  17. /* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  18. /************************************************************************/
  19. #include <stdio.h>
  20. int strmatch(const char *string, const char *pattern)
  21. {
  22.     const char *ssubstart = NULL, *psubstart = NULL;
  23.     char sch, pch;
  24.     for (; (sch = *string); string++, pattern++)
  25.     {
  26. pch = *pattern;
  27. if (pch == '*')
  28. {
  29.     ssubstart = string;
  30.     do
  31.     {
  32. psubstart = pattern;
  33. pch = *++pattern;
  34.     }
  35.     while (pch == '*');
  36.     if (pch == '')
  37. return 1;
  38. }
  39. if (pch == '?')
  40.     continue;
  41. if (pch == '\')
  42.     pch = *++pattern;
  43. if (pch == sch)
  44.     continue;
  45. if (psubstart == NULL)
  46.     return 0;
  47. pattern = psubstart;
  48. string = ssubstart++;
  49.     }
  50.     while (*pattern == '*')
  51. pattern++;
  52.     return (*pattern == '');
  53. }