[PATCH v2 2/5] wineoss: Pass a buffer to oss_clean_devnode().

Andrew Eikum aeikum at codeweavers.com
Tue Apr 5 13:28:21 CDT 2022


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Thu, Mar 31, 2022 at 08:21:47AM +0100, Huw Davies wrote:
> 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