[PATCH v2 2/5] wineoss: Pass a buffer to oss_clean_devnode().
Huw Davies
huw at codeweavers.com
Thu Mar 31 02:21:47 CDT 2022
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
dlls/wineoss.drv/mmdevdrv.c | 30 +++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c
index 0269f0fa536..c72f29b5540 100644
--- a/dlls/wineoss.drv/mmdevdrv.c
+++ b/dlls/wineoss.drv/mmdevdrv.c
@@ -346,27 +346,23 @@ static void get_device_guid(EDataFlow flow, const char *device, GUID *guid)
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;
size_t len;
- dot = strrchr(devnode, '.');
+ strcpy(dest, devnode);
+ dot = strrchr(dest, '.');
if(!dot)
- return devnode;
+ return;
- slash = strrchr(devnode, '/');
+ slash = strrchr(dest, '/');
if(slash && dot < slash)
- return devnode;
-
- len = dot - devnode;
-
- memcpy(ret, devnode, len);
- ret[len] = '\0';
+ return;
- return ret;
+ len = dot - dest;
+ dest[len] = '\0';
}
static UINT get_default_index(EDataFlow flow)
@@ -374,7 +370,7 @@ static UINT get_default_index(EDataFlow flow)
int fd = -1, err;
UINT i;
oss_audioinfo ai;
- const char *devnode;
+ char devnode[OSS_DEVNODE_SIZE];
OSSDevice *dev_item;
if(flow == eRender)
@@ -397,7 +393,7 @@ static UINT get_default_index(EDataFlow flow)
close(fd);
TRACE("Default devnode: %s\n", ai.devnode);
- devnode = oss_clean_devnode(ai.devnode);
+ oss_clean_devnode(devnode, ai.devnode);
i = 0;
LIST_FOR_EACH_ENTRY(dev_item, &g_devices, OSSDevice, entry){
if(dev_item->flow == flow){
@@ -465,7 +461,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids, GUID **guids,
*num = 0;
for(i = 0; i < sysinfo.numaudios; ++i){
oss_audioinfo ai = {0};
- const char *devnode;
+ char devnode[OSS_DEVNODE_SIZE];
OSSDevice *dev_item;
int fd;
@@ -476,7 +472,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, WCHAR ***ids, GUID **guids,
continue;
}
- devnode = oss_clean_devnode(ai.devnode);
+ oss_clean_devnode(devnode, ai.devnode);
/* check for duplicates */
LIST_FOR_EACH_ENTRY(dev_item, &g_devices, OSSDevice, entry){
--
2.25.1
More information about the wine-devel
mailing list