From adad7dc672361142fef33d73264e6c053a2a29ce Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Thu, 23 Feb 2006 09:30:31 +0000 Subject: [PATCH] Add inet_pton emulation for platforms that lack it. Only support IPv4 at this point. git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@582 fefdeb5f-60dc-0310-8127-8f9354f1896f --- configure.ac | 2 +- src/Makefile.am | 1 + src/polypcore/inet_pton.c | 62 +++++++++++++++++++++++++++++++++++++++++++ src/polypcore/inet_pton.h | 12 +++++++++ src/polypcore/socket-server.c | 4 +++ 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/polypcore/inet_pton.c create mode 100644 src/polypcore/inet_pton.h diff --git a/configure.ac b/configure.ac index 76b9642..25a89ed 100644 --- a/configure.ac +++ b/configure.ac @@ -206,7 +206,7 @@ AC_FUNC_FORK AC_FUNC_GETGROUPS AC_FUNC_SELECT_ARGTYPES AC_CHECK_FUNCS([getaddrinfo getgrgid_r getpwuid_r gettimeofday getuid \ - inet_ntop nanosleep setpgid setsid sigaction sleep]) + inet_ntop inet_pton nanosleep setpgid setsid sigaction sleep]) AC_CHECK_FUNCS([mkfifo], [HAVE_MKFIFO=1], [HAVE_MKFIFO=0]) AM_CONDITIONAL(HAVE_MKFIFO, test "x$HAVE_MKFIFO" = "x1") diff --git a/src/Makefile.am b/src/Makefile.am index f36630e..01ec9ef 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -601,6 +601,7 @@ libprotocol_simple_la_LIBADD = $(AM_LIBADD) libpolypcore.la libsocket-server.la libsocket_server_la_SOURCES = \ polypcore/inet_ntop.c polypcore/inet_ntop.h \ + polypcore/inet_pton.c polypcore/inet_pton.h \ polypcore/socket-server.c polypcore/socket-server.h libsocket_server_la_LDFLAGS = -avoid-version libsocket_server_la_LIBADD = $(AM_LIBADD) libpolypcore.la libiochannel.la libsocket-util.la $(LIBWRAP_LIBS) $(WINSOCK_LIBS) diff --git a/src/polypcore/inet_pton.c b/src/polypcore/inet_pton.c new file mode 100644 index 0000000..17860f6 --- /dev/null +++ b/src/polypcore/inet_pton.c @@ -0,0 +1,62 @@ +/* $Id$ */ + +/*** + This file is part of polypaudio. + + polypaudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + polypaudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with polypaudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + +#ifndef HAVE_INET_PTON + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#include "winsock.h" + +#include "inet_pton.h" + +int inet_pton(int af, const char *src, void *dst) { + struct in_addr *in = (struct in_addr*)dst; + struct in6_addr *in6 = (struct in6_addr*)dst; + + assert(src && dst); + + switch (af) { + case AF_INET: + in->s_addr = inet_addr(src); + if (in->s_addr == INADDR_NONE) + return 0; + break; + case AF_INET6: + /* FIXME */ + default: + errno = EAFNOSUPPORT; + return -1; + } + + return 1; +} + +#endif /* INET_PTON */ diff --git a/src/polypcore/inet_pton.h b/src/polypcore/inet_pton.h new file mode 100644 index 0000000..111b4a0 --- /dev/null +++ b/src/polypcore/inet_pton.h @@ -0,0 +1,12 @@ +#ifndef fooinet_ptonhfoo +#define fooinet_ptonhfoo + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#include "winsock.h" + +int inet_pton(int af, const char *src, void *dst); + +#endif diff --git a/src/polypcore/socket-server.c b/src/polypcore/socket-server.c index f2e1508..4e89c5d 100644 --- a/src/polypcore/socket-server.c +++ b/src/polypcore/socket-server.c @@ -56,6 +56,10 @@ #include "inet_ntop.h" #endif +#ifndef HAVE_INET_PTON +#include "inet_pton.h" +#endif + #include "winsock.h" #include -- 2.7.4