win32: Misc Unix socket fixes

* 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>
This commit is contained in:
Patrick Gaskin 2021-05-30 15:25:10 -04:00 committed by PulseAudio Marge Bot
parent a01cce726f
commit 6222f610e8
3 changed files with 7 additions and 2 deletions

View file

@ -100,7 +100,7 @@ default_conf = configuration_data()
default_conf.merge_from(cdata) default_conf.merge_from(cdata)
default_conf.set('PA_BINARY', cdata.get_unquoted('PA_BINARY')) default_conf.set('PA_BINARY', cdata.get_unquoted('PA_BINARY'))
default_conf.set('PA_SOEXT', cdata.get_unquoted('PA_SOEXT')) 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('OS_IS_WIN32', host_machine.system() == 'windows')
default_conf.set10('HAVE_MKFIFO', cc.has_function('mkfifo')) default_conf.set10('HAVE_MKFIFO', cc.has_function('mkfifo'))

View file

@ -105,8 +105,13 @@ int pa_parse_address(const char *name, pa_parsed_address *ret_p) {
} else } else
p = name; p = name;
#ifndef OS_IS_WIN32
if (*p == '/') if (*p == '/')
ret_p->type = PA_PARSED_ADDRESS_UNIX; 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:")) { else if (pa_startswith(p, "unix:")) {
ret_p->type = PA_PARSED_ADDRESS_UNIX; ret_p->type = PA_PARSED_ADDRESS_UNIX;
p += sizeof("unix:")-1; p += sizeof("unix:")-1;

View file

@ -243,7 +243,7 @@ int pa_unix_socket_is_stale(const char *fn) {
if (errno == ECONNREFUSED) if (errno == ECONNREFUSED)
ret = 1; ret = 1;
#else #else
if (WSAGetLastError() == WSAECONNREFUSED) if (WSAGetLastError() == WSAECONNREFUSED || WSAGetLastError() == WSAEINVAL)
ret = 1; ret = 1;
#endif #endif
} else } else