[PATCH v3 4/4] winmm: Search the default path when opening an existing file in create_file_OF().

Andrew Eikum aeikum at codeweavers.com
Fri Dec 18 07:54:22 CST 2020


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

On Thu, Dec 17, 2020 at 04:40:51PM -0600, Zebediah Figura wrote:
> Based on a patch by Alistair Leslie-Hughes.
> 
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49650
> Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
> ---
>  dlls/winmm/mmio.c       | 24 ++++++++++++++++++++++--
>  dlls/winmm/tests/mmio.c |  2 +-
>  2 files changed, 23 insertions(+), 3 deletions(-)
> 
> diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c
> index cb3175c5cd7..da536357416 100644
> --- a/dlls/winmm/mmio.c
> +++ b/dlls/winmm/mmio.c
> @@ -51,7 +51,9 @@ static WINE_MMIO *MMIOList;
>  /* From kernel32 */
>  static HANDLE create_file_OF( LPCSTR path, INT mode )
>  {
> -    DWORD access, sharing, creation;
> +    DWORD access, sharing, creation, len;
> +    char *full_path;
> +    HANDLE ret;
>  
>      if (mode & OF_CREATE)
>      {
> @@ -79,7 +81,25 @@ 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 );
> +
> +    if (mode & OF_CREATE)
> +        return CreateFileA( path, access, sharing, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 );
> +
> +    if (!(len = SearchPathA( NULL, path, NULL, 0, NULL, NULL )))
> +        return INVALID_HANDLE_VALUE;
> +    if (!(full_path = malloc(len + 1)))
> +    {
> +        SetLastError( ERROR_OUTOFMEMORY );
> +        return INVALID_HANDLE_VALUE;
> +    }
> +    if (!SearchPathA( NULL, path, NULL, len + 1, full_path, NULL ))
> +    {
> +        free(full_path);
> +        return INVALID_HANDLE_VALUE;
> +    }
> +    ret = CreateFileA( full_path, access, sharing, NULL, creation, FILE_ATTRIBUTE_NORMAL, 0 );
> +    free(full_path);
> +    return ret;
>  }
>  
>  /**************************************************************************
> diff --git a/dlls/winmm/tests/mmio.c b/dlls/winmm/tests/mmio.c
> index c9ceda24f3f..a232070064c 100644
> --- a/dlls/winmm/tests/mmio.c
> +++ b/dlls/winmm/tests/mmio.c
> @@ -551,7 +551,7 @@ static void test_mmioOpen_create(void)
>  
>      wcscpy(buffer, L"test_mmio_path");
>      hmmio = mmioOpenW(buffer, &info, MMIO_WRITE);
> -    todo_wine ok(!!hmmio, "failed to open file, error %#x\n", info.wErrorRet);
> +    ok(!!hmmio, "failed to open file, error %#x\n", info.wErrorRet);
>      mmioClose(hmmio, 0);
>  
>      wcscpy(buffer, L"test_mmio_path");
> -- 
> 2.29.2
> 
> 



More information about the wine-devel mailing list