extra.c
上传用户:lampled
上传日期:2007-01-07
资源大小:94k
文件大小:3k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /* Copyright (C) 1995, 1996 by Sven Berkvens (sven@stack.nl) */
  2. #include "config.h"
  3. #include <sys/types.h>
  4. #ifdef HAVE_SYS_TIME_H
  5. #include <sys/time.h>
  6. #endif /* HAVE_SYS_TIME_H */
  7. #ifdef HAVE_SYS_SYSLIMITS_H
  8. #include <sys/syslimits.h>
  9. #endif /* HAVE_SYS_SYSLIMITS_H */
  10. #ifdef HAVE_TIME_H
  11. #ifdef SYS_TIME_WITH_TIME
  12. #include <time.h>
  13. #endif /* SYS_TIME_WITH_TIME */
  14. #endif /* HAVE_TIME_H */
  15. #include <unistd.h>
  16. #include <signal.h>
  17. #include <stdlib.h>
  18. #include <stdio.h>
  19. #include <pwd.h>
  20. #include <ctype.h>
  21. #include "extra.h"
  22. #include "local.h"
  23. #include "httpd.h"
  24. #include "string.h"
  25. extern char *
  26. strcasestr DECL2CC(char *, big, char *, little)
  27. {
  28. size_t len;
  29. char *search, *newbig, *newlittle;
  30. len = strlen(big) + 1;
  31. if (!(newbig = (char *)malloc(len)))
  32. return(NULL);
  33. bcopy(big, newbig, len);
  34. len = strlen(little) + 1;
  35. if (!(newlittle = (char *)malloc(len)))
  36. {
  37. free(newbig);
  38. return(NULL);
  39. }
  40. bcopy(little, newlittle, len);
  41. for (search = newlittle; *search; )
  42. *(search++) = tolower(*search);
  43. for (search = newbig; *search; )
  44. *(search++) = tolower(*search);
  45. search = strstr(newbig, newlittle);
  46. free(newbig); free(newlittle);
  47. return(search);
  48. }
  49. extern int
  50. mysleep DECL1(int, seconds)
  51. {
  52. struct timeval timeout;
  53. timeout.tv_usec = 0;
  54. timeout.tv_sec = seconds;
  55. return(select(0, NULL, NULL, NULL, &timeout) == 0);
  56. }
  57. #ifndef HAVE_KILLPG
  58. extern int
  59. killpg DECL2(pid_t, process, int, sig)
  60. {
  61. if (!process)
  62. process = getpid();
  63. return(kill(-process, sig));
  64. }
  65. #endif /* HAVE_KILLPG */
  66. extern int
  67. match DECL2CC(char *, total, char *, pattern)
  68. {
  69. int x, y;
  70. for (x = 0, y = 0; pattern[y]; x++, y++)
  71. {
  72. if ((!total[x]) && (pattern[y] != '*'))
  73. return(0);
  74. if (pattern[y] == '*')
  75. {
  76. while (pattern[++y] == '*')
  77. /* NOTHING HERE */;
  78. if (!pattern[y])
  79. return(1);
  80. while (total[x])
  81. {
  82. int ret;
  83. if ((ret = match(total + (x++), pattern + y)))
  84. return(ret);
  85. }
  86. return(0);
  87. } else
  88. {
  89. if ((pattern[y] != '?') &&
  90. (tolower(total[x]) != tolower(pattern[y])))
  91. return(0);
  92. }
  93. }
  94. return(!total[x]);
  95. }
  96. extern int
  97. match_list DECL2_C(char *, list, char *, browser)
  98. {
  99. char *begin, *end, orig;
  100. int matches;
  101. if (!browser)
  102. return(0);
  103. if ((begin = list))
  104. {
  105. while (*begin)
  106. {
  107. end = begin;
  108. while (*end && (*end != ' '))
  109. end++;
  110. orig = *end; *end = 0;
  111. matches = match(browser, begin);
  112. *end = orig;
  113. if (matches)
  114. return(1);
  115. begin = end;
  116. while (*begin == ' ')
  117. begin++;
  118. }
  119. }
  120. return(0);
  121. }
  122. #ifndef HAVE_STRERROR
  123. #ifdef NEED_SYS_ERRLIST_DECL
  124. extern char *sys_errlist[];
  125. extern const int sys_nerr;
  126. #endif /* NEED_SYS_ERRLIST_DECL */
  127. extern const char *
  128. strerror DECL1(int, code)
  129. {
  130. if ((code < 0) || (code > sys_nerr))
  131. return("Undefined error");
  132. else
  133. return(sys_errlist[code]);
  134. }
  135. #endif /* HAVE_STRERROR */