summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2001-06-24 21:18:26 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2001-06-24 21:18:26 (GMT)
commitb9ab15905218c442f92f560307658edf4b70b847 (patch)
treebaf17a4ec367b32be80b2b8062551bd12e2d96c8
parent530f99017ef13381b6cdac3726117bb08b7b1da6 (diff)
downloadcpython-b9ab15905218c442f92f560307658edf4b70b847.zip
cpython-b9ab15905218c442f92f560307658edf4b70b847.tar.gz
cpython-b9ab15905218c442f92f560307658edf4b70b847.tar.bz2
Emulate inet_{pton,ntop} on systems that don't provide it.
-rw-r--r--Modules/socketmodule.c41
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure4
-rw-r--r--configure.in2
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
diff --git a/configure b/configure
index 0e7ac3b..a4ac8d9 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 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 \