wineoss: Pass a buffer to oss_clean_devnode().

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Huw Davies 2022-03-31 08:21:47 +01:00 committed by Alexandre Julliard
parent 13a1f17f88
commit 47dafdc746
1 changed files with 13 additions and 17 deletions

View File

@ -346,27 +346,23 @@ static void get_device_guid(EDataFlow flow, const char *device, GUID *guid)
RegCloseKey(key); RegCloseKey(key);
} }
static const char *oss_clean_devnode(const char *devnode) /* dst must be large enough to hold devnode */
static void oss_clean_devnode(char *dest, const char *devnode)
{ {
static char ret[OSS_DEVNODE_SIZE];
const char *dot, *slash; const char *dot, *slash;
size_t len; size_t len;
dot = strrchr(devnode, '.'); strcpy(dest, devnode);
dot = strrchr(dest, '.');
if(!dot) if(!dot)
return devnode; return;
slash = strrchr(devnode, '/'); slash = strrchr(dest, '/');
if(slash && dot < slash) if(slash && dot < slash)
return devnode; return;
len = dot - devnode; len = dot - dest;
dest[len] = '\0';
memcpy(ret, devnode, len);
ret[len] = '\0';
return ret;
} }
static UINT get_default_index(EDataFlow flow) static UINT get_default_index(EDataFlow flow)
@ -374,7 +370,7 @@ static UINT get_default_index(EDataFlow flow)
int fd = -1, err; int fd = -1, err;
UINT i; UINT i;
oss_audioinfo ai; oss_audioinfo ai;
const char *devnode; char devnode[OSS_DEVNODE_SIZE];
OSSDevice *dev_item; OSSDevice *dev_item;
if(flow == eRender) if(flow == eRender)
@ -397,7 +393,7 @@ static UINT get_default_index(EDataFlow flow)
close(fd); close(fd);
TRACE("Default devnode: %s\n", ai.devnode); TRACE("Default devnode: %s\n", ai.devnode);
devnode = oss_clean_devnode(ai.devnode); oss_clean_devnode(devnode, ai.devnode);
i = 0; i = 0;
LIST_FOR_EACH_ENTRY(dev_item, &g_devices, OSSDevice, entry){ LIST_FOR_EACH_ENTRY(dev_item, &g_devices, OSSDevice, entry){
if(dev_item->flow == flow){ if(dev_item->flow == flow){
@ -465,7 +461,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids, GUID **guids,
*num = 0; *num = 0;
for(i = 0; i < sysinfo.numaudios; ++i){ for(i = 0; i < sysinfo.numaudios; ++i){
oss_audioinfo ai = {0}; oss_audioinfo ai = {0};
const char *devnode; char devnode[OSS_DEVNODE_SIZE];
OSSDevice *dev_item; OSSDevice *dev_item;
int fd; int fd;
@ -476,7 +472,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids, GUID **guids,
continue; continue;
} }
devnode = oss_clean_devnode(ai.devnode); oss_clean_devnode(devnode, ai.devnode);
/* check for duplicates */ /* check for duplicates */
LIST_FOR_EACH_ENTRY(dev_item, &g_devices, OSSDevice, entry){ LIST_FOR_EACH_ENTRY(dev_item, &g_devices, OSSDevice, entry){