Module: wine Branch: refs/heads/master Commit: 1a0208ef612708c7dd8e570760758d7da2405f9c URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=1a0208ef612708c7dd8e5707...
Author: James Hawkins truiken@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(§ion, 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(¶ms);
- return ret ? S_OK : HRESULT_FROM_WIN32(GetLastError()); + RtlFreeUnicodeString(&title); + RtlFreeUnicodeString(&inf); + RtlFreeUnicodeString(§ion); + RtlFreeUnicodeString(&dir); + + return hr; }
/***********************************************************************