From f1598b9792d54f870dc4bf2b5ec5dd0095136a14 Mon Sep 17 00:00:00 2001 From: Rok Mandeljc Date: Tue, 28 Oct 2003 00:10:38 +0000 Subject: [PATCH] Fix dmloader's behavior to be more MS compliant. --- dlls/dmloader/loader.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/dmloader/loader.c b/dlls/dmloader/loader.c index 3fa1c5e058c..678c86684c4 100644 --- a/dlls/dmloader/loader.c +++ b/dlls/dmloader/loader.c @@ -318,8 +318,25 @@ HRESULT WINAPI IDirectMusicLoader8Impl_LoadObjectFromFile (LPDIRECTMUSICLOADER8 ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC); ObjDesc.dwValidData = DMUS_OBJ_FILENAME | DMUS_OBJ_FULLPATH | DMUS_OBJ_CLASS; /* I believe I've read somewhere in MSDN that this function requires either full path or relative path */ ObjDesc.guidClass = *rguidClassID; - strncpyW (ObjDesc.wszFileName, pwzFilePath, MAX_PATH); - + /* OK, MSDN says that search order is the following: + - current directory (DONE) + - windows search path (FIXME: how do I get that?) + - loader's search path (DONE) + */ + /* search in current directory */ + if (!SearchPathW (NULL, pwzFilePath, NULL, + sizeof(ObjDesc.wszFileName)/sizeof(WCHAR), ObjDesc.wszFileName, NULL) && + /* search in loader's search path */ + !SearchPathW (This->wzSearchPath, pwzFilePath, NULL, + sizeof(ObjDesc.wszFileName)/sizeof(WCHAR), ObjDesc.wszFileName, NULL)) + { + /* cannot find file */ + TRACE("cannot find file\n"); + return DMUS_E_LOADER_FAILEDOPEN; + } + + TRACE("full file path = %s\n", debugstr_w (ObjDesc.wszFileName)); + return IDirectMusicLoader8Impl_GetObject (iface, &ObjDesc, iidInterfaceID, ppObject); } @@ -358,6 +375,7 @@ HRESULT WINAPI DMUSIC_CreateDirectMusicLoader (LPCGUID lpcGUID, LPDIRECTMUSICLOA } dmloader->lpVtbl = &DirectMusicLoader8_Vtbl; dmloader->ref = 1; + MultiByteToWideChar (CP_ACP, 0, ".\\", -1, dmloader->wzSearchPath, MAX_PATH); list_init (&dmloader->CacheList); *ppDMLoad = (LPDIRECTMUSICLOADER8)dmloader; return S_OK;