From: Martin v. Löwis Date: Sun, 24 Jun 2001 21:18:26 +0000 (+0000) Subject: Emulate inet_{pton,ntop} on systems that don't provide it. X-Git-Tag: v2.2a3~1434 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b9ab15905218c442f92f560307658edf4b70b847;p=thirdparty%2FPython%2Fcpython.git Emulate inet_{pton,ntop} on systems that don't provide it. --- diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index c3f03b105109..507e6aa5c1c0 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 2fd7ed765e99..af3c8151fa4e 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 diff --git a/configure b/configure index 0e7ac3b6b961..a4ac8d94a262 100755 --- a/configure +++ b/configure @@ -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 8ced0d0e875c..27133360f4c5 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 \