James Hawkins : advpack: Implement DoInfInstall on top of the install framework.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jun 21 05:25:19 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 1a0208ef612708c7dd8e570760758d7da2405f9c
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=1a0208ef612708c7dd8e570760758d7da2405f9c

Author: James Hawkins <truiken at gmail.com>
Date:   Tue Jun 20 14:31:01 2006 -0700

advpack: Implement DoInfInstall on top of the install framework.

---

 dlls/advpack/install.c |   69 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 56 insertions(+), 13 deletions(-)

diff --git a/dlls/advpack/install.c b/dlls/advpack/install.c
index 20441cf..edfc663 100644
--- a/dlls/advpack/install.c
+++ b/dlls/advpack/install.c
@@ -460,6 +460,41 @@ typedef struct
     LPCSTR section_name;
 } SETUPCOMMAND_PARAMS;
 
+typedef struct
+{
+    HWND hwnd;
+    LPCWSTR title;
+    LPCWSTR inf_name;
+    LPCWSTR dir;
+    LPCWSTR section_name;
+} SETUPCOMMAND_PARAMSW;
+
+/* internal: see DoInfInstall */
+static HRESULT DoInfInstallW(const SETUPCOMMAND_PARAMSW *setup)
+{
+    ADVInfo info;
+    HRESULT hr;
+
+    TRACE("(%p)\n", setup);
+
+    ZeroMemory(&info, sizeof(ADVInfo));
+
+    hr = install_init(setup->inf_name, setup->section_name, setup->dir, 0, &info);
+    if (hr != S_OK)
+        goto done;
+
+    hr = spapi_install(&info);
+    if (hr != S_OK)
+        goto done;
+
+    hr = adv_install(&info);
+
+done:
+    install_release(&info);
+
+    return S_OK;
+}
+
 /***********************************************************************
  *      DoInfInstall  (ADVPACK.@)
  *
@@ -474,24 +509,32 @@ typedef struct
  */
 HRESULT WINAPI DoInfInstall(const SETUPCOMMAND_PARAMS *setup)
 {
-    BOOL ret;
-    HINF hinf;
-    void *callback_context;
+    UNICODE_STRING title, inf, section, dir;
+    SETUPCOMMAND_PARAMSW params;
+    HRESULT hr;
 
-    TRACE("(%p)\n", setup);
+    if (!setup)
+        return E_INVALIDARG;
 
-    hinf = SetupOpenInfFileA(setup->inf_name, NULL, INF_STYLE_WIN4, NULL);
-    if (hinf == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError());
+    RtlCreateUnicodeStringFromAsciiz(&title, setup->title);
+    RtlCreateUnicodeStringFromAsciiz(&inf, setup->inf_name);
+    RtlCreateUnicodeStringFromAsciiz(&section, setup->section_name);
+    RtlCreateUnicodeStringFromAsciiz(&dir, setup->dir);
 
-    callback_context = SetupInitDefaultQueueCallback(setup->hwnd);
+    params.title = title.Buffer;
+    params.inf_name = inf.Buffer;
+    params.section_name = section.Buffer;
+    params.dir = dir.Buffer;
+    params.hwnd = setup->hwnd;
 
-    ret = SetupInstallFromInfSectionA(NULL, hinf, setup->section_name, SPINST_ALL,
-                                      NULL, NULL, 0, SetupDefaultQueueCallbackA,
-                                      callback_context, NULL, NULL);
-    SetupTermDefaultQueueCallback(callback_context);
-    SetupCloseInfFile(hinf);
+    hr = DoInfInstallW(&params);
 
-    return ret ? S_OK : HRESULT_FROM_WIN32(GetLastError());
+    RtlFreeUnicodeString(&title);
+    RtlFreeUnicodeString(&inf);
+    RtlFreeUnicodeString(&section);
+    RtlFreeUnicodeString(&dir);
+
+    return hr;
 }
 
 /***********************************************************************




More information about the wine-cvs mailing list