win32: Misc Unix socket fixes
authorPatrick Gaskin <patrick@pgaskin.net>
Sun, 30 May 2021 19:25:10 +0000 (15:25 -0400)
committerPulseAudio Marge Bot <pulseaudio-maintainers@lists.freedesktop.org>
Wed, 16 Jun 2021 09:05:58 +0000 (09:05 +0000)
* Make pa_parse_address recognize Unix socket addresses with
  Windows-style absolute paths.
* Treat WASEINVAL as a stale socket.
* Make HAVE_AF_UNIX in config templates recognize winsock2.h.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/546>

src/daemon/meson.build
src/pulsecore/parseaddr.c
src/pulsecore/socket-util.c

index e19b290..262e193 100644 (file)
@@ -100,7 +100,7 @@ default_conf = configuration_data()
 default_conf.merge_from(cdata)
 default_conf.set('PA_BINARY', cdata.get_unquoted('PA_BINARY'))
 default_conf.set('PA_SOEXT', cdata.get_unquoted('PA_SOEXT'))
-default_conf.set10('HAVE_AF_UNIX', cc.has_header('sys/un.h'))
+default_conf.set10('HAVE_AF_UNIX', cc.has_header('sys/un.h') ? true : cc.has_header('winsock2.h'))
 default_conf.set10('OS_IS_WIN32', host_machine.system() == 'windows')
 default_conf.set10('HAVE_MKFIFO', cc.has_function('mkfifo'))
 
index b909f52..c47544f 100644 (file)
@@ -105,8 +105,13 @@ int pa_parse_address(const char *name, pa_parsed_address *ret_p) {
     } else
         p = name;
 
+#ifndef OS_IS_WIN32
     if (*p == '/')
         ret_p->type = PA_PARSED_ADDRESS_UNIX;
+#else
+    if (strlen(p) >= 3 && p[1] == ':' && p[2] == '\\' && ((p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z')))
+        ret_p->type = PA_PARSED_ADDRESS_UNIX;
+#endif
     else if (pa_startswith(p, "unix:")) {
         ret_p->type = PA_PARSED_ADDRESS_UNIX;
         p += sizeof("unix:")-1;
index 83d4c9c..f2c8c3c 100644 (file)
@@ -243,7 +243,7 @@ int pa_unix_socket_is_stale(const char *fn) {
         if (errno == ECONNREFUSED)
             ret = 1;
 #else
-        if (WSAGetLastError() == WSAECONNREFUSED)
+        if (WSAGetLastError() == WSAECONNREFUSED || WSAGetLastError() == WSAEINVAL)
             ret = 1;
 #endif
     } else