[vlc-devel] [PATCH] src: os2: move gai_strerror() to compat
KO Myung-Hun
komh78 at gmail.com
Thu Dec 17 00:38:20 CET 2015
This fixes the following linkage error.
-----
CCLD libhttps_plugin.la
weakld: error: Unresolved symbol (UNDEF) '_gai_strerror'.
weakld: info: The symbol is referenced by:
P:\tmp\ldconv_libvlc_http_la-transport_o_64fd5671f455159d80.obj
Ignoring unresolved externals reported from weak prelinker.
Error! E2028: _gai_strerror is an undefined reference
file P:/tmp\ldconv_libvlc_http_la-transport_o_64fd5671f455159d80.obj(ldconv_libvlc_http_la-transport_o_64fd5671f455159d80.obj): undefined symbol _gai_strerror
make.exe[4]: *** [libhttps_plugin.la] Error 1
-----
---
compat/gai_strerror.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++
configure.ac | 1 +
src/os2/getaddrinfo.c | 36 ------------------
3 files changed, 103 insertions(+), 36 deletions(-)
create mode 100644 compat/gai_strerror.c
diff --git a/compat/gai_strerror.c b/compat/gai_strerror.c
new file mode 100644
index 0000000..c37b6bd
--- /dev/null
+++ b/compat/gai_strerror.c
@@ -0,0 +1,102 @@
+/*****************************************************************************
+ * gai_strerror.c: gai_strerror() replacement function
+ *****************************************************************************
+ * Copyright (C) 2005 the VideoLAN team
+ * Copyright (C) 2002-2007 Rémi Denis-Courmont
+ * Copyright (C) 2011-2015 KO Myung-Hun
+ *
+ * Authors: KO Myung-Hun <komh at chollian.net>
+ * Rémi Denis-Courmont <rem # videolan.org>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+/* GAI error codes. See include/vlc_network.h. */
+#ifndef EAI_BADFLAGS
+# define EAI_BADFLAGS -1
+#endif
+#ifndef EAI_NONAME
+# define EAI_NONAME -2
+#endif
+#ifndef EAI_AGAIN
+# define EAI_AGAIN -3
+#endif
+#ifndef EAI_FAIL
+# define EAI_FAIL -4
+#endif
+#ifndef EAI_NODATA
+# define EAI_NODATA -5
+#endif
+#ifndef EAI_FAMILY
+# define EAI_FAMILY -6
+#endif
+#ifndef EAI_SOCKTYPE
+# define EAI_SOCKTYPE -7
+#endif
+#ifndef EAI_SERVICE
+# define EAI_SERVICE -8
+#endif
+#ifndef EAI_ADDRFAMILY
+# define EAI_ADDRFAMILY -9
+#endif
+#ifndef EAI_MEMORY
+# define EAI_MEMORY -10
+#endif
+#ifndef EAI_OVERFLOW
+# define EAI_OVERFLOW -11
+#endif
+#ifndef EAI_SYSTEM
+# define EAI_SYSTEM -12
+#endif
+
+static const struct
+{
+ int code;
+ const char msg[41];
+} gai_errlist[] =
+{
+ { 0, "Error 0" },
+ { EAI_BADFLAGS, "Invalid flag used" },
+ { EAI_NONAME, "Host or service not found" },
+ { EAI_AGAIN, "Temporary name service failure" },
+ { EAI_FAIL, "Non-recoverable name service failure" },
+ { EAI_NODATA, "No data for host name" },
+ { EAI_FAMILY, "Unsupported address family" },
+ { EAI_SOCKTYPE, "Unsupported socket type" },
+ { EAI_SERVICE, "Incompatible service for socket type" },
+ { EAI_ADDRFAMILY, "Unavailable address family for host name" },
+ { EAI_MEMORY, "Memory allocation failure" },
+ { EAI_OVERFLOW, "Buffer overflow" },
+ { EAI_SYSTEM, "System error" },
+ { 0, "" },
+};
+
+static const char gai_unknownerr[] = "Unrecognized error number";
+
+/****************************************************************************
+ * Converts an EAI_* error code into human readable english text.
+ ****************************************************************************/
+const char *gai_strerror (int errnum)
+{
+ for (unsigned i = 0; *gai_errlist[i].msg; i++)
+ if (errnum == gai_errlist[i].code)
+ return gai_errlist[i].msg;
+
+ return gai_unknownerr;
+}
diff --git a/configure.ac b/configure.ac
index 968f260..c46120d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -290,6 +290,7 @@ case "${host_os}" in
SYS=os2
LDFLAGS="${LDFLAGS} -Zomf -Zbin-files -Zargs-wild -Zhigh-mem"
AC_LIBOBJ([freeaddrinfo])
+ AC_LIBOBJ([gai_strerror])
;;
*)
SYS="${host_os}"
diff --git a/src/os2/getaddrinfo.c b/src/os2/getaddrinfo.c
index 49b46f6..c7e74a1 100644
--- a/src/os2/getaddrinfo.c
+++ b/src/os2/getaddrinfo.c
@@ -32,42 +32,6 @@
#include <arpa/inet.h>
-static const struct
-{
- int code;
- const char msg[41];
-} gai_errlist[] =
-{
- { 0, "Error 0" },
- { EAI_BADFLAGS, "Invalid flag used" },
- { EAI_NONAME, "Host or service not found" },
- { EAI_AGAIN, "Temporary name service failure" },
- { EAI_FAIL, "Non-recoverable name service failure" },
- { EAI_NODATA, "No data for host name" },
- { EAI_FAMILY, "Unsupported address family" },
- { EAI_SOCKTYPE, "Unsupported socket type" },
- { EAI_SERVICE, "Incompatible service for socket type" },
- { EAI_ADDRFAMILY, "Unavailable address family for host name" },
- { EAI_MEMORY, "Memory allocation failure" },
- { EAI_OVERFLOW, "Buffer overflow" },
- { EAI_SYSTEM, "System error" },
- { 0, "" },
-};
-
-static const char gai_unknownerr[] = "Unrecognized error number";
-
-/****************************************************************************
- * Converts an EAI_* error code into human readable english text.
- ****************************************************************************/
-const char *gai_strerror (int errnum)
-{
- for (unsigned i = 0; *gai_errlist[i].msg; i++)
- if (errnum == gai_errlist[i].code)
- return gai_errlist[i].msg;
-
- return gai_unknownerr;
-}
-
#define _NI_MASK (NI_NUMERICHOST|NI_NUMERICSERV|NI_NOFQDN|NI_NAMEREQD|\
NI_DGRAM)
/*
--
2.6.0
More information about the vlc-devel
mailing list