Emulate inet_{pton,ntop} on systems that don't provide it.

This commit is contained in:
Martin v. Löwis 2001-06-24 21:18:26 +00:00
parent 530f99017e
commit b9ab159052
4 changed files with 47 additions and 3 deletions

View File

@ -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

View File

@ -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

4
configure vendored
View File

@ -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 \

View File

@ -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 \