[PATCH] winmm: Pass a fullpath to CreateFileA

Andrew Eikum aeikum at codeweavers.com
Fri Aug 28 07:40:58 CDT 2020


This could use a test, I think.

Andrew

On Fri, Aug 28, 2020 at 06:25:28PM +1000, Alistair Leslie-Hughes wrote:
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
>  dlls/winmm/mmio.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c
> index 48bbd3ed48..a3e2650f50 100644
> --- a/dlls/winmm/mmio.c
> +++ b/dlls/winmm/mmio.c
> @@ -52,6 +52,9 @@ static WINE_MMIO *MMIOList;
>  static HANDLE create_file_OF( LPCSTR path, INT mode )
>  {
>      DWORD access, sharing, creation;
> +    HANDLE ret;
> +    char *fullpath = NULL;
> +    DWORD len;
>  
>      if (mode & OF_CREATE)
>      {
> @@ -79,7 +82,20 @@ static HANDLE create_file_OF( LPCSTR path, INT mode )
>      case OF_SHARE_COMPAT:
>      default:                  sharing = FILE_SHARE_READ | FILE_SHARE_WRITE; break;
>      }
> -    return CreateFileA( path, access, sharing, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 );
> +
> +    len = SearchPathA( NULL, path, NULL, 0, fullpath, NULL );
> +    if (!len)
> +        return CreateFileA( path, access, sharing, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 );
> +
> +    fullpath = HeapAlloc(GetProcessHeap(), 0, len);
> +    if (!fullpath)
> +        return INVALID_HANDLE_VALUE;
> +
> +    SearchPathA( NULL, path, NULL, len, fullpath, NULL );
> +    ret = CreateFileA( fullpath, access, sharing, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 );
> +
> +    HeapFree(GetProcessHeap(), 0, fullpath);
> +    return ret;
>  }
>  
>  /**************************************************************************
> -- 
> 2.28.0
> 
> 



More information about the wine-devel mailing list