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

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** safeio.h
  3. **
  4. ** Copyright (c) 1995-1997 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. #ifndef PHTTPD_SAFEIO_H
  20. #define PHTTPD_SAFEIO_H
  21. #include <stdlib.h>
  22. #include <fcntl.h>
  23. #include <unistd.h>
  24. #include <synch.h>
  25. #include <dirent.h>
  26. #include <pwd.h>
  27. #ifndef __osf__
  28. #include <shadow.h>
  29. #endif
  30. #include <grp.h>
  31. #include <sys/time.h>
  32. #include <sys/types.h>
  33. #include <sys/socket.h>
  34. #include <sys/wait.h>
  35. #include <sys/stat.h>
  36. extern void s_sleep(int seconds);
  37. extern int s_open(); /* Can't use prototypes here */
  38. extern int s_close(int fd);
  39. extern int s_shutdown(int fd, int how);
  40. extern int s_connect(int fd, struct sockaddr *sin, int len);
  41. extern int s_accept(int fd, struct sockaddr *sin, int *lenp);
  42. extern int s_ioctl(int fd, int what, void *ptr);
  43. extern int s_select(int nfd,
  44.     fd_set *rs, fd_set *ws, fd_set *es,
  45.     struct timeval *tv);
  46. extern int s_read(int fd, char *buf, int len);
  47. extern int s_write(int fd, const char *buf, int len);
  48. extern sema_t *s_sema_create(int count, int type);
  49. extern void s_sema_destroy(sema_t *sp, int type);
  50. extern pid_t s_sema_wait(sema_t *sp);
  51. extern mutex_t *s_mutex_create(int type);
  52. extern void s_mutex_destroy(mutex_t *mp, int type);
  53. extern int s_chdir(const char *path);
  54. extern int s_chroot(const char *path);
  55. extern int s_dup2(int fd1, int fd2);
  56. extern pid_t s_waitpid(pid_t pid, int *status, int options);
  57. extern int s_execve(const char *path, char *const argv[], char *const envp[]);
  58. #ifndef __osf__
  59. extern struct spwd *s_getspnam_r(const char *name,
  60.  struct spwd *res,
  61.  char *buf,
  62.  int buflen);
  63. #endif
  64. extern struct passwd *s_getpwnam_r(const char *name,
  65.    struct passwd *res,
  66.    char *buf,
  67.    int buflen);
  68. extern struct passwd *s_getpwuid_r(uid_t uid,
  69.    struct passwd *res,
  70.    char *buf,
  71.    int buflen);
  72. extern struct group *s_getgrnam_r(const char *name,
  73.   struct group *res,
  74.   char *buf,
  75.   int buflen);
  76. extern struct hostent *s_gethostbyaddr_r(const char *addr,
  77.  int length,
  78.  int type,
  79.  struct hostent *result,
  80.  char *buffer,
  81.  int buflen,
  82.  int *h_errnop);
  83. extern struct hostent *s_gethostbyname_r(const char *name,
  84.  struct hostent *result,
  85.  char *buffer,
  86.  int buflen,
  87.  int *h_errnop);
  88. struct allocstats
  89. {
  90.     mutex_t lock;
  91.     unsigned long malloc_calls;
  92.     unsigned long free_calls;
  93.     unsigned long realloc_calls;
  94.     unsigned long bytes;
  95.     unsigned long blocks;
  96. };
  97. #ifdef INCLUDE_ALLOC_STATS
  98. extern struct allocstats alloc_stats;
  99. #endif
  100. extern void *s_malloc(size_t size);
  101. extern void s_free(void *ptr);
  102. extern void *s_realloc(void *ptr, size_t size);
  103. extern char *s_strdup(const char *str);
  104. extern char *s_strndup(const char *str, int len);
  105. extern char *s_strxdup(const char *str, int extra, int *size);
  106. extern int s_sprintf(char *buf, int size, const char *format, ...);
  107. extern int s_vsprintf(char *buf, int size, const char *format, va_list ap);
  108. #define NEW(ptr)    (ptr = s_malloc(sizeof(*ptr)))
  109. extern int s_readlink(const char *path, char *buf, int buflen);
  110. extern int s_unlink(const char *path);
  111. extern void s_abort(void);
  112. extern int s_stat(const char *path, struct stat *buf);
  113. extern int s_lstat(const char *path, struct stat *buf);
  114. extern int s_nice(int nice);
  115. /*
  116. ** Safe string handling functions. Dstsize is the buffer size of dst
  117. ** (ie, including the terminating NUL)
  118. */
  119. extern int s_strcpy(char *dst, int dstsize, const char *src);
  120. extern int s_strncpy(char *dst, int dstsize, const char *src, int maxcopy);
  121. extern int s_strcat(char *dst, int dstsize, const char *src);
  122. extern int s_strncat(char *dst, int dstsize, const char *src, int maxcopy);
  123. extern int s_tmpname(char *buf, int bufsize);
  124. extern int s_tmpfile(char *buf, int bufsize);
  125. #define s_isdigit(c) ((c)>='0' && (c)<='9')
  126. #define s_isspace(c) ((c)==' ' || (c)=='t' || (c)=='r' || (c)=='n')
  127. #define s_isalnum(c) (s_isdigit(c) || s_isalpha(c))
  128. #define s_isxdigit(c) (s_isdigit(c) || (((c)>='a' && (c)<='f') || ((c)>='A' && (c)<='F')))
  129. #define s_islower(c) ((c)>='a' && (c)<='z')
  130. #define s_isupper(c) ((c)>='A' && (c)<='Z')
  131. #define s_isalpha(c) (s_islower(c) || s_isupper(c))
  132. #define s_toupper(c) (s_islower(c) ? ((c) + ('A'-'a')) : (c))
  133. #define s_tolower(c) (s_isupper(c) ? ((c) + ('a'-'A')) : (c))
  134. #endif