[PATCH] setupapi: Handle arch-specific SourceDisks{Names, Files} .inf sections in get_source_info.
Gijs Vermeulen
gijsvrm at gmail.com
Wed Jan 22 10:28:23 CST 2020
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48455
Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
---
dlls/setupapi/query.c | 31 -------------------------------
dlls/setupapi/queue.c | 15 ++++++++-------
dlls/setupapi/setupapi_private.h | 19 +++++++++++++++++++
3 files changed, 27 insertions(+), 38 deletions(-)
diff --git a/dlls/setupapi/query.c b/dlls/setupapi/query.c
index 828d8a1145..e1a0f5aaf5 100644
--- a/dlls/setupapi/query.c
+++ b/dlls/setupapi/query.c
@@ -33,37 +33,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
-#ifdef __i386__
-static const WCHAR source_disks_names_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s','.','x','8','6',0};
-static const WCHAR source_disks_files_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s','.','x','8','6',0};
-#elif defined(__x86_64__)
-static const WCHAR source_disks_names_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s','.','a','m','d','6','4',0};
-static const WCHAR source_disks_files_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s','.','a','m','d','6','4',0};
-#elif defined(__arm__)
-static const WCHAR source_disks_names_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s','.','a','r','m',0};
-static const WCHAR source_disks_files_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s','.','a','r','m',0};
-#elif defined(__aarch64__)
-static const WCHAR source_disks_names_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s','.','a','r','m','6','4',0};
-static const WCHAR source_disks_files_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s','.','a','r','m','6','4',0};
-#else /* FIXME: other platforms */
-static const WCHAR source_disks_names_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s',0};
-static const WCHAR source_disks_files_platform[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s',0};
-#endif
-static const WCHAR source_disks_names[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s',0};
-static const WCHAR source_disks_files[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s',0};
-
/* fills the PSP_INF_INFORMATION struct fill_info is TRUE
* always returns the required size of the information
*/
diff --git a/dlls/setupapi/queue.c b/dlls/setupapi/queue.c
index 2d2c833474..8284a4f738 100644
--- a/dlls/setupapi/queue.c
+++ b/dlls/setupapi/queue.c
@@ -289,21 +289,22 @@ UINT CALLBACK QUEUE_callback_WtoA( void *context, UINT notification,
static void get_source_info( HINF hinf, const WCHAR *src_file, SP_FILE_COPY_PARAMS_W *params,
WCHAR *src_root, WCHAR *src_path)
{
- static const WCHAR SourceDisksNames[] =
- {'S','o','u','r','c','e','D','i','s','k','s','N','a','m','e','s',0};
- static const WCHAR SourceDisksFiles[] =
- {'S','o','u','r','c','e','D','i','s','k','s','F','i','l','e','s',0};
-
INFCONTEXT file_ctx, disk_ctx;
INT id, diskid;
DWORD len;
/* find the SourceDisksFiles entry */
- if (!SetupFindFirstLineW( hinf, SourceDisksFiles, src_file, &file_ctx )) return;
+ if (!SetupFindFirstLineW( hinf, source_disks_files_platform, src_file, &file_ctx ) &&
+ !SetupFindFirstLineW( hinf, source_disks_files, src_file, &file_ctx ))
+ return;
+
if (!SetupGetIntField( &file_ctx, 1, &diskid )) return;
/* now find the diskid in the SourceDisksNames section */
- if (!SetupFindFirstLineW( hinf, SourceDisksNames, NULL, &disk_ctx )) return;
+ if (!SetupFindFirstLineW( hinf, source_disks_names_platform, NULL, &disk_ctx ) &&
+ !SetupFindFirstLineW( hinf, source_disks_names, NULL, &disk_ctx ))
+ return;
+
for (;;)
{
if (SetupGetIntField( &disk_ctx, 0, &id ) && (id == diskid)) break;
diff --git a/dlls/setupapi/setupapi_private.h b/dlls/setupapi/setupapi_private.h
index f4685ab2b4..b3ae3a6035 100644
--- a/dlls/setupapi/setupapi_private.h
+++ b/dlls/setupapi/setupapi_private.h
@@ -111,4 +111,23 @@ extern OSVERSIONINFOW OsVersionInfo DECLSPEC_HIDDEN;
extern BOOL create_fake_dll( const WCHAR *name, const WCHAR *source ) DECLSPEC_HIDDEN;
extern void cleanup_fake_dlls(void) DECLSPEC_HIDDEN;
+#ifdef __i386__
+static const WCHAR source_disks_names_platform[] = L"SourceDisksNames.x86";
+static const WCHAR source_disks_files_platform[] = L"SourceDisksFiles.x86";
+#elif defined(__x86_64__)
+static const WCHAR source_disks_names_platform[] = L"SourceDisksNames.amd64";
+static const WCHAR source_disks_files_platform[] = L"SourceDisksFiles.amd64";
+#elif defined(__arm__)
+static const WCHAR source_disks_names_platform[] = L"SourceDisksNames.arm";
+static const WCHAR source_disks_files_platform[] = L"SourceDisksFiles.arm";
+#elif defined(__aarch64__)
+static const WCHAR source_disks_names_platform[] = L"SourceDisksNames.arm64";
+static const WCHAR source_disks_files_platform[] = L"SourceDisksFiles.arm64";
+#else /* FIXME: other platforms */
+static const WCHAR source_disks_names_platform[] = L"SourceDisksNames";
+static const WCHAR source_disks_files_platform[] = L"SourceDisksFiles";
+#endif
+static const WCHAR source_disks_names[] = L"SourceDisksNames";
+static const WCHAR source_disks_files[] = L"SourceDisksFiles";
+
#endif /* __SETUPAPI_PRIVATE_H */
--
2.25.0
More information about the wine-devel
mailing list