[vlc-commits] [Git][videolan/vlc][master] 4 commits: gai_strerror: add declaration as its not defined in vlc_fixups.h
Steve Lhomme (@robUx4)
gitlab at videolan.org
Thu Jun 4 08:24:15 UTC 2026
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
0c45a05b by Steve Lhomme at 2026-06-04T08:07:17+00:00
gai_strerror: add declaration as its not defined in vlc_fixups.h
- - - - -
8f9d92fd by Steve Lhomme at 2026-06-04T08:07:17+00:00
gai_strerror: remap Windows SDK EAI_NODATA to WSANO_DATA
Otherwise it's mapped to WSAHOST_NOT_FOUND which we already handle with EAI_NONAME.
And we wouldn't have a string for WSANO_DATA.
- - - - -
fabc9361 by Steve Lhomme at 2026-06-04T08:07:17+00:00
gai_strerror: map missing Windows getaddrinfo/getnameinfo errors
gai_strerror() is called to get the string version of an error code returned by
vlc_getaddrinfo(), vlc_getnameinfo() or vlc_getaddrinfo_i11e(). In all
cases the value comes from an OS call. On Windows they return both EAI_* and a
lot of WSA errors [^1].
The strings come from src/win32/error.c.
[^1]: https://learn.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-getaddrinfo#return-value
- - - - -
70ff5756 by Steve Lhomme at 2026-06-04T08:07:17+00:00
build: always use the compat version of gai_strerror() on Windows
We don't know what codepage the might be for gai_strerrorA() and the
documentation [^1] doesn't mention if it's using it or not. Internally
we deal with UTF-8 char* strings.
Also the Windows version is not thread safe. The returned pointer is always the
same and points to different content.
[^1]: https://learn.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-gai_strerrora
- - - - -
4 changed files:
- compat/gai_strerror.c
- configure.ac
- include/vlc_network.h
- meson.build
Changes:
=====================================
compat/gai_strerror.c
=====================================
@@ -27,6 +27,26 @@
# include "config.h"
#endif
+const char *gai_strerror (int);
+
+#ifdef _WIN32
+# include <winsock2.h>
+# undef gai_strerror /* mapped to gai_strerrorA or gai_strerrorW */
+
+#ifdef _MSC_VER
+/* EAI_NODATA was removed in RFC 3493
+ * The Windows SDK defines EAI_NODATA as EAI_NONAME, aka WSAHOST_NOT_FOUND.
+ * It used to be WSANO_DATA. Remap it locally so we have strings for all the
+ * WSA errors that getaddrinfo() can return.
+ *
+ * In mingw-w64 EAI_NODATA is still mapped to WSANO_DATA.
+ */
+# undef EAI_NODATA
+# define EAI_NODATA WSANO_DATA
+#endif
+
+#endif /* _WIN32 */
+
/* GAI error codes. See include/vlc_network.h. */
#ifndef EAI_BADFLAGS
# define EAI_BADFLAGS -1
@@ -84,6 +104,12 @@ static const struct
{ EAI_MEMORY, "Memory allocation failure" },
{ EAI_OVERFLOW, "Buffer overflow" },
{ EAI_SYSTEM, "System error" },
+
+#ifdef _WIN32
+ { WSAEFAULT, "Invalid memory address" },
+ { WSANOTINITIALISED, "WSAStartup not called or failed" },
+#endif
+
{ 0, "" },
};
=====================================
configure.ac
=====================================
@@ -537,8 +537,8 @@ AS_IF([test "${SYS}" = "mingw32"],[
vlc_winstore_app=1
LIBCOM="-loleaut32"
VLC_ADD_LIBS([libvlccore], [-lruntimeobject])
- AC_LIBOBJ([gai_strerror])
],[])
+ AC_LIBOBJ([gai_strerror])
AC_SUBST([LIBCOM])
AC_SUBST([LIBCOMCXXFLAGS])
])
=====================================
include/vlc_network.h
=====================================
@@ -283,10 +283,9 @@ static inline int vlc_setsockopt(int s, int level, int name,
#endif
#ifdef _WIN32
-# if defined(UNICODE)
+/* undo ws2tcpip.h define and declare the signature from compat */
# undef gai_strerror
-# define gai_strerror gai_strerrorA
-# endif
+const char *gai_strerror (int);
#endif
/* union of the various sockaddr structures often used together */
=====================================
meson.build
=====================================
@@ -759,7 +759,7 @@ endif
libcompat_sources = []
-if have_win_store
+if host_system == 'windows'
libcompat_sources += 'gai_strerror.c'
endif
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/13f988a2e7b29492d6e7c303b90863e8c003656e...70ff5756b3996cbd10343cd2c905d3ae7781b1fe
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/13f988a2e7b29492d6e7c303b90863e8c003656e...70ff5756b3996cbd10343cd2c905d3ae7781b1fe
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help
More information about the vlc-commits
mailing list