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

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** strutils.c
  3. **
  4. ** Copyright (c) 1995 Peter Eriksson <pen@signum.se>
  5. **
  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 <string.h>
  20. #include "phttpd.h"
  21. char **strsplit(char *path, int delim, int unquote)
  22. {
  23.     char *cp;
  24.     char **av;
  25.     int ac;
  26.     int size;
  27.     int len;
  28.     
  29.     size = 32;
  30.     ac = 0;
  31.     
  32.     av = s_malloc(size * sizeof(char *));
  33.     while ((cp = strchr(path, delim)) != NULL)
  34.     {
  35. if (ac+1 >= size)
  36.     av = s_realloc(av, sizeof(char *) * (size += 32));
  37. len = cp - path;
  38. #if 0
  39. av[ac] = s_malloc(len + 1);
  40. memcpy(av[ac], path, len);
  41. av[ac][len] = '';
  42. #else
  43. av[ac] = path;
  44. *cp = '';
  45. #endif
  46. if (unquote)
  47.     url_unquote(av[ac], unquote-1);
  48. path = cp+1;
  49. ac++;
  50.     }
  51.     if (ac+1 >= size)
  52. av = s_realloc(av, sizeof(char *) * (size += 32));
  53. #if 0
  54.     av[ac] = s_strdup(path);
  55. #else
  56.     av[ac] = path;
  57. #endif
  58.     
  59.     if (unquote)
  60. url_unquote(av[ac], unquote-1);
  61.     
  62.     ac++;
  63.     av[ac] = NULL;
  64.     
  65.     return av;
  66. }
  67. #if 0
  68. void argv_free(char **argv)
  69. {
  70.     int i;
  71.     if (argv == NULL)
  72. return;
  73.     
  74.     for (i = 0; argv[i]; i++)
  75. s_free(argv[i]);
  76.     s_free(argv);
  77. }
  78. #endif
  79. void str_to_lower(char *p)
  80. {
  81.     char *p1;
  82.     
  83.     p1=p;
  84.     while ( *p1 != 0x00 )
  85.     {
  86.       *p1=s_tolower(*p1); 
  87.       p1++;
  88.     }
  89. }
  90. /* Return a pointer to the FIRST character != / */
  91. char *notslash(char *p)
  92. {
  93.    if ( p==NULL ) return(p);
  94.    while ( *p=='/' ) p++;
  95.    return(p);
  96. }