diff options
-rw-r--r-- | Modules/socketmodule.c | 41 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | configure.in | 2 |
4 files changed, 47 insertions, 3 deletions
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index c3f03b1..507e6aa 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -208,6 +208,11 @@ Socket methods: in those files, though, which will never compile on Windows. */ #ifndef MS_WINDOWS +#ifndef HAVE_INET_PTON +int inet_pton (int af, const char *src, void *dst); +char *inet_ntop(int af, void *src, char *dst, socklen_t size); +#endif + /* I know this is a bad practice, but it is the easiest... */ #ifndef HAVE_GETADDRINFO #include "getaddrinfo.c" @@ -2943,3 +2948,39 @@ init_socket(void) gethostbyname_lock = PyThread_allocate_lock(); #endif } + +/* Simplistic emulation code for inet_pton that only works for IPv4 */ +#ifndef HAVE_INET_PTON +int my_inet_pton (int af, char *src, void *dst) +{ + if(af == AF_INET){ + long packed_addr; +#ifdef USE_GUSI1 + packed_addr = (long)inet_addr(src).s_addr; +#else + packed_addr = inet_addr(src); +#endif + if (packed_addr == INADDR_NONE) + return 0; + memcpy(dst, &packed_addr, 4); + return 1; + } + /* Should set errno to EAFNOSUPPORT */ + return -1; +} + +char * +my_inet_ntop(int af, void *src, char *dst, socklen_t size) +{ + if (af == AF_INET) { + struct in_addr packed_addr; + if (size < 16) + /* Should set errno to ENOSPC. */ + return NULL; + memcpy(&packed_addr, src, sizeof(packed_addr)); + return strncpy(dst, inet_ntoa(packed_addr), size); + } + /* Should set errno to EAFNOSUPPORT */ + return NULL; +} +#endif diff --git a/config.h.in b/config.h.in index 2fd7ed7..af3c815 100644 --- a/config.h.in +++ b/config.h.in @@ -392,6 +392,9 @@ /* Define if you have the hypot function. */ #undef HAVE_HYPOT +/* Define if you have the inet_pton function. */ +#undef HAVE_INET_PTON + /* Define if you have the kill function. */ #undef HAVE_KILL @@ -1,6 +1,6 @@ #! /bin/sh -# From configure.in Revision: 1.219 +# From configure.in Revision: 1.220 # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 @@ -4480,7 +4480,7 @@ echo "$ac_t""$DYNLOADFILE" 1>&6 for ac_func in alarm chown clock confstr ctermid ctermid_r execv \ flock fork fsync fdatasync fpathconf ftime ftruncate \ getgroups getlogin getpeername getpid getpwent getwd \ - kill link lstat mkfifo mktime mremap \ + inet_pton kill link lstat mkfifo mktime mremap \ nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid \ diff --git a/configure.in b/configure.in index 8ced0d0..2713336 100644 --- a/configure.in +++ b/configure.in @@ -1162,7 +1162,7 @@ AC_MSG_RESULT($DYNLOADFILE) AC_CHECK_FUNCS(alarm chown clock confstr ctermid ctermid_r execv \ flock fork fsync fdatasync fpathconf ftime ftruncate \ getgroups getlogin getpeername getpid getpwent getwd \ - kill link lstat mkfifo mktime mremap \ + inet_pton kill link lstat mkfifo mktime mremap \ nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid \ |