Module: wine Branch: master Commit: 04fada9035664df57c5a1219dd9ec62d9c15c65c URL: http://source.winehq.org/git/wine.git/?a=commit;h=04fada9035664df57c5a1219dd...
Author: Rob Shearman rob@codeweavers.com Date: Tue May 8 16:37:43 2007 +0100
setupapi: Improve the stub for SetupQueryInfOriginalFileInformation to return information for OriginalCatalogName based on information in the installed inf file.
---
dlls/setupapi/query.c | 24 ++++++++++++++++++++---- 1 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/dlls/setupapi/query.c b/dlls/setupapi/query.c index 1961375..cd50dee 100644 --- a/dlls/setupapi/query.c +++ b/dlls/setupapi/query.c @@ -652,8 +652,12 @@ BOOL WINAPI SetupQueryInfOriginalFileInformationW( PSP_ORIGINAL_FILE_INFO_W OriginalFileInfo) { LPCWSTR inf_name; + LPCWSTR inf_path; + HINF hinf; + static const WCHAR wszVersion[] = { 'V','e','r','s','i','o','n',0 }; + static const WCHAR wszCatalogFile[] = { 'C','a','t','a','l','o','g','F','i','l','e',0 };
- FIXME("(%p, %d, %p, %p): stub\n", InfInformation, InfIndex, + FIXME("(%p, %d, %p, %p): semi-stub\n", InfInformation, InfIndex, AlternativePlatformInfo, OriginalFileInfo);
if (OriginalFileInfo->cbSize != sizeof(*OriginalFileInfo)) @@ -662,18 +666,30 @@ BOOL WINAPI SetupQueryInfOriginalFileInformationW( return ERROR_INVALID_USER_BUFFER; }
+ inf_path = (LPWSTR)&InfInformation->VersionData[0]; + /* FIXME: we should get OriginalCatalogName from CatalogFile line in * the original inf file and cache it, but that would require building a * .pnf file. */ - OriginalFileInfo->OriginalCatalogName[0] = '\0'; + hinf = SetupOpenInfFileW(inf_path, NULL, INF_STYLE_WIN4, NULL); + if (!hinf) return FALSE; + + if (!SetupGetLineTextW(NULL, hinf, wszVersion, wszCatalogFile, + OriginalFileInfo->OriginalCatalogName, + sizeof(OriginalFileInfo->OriginalCatalogName)/sizeof(OriginalFileInfo->OriginalCatalogName[0]), + NULL)) + { + OriginalFileInfo->OriginalCatalogName[0] = '\0'; + } + SetupCloseInfFile(hinf);
/* FIXME: not quite correct as we just return the same file name as * destination (copied) inf file, not the source (original) inf file. * to fix it properly would require building a .pnf file */ /* file name is stored in VersionData field of InfInformation */ - inf_name = strrchrW((LPWSTR)&InfInformation->VersionData[0], '\'); + inf_name = strrchrW(inf_path, '\'); if (inf_name) inf_name++; - else inf_name = (LPWSTR)&InfInformation->VersionData[0]; + else inf_name = inf_path;
strcpyW(OriginalFileInfo->OriginalInfName, inf_name);