Zebediah Figura : setupapi: Store the original INF file path in a .pnf file.
Alexandre Julliard
julliard at winehq.org
Tue Nov 10 13:46:21 CST 2020
Module: wine
Branch: stable
Commit: 2a9d8699a74fc27ed213f838cde9052269ad41ba
URL: https://source.winehq.org/git/wine.git/?a=commit;h=2a9d8699a74fc27ed213f838cde9052269ad41ba
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Thu Jun 11 11:16:31 2020 -0500
setupapi: Store the original INF file path in a .pnf file.
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 547d62da228a3846cf058bcc71fc8974356a96b8)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/setupapi/Makefile.in | 2 +-
dlls/setupapi/misc.c | 17 ++++++++++++++++-
dlls/setupapi/setupapi_private.h | 2 ++
dlls/setupapi/tests/misc.c | 4 ++--
4 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/dlls/setupapi/Makefile.in b/dlls/setupapi/Makefile.in
index 6c31365546f..539bfed0caa 100644
--- a/dlls/setupapi/Makefile.in
+++ b/dlls/setupapi/Makefile.in
@@ -1,7 +1,7 @@
EXTRADEFS = -D_SETUPAPI_
MODULE = setupapi.dll
IMPORTLIB = setupapi
-IMPORTS = uuid version advapi32 rpcrt4
+IMPORTS = uuid version advapi32 rpcrt4 kernelbase
DELAYIMPORTS = shell32 wintrust ole32 winspool.drv comdlg32 user32
EXTRADLLFLAGS = -mno-cygwin
diff --git a/dlls/setupapi/misc.c b/dlls/setupapi/misc.c
index 3b0c9477747..26e5359804c 100644
--- a/dlls/setupapi/misc.c
+++ b/dlls/setupapi/misc.c
@@ -31,6 +31,7 @@
#include "softpub.h"
#include "mscat.h"
#include "shlobj.h"
+#include "shlwapi.h"
#include "wine/debug.h"
@@ -962,10 +963,11 @@ BOOL WINAPI SetupCopyOEMInfW( PCWSTR source, PCWSTR location,
DWORD buffer_size, DWORD *required_size, WCHAR **filepart )
{
BOOL ret = FALSE;
- WCHAR target[MAX_PATH], catalog_file[MAX_PATH], *p;
+ WCHAR target[MAX_PATH], catalog_file[MAX_PATH], pnf_path[MAX_PATH], *p;
static const WCHAR inf[] = { '\\','i','n','f','\\',0 };
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 };
+ FILE *pnf_file;
unsigned int i;
DWORD size;
HINF hinf;
@@ -1069,6 +1071,19 @@ done:
if (style & SP_COPY_DELETESOURCE)
DeleteFileW( source );
+ if (ret)
+ {
+ wcscpy(pnf_path, target);
+ PathRemoveExtensionW(pnf_path);
+ PathAddExtensionW(pnf_path, L".pnf");
+ if ((pnf_file = _wfopen(pnf_path, L"w")))
+ {
+ fputws(PNF_HEADER, pnf_file);
+ fputws(source, pnf_file);
+ fclose(pnf_file);
+ }
+ }
+
size = lstrlenW( target ) + 1;
if (dest)
{
diff --git a/dlls/setupapi/setupapi_private.h b/dlls/setupapi/setupapi_private.h
index f4685ab2b4c..21ac50e0f3c 100644
--- a/dlls/setupapi/setupapi_private.h
+++ b/dlls/setupapi/setupapi_private.h
@@ -43,6 +43,8 @@
#define REGPART_RENAME "\\Rename"
#define REG_VERSIONCONFLICT "Software\\Microsoft\\VersionConflictManager"
+#define PNF_HEADER L"Wine PNF header\n"
+
extern HINSTANCE SETUPAPI_hInstance DECLSPEC_HIDDEN;
static inline void * __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t len)
diff --git a/dlls/setupapi/tests/misc.c b/dlls/setupapi/tests/misc.c
index 3bb308ef4a7..f16f310b3f7 100644
--- a/dlls/setupapi/tests/misc.c
+++ b/dlls/setupapi/tests/misc.c
@@ -320,7 +320,7 @@ static void test_SetupCopyOEMInf(void)
DeleteFileA(dest);
strcpy(pnf, dest);
*(strrchr(pnf, '.') + 1) = 'p';
- ok(!file_exists(pnf), "Expected pnf '%s' to not exist\n", pnf);
+ todo_wine ok(!file_exists(pnf), "Expected pnf '%s' to not exist\n", pnf);
res = SetupUninstallOEMInfA(strrchr(orig_dest, '\\') + 1, 0, NULL);
ok(res, "Failed to uninstall '%s', error %u.\n", orig_dest, GetLastError());
@@ -328,7 +328,7 @@ static void test_SetupCopyOEMInf(void)
DeleteFileA(orig_dest);
strcpy(pnf, dest);
*(strrchr(pnf, '.') + 1) = 'p';
- ok(!file_exists(pnf), "Expected pnf '%s' to not exist\n", pnf);
+ todo_wine ok(!file_exists(pnf), "Expected pnf '%s' to not exist\n", pnf);
GetWindowsDirectoryA(orig_dest, sizeof(orig_dest));
strcat(orig_dest, "\\inf\\");
More information about the wine-cvs
mailing list