From: Davide Beatrici <git(a)davidebeatrici.dev> The version check logic is removed because redundant. SNDCTL_SYSINFO was introduced in OSS 4.0: http://developer.opensound.com/oss4white.pdf The ioctl() call fails with OSS 3.x. --- dlls/wineoss.drv/mmdevdrv.c | 2 +- dlls/wineoss.drv/oss.c | 17 +++-------------- dlls/wineoss.drv/unixlib.h | 3 ++- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index dbd9c5a0490..1bb1ab01574 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -236,7 +236,7 @@ int WINAPI AUDDRV_GetPriority(void) OSS_CALL(test_connect, ¶ms); - return params.priority; + return SUCCEEDED(params.result) ? Priority_Preferred : Priority_Unavailable; } static HRESULT stream_release(stream_handle stream, HANDLE timer_thread) diff --git a/dlls/wineoss.drv/oss.c b/dlls/wineoss.drv/oss.c index 4368523684d..d74466f51c2 100644 --- a/dlls/wineoss.drv/oss.c +++ b/dlls/wineoss.drv/oss.c @@ -130,7 +130,7 @@ static NTSTATUS oss_test_connect(void *args) mixer_fd = open("/dev/mixer", O_RDONLY, 0); if(mixer_fd < 0){ TRACE("Priority_Unavailable: open failed\n"); - params->priority = Priority_Unavailable; + params->result = E_FAIL; return STATUS_SUCCESS; } @@ -139,26 +139,15 @@ static NTSTATUS oss_test_connect(void *args) if(ioctl(mixer_fd, SNDCTL_SYSINFO, &sysinfo) < 0){ TRACE("Priority_Unavailable: ioctl failed\n"); close(mixer_fd); - params->priority = Priority_Unavailable; + params->result = E_FAIL; return STATUS_SUCCESS; } close(mixer_fd); - if(sysinfo.version[0] < '4' || sysinfo.version[0] > '9'){ - TRACE("Priority_Low: sysinfo.version[0]: %x\n", sysinfo.version[0]); - params->priority = Priority_Low; - return STATUS_SUCCESS; - } - if(sysinfo.versionnum & 0x80000000){ - TRACE("Priority_Low: sysinfo.versionnum: %x\n", sysinfo.versionnum); - params->priority = Priority_Low; - return STATUS_SUCCESS; - } - TRACE("Priority_Preferred: Seems like valid OSS!\n"); - params->priority = Priority_Preferred; + params->result = S_OK; return STATUS_SUCCESS; } diff --git a/dlls/wineoss.drv/unixlib.h b/dlls/wineoss.drv/unixlib.h index b418bb70d2d..86a31f68001 100644 --- a/dlls/wineoss.drv/unixlib.h +++ b/dlls/wineoss.drv/unixlib.h @@ -31,7 +31,8 @@ enum DriverPriority struct test_connect_params { - enum DriverPriority priority; + const char *name; + HRESULT result; }; struct endpoint -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/799