]> git.sesse.net Git - vlc/commitdiff
win32 replacement for inet_ntop()
authorChristophe Mutricy <xtophe@videolan.org>
Thu, 15 Feb 2007 15:34:50 +0000 (15:34 +0000)
committerChristophe Mutricy <xtophe@videolan.org>
Thu, 15 Feb 2007 15:34:50 +0000 (15:34 +0000)
configure.ac
include/vlc_network.h
src/network/io.c

index abe3035970ef8fd78d2d75bfe795eb26d60d5db6..11140868ee4b85380d7f7d9977895fdc1e454d92 100644 (file)
@@ -2407,6 +2407,11 @@ AC_CHECK_FUNCS(inet_pton,[have_ipv6=yes],[
 AS_IF([test "${have_ipv6}" = "yes"], [
   AC_DEFINE(HAVE_INET_PTON, 1, [Define to 1 if you have inet_pton().])])
 
+
+AC_CHECK_FUNCS(inet_ntop,[
+  AC_DEFINE(HAVE_INET_NTOP, 1, [Define to 1 if you have inet_ntop().])])
+
+
 dnl
 dnl  ogg demux plugin
 dnl
index 988d8d57410d9b10b405434b23b2ad834fe5fc29..826243faac82917bf4b1b9d717368b32bb06ec53 100644 (file)
@@ -150,6 +150,14 @@ VLC_EXPORT( int, __net_vaPrintf, ( vlc_object_t *p_this, int fd, const v_socket_
 VLC_EXPORT (int, inet_pton, (int af, const char *src, void *dst) );
 #endif
 
+#ifndef HAVE_INET_NTOP
+#ifdef WIN32
+/* only in core, so no need for C++ extern "C" */
+VLC_EXPORT (const char *, inet_ntop, (int af, const void *src, 
+                                      char *dst, socklen_t cnt) );
+#endif
+#endif
+
 #ifndef HAVE_POLL
 enum
 {
index b66ddc6b1f2626a2f4a36ec4098b0a986e1597d1..c88c243dbe731753ea1aaf808d39806f8f96a1fa 100644 (file)
@@ -1,12 +1,13 @@
 /*****************************************************************************
  * io.c: network I/O functions
  *****************************************************************************
- * Copyright (C) 2004-2005 the VideoLAN team
+ * Copyright (C) 2004-2005, 2007 the VideoLAN team
  * Copyright © 2005-2006 Rémi Denis-Courmont
  * $Id$
  *
  * Authors: Laurent Aimar <fenrir@videolan.org>
  *          Rémi Denis-Courmont <rem # videolan.org>
+ *          Christophe Mutricy <xtophe at videolan dot org>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -649,3 +650,54 @@ int inet_pton(int af, const char *src, void *dst)
     return 0;
 }
 #endif /* HAVE_INET_PTON */
+
+#ifndef HAVE_INET_NTOP
+#ifdef WIN32
+const char *inet_ntop(int af, const void * src,
+                               char * dst, socklen_t cnt)
+{
+    switch( af )
+    {
+#ifdef AF_INET6
+        case AF_INET6:
+            {
+                struct sockaddr_in6 addr;
+                memset(&addr, 0, sizeof(addr));
+                addr.sin6_family = AF_INET6;
+                addr.sin6_addr = *((struct in6_addr*)src);
+                if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr, 
+                                             sizeof(struct sockaddr_in6), 
+                                             NULL, dst, &cnt) )
+                {
+                    dst[cnt] = '\0';
+                    return dst;
+                }
+                errno = WSAGetLastError();
+                return NULL;
+
+            }
+
+#endif
+        case AF_INET:
+            {
+                struct sockaddr_in addr;
+                memset(&addr, 0, sizeof(addr));
+                addr.sin_family = AF_INET;
+                addr.sin_addr = *((struct in_addr*)src);
+                if( 0 == WSAAddressToStringA((LPSOCKADDR)&addr,
+                                             sizeof(struct sockaddr_in),
+                                             NULL, dst, &cnt) )
+                {
+                    dst[cnt] = '\0';
+                    return dst;
+                }
+                errno = WSAGetLastError();
+                return NULL;
+
+            }
+    }
+    errno = EAFNOSUPPORT;
+    return NULL;
+}
+#endif
+#endif