safe_inet_addr.c
上传用户:liugui
上传日期:2007-01-04
资源大小:822k
文件大小:1k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: safe_inet_addr.c,v 1.8 1998/09/23 17:16:12 wessels Exp $
  3.  */
  4. #include "config.h"
  5. #if HAVE_STDIO_H
  6. #include <stdio.h>
  7. #endif
  8. #if HAVE_STDLIB_H
  9. #include <stdlib.h>
  10. #endif
  11. #if HAVE_UNISTD_H
  12. #include <unistd.h>
  13. #endif
  14. #if HAVE_SYS_TYPES_H
  15. #include <sys/types.h>
  16. #endif
  17. #if HAVE_SYS_SOCKET_H
  18. #include <sys/socket.h>
  19. #endif
  20. #if HAVE_NETINET_IN_H
  21. #include <netinet/in.h>
  22. #endif
  23. #if HAVE_ARPA_INET_H
  24. #include <arpa/inet.h>
  25. #endif
  26. #include "snprintf.h"
  27. int
  28. safe_inet_addr(const char *buf, struct in_addr *addr)
  29. {
  30.     static char addrbuf[32];
  31.     int a1 = 0, a2 = 0, a3 = 0, a4 = 0;
  32.     struct in_addr A;
  33.     char x;
  34.     if (sscanf(buf, "%d.%d.%d.%d%c", &a1, &a2, &a3, &a4, &x) != 4)
  35. return 0;
  36.     if (a1 < 0 || a1 > 255)
  37. return 0;
  38.     if (a2 < 0 || a2 > 255)
  39. return 0;
  40.     if (a3 < 0 || a3 > 255)
  41. return 0;
  42.     if (a4 < 0 || a4 > 255)
  43. return 0;
  44.     snprintf(addrbuf, 32, "%d.%d.%d.%d", a1, a2, a3, a4);
  45.     A.s_addr = inet_addr(addrbuf);
  46.     if (addr)
  47. addr->s_addr = A.s_addr;
  48.     return 1;
  49. }