Damjan Jovanovic : shlwapi: Support the command file type association query .
Alexandre Julliard
julliard at winehq.org
Wed Jan 21 06:39:24 CST 2009
Module: wine
Branch: master
Commit: 36a24b93c76369d246bc72651ebd16b9ab6ef2fe
URL: http://source.winehq.org/git/wine.git/?a=commit;h=36a24b93c76369d246bc72651ebd16b9ab6ef2fe
Author: Damjan Jovanovic <damjan.jov at gmail.com>
Date: Tue Jan 20 18:19:21 2009 +0200
shlwapi: Support the command file type association query.
---
dlls/shlwapi/assoc.c | 39 ++++++++++++++++++++++++++++++---------
1 files changed, 30 insertions(+), 9 deletions(-)
diff --git a/dlls/shlwapi/assoc.c b/dlls/shlwapi/assoc.c
index 53a873f..5ef5ba6 100644
--- a/dlls/shlwapi/assoc.c
+++ b/dlls/shlwapi/assoc.c
@@ -594,9 +594,8 @@ static HRESULT ASSOC_GetValue(HKEY hkey, WCHAR ** pszText)
return S_OK;
}
-static HRESULT ASSOC_GetExecutable(IQueryAssociationsImpl *This,
- LPCWSTR pszExtra, LPWSTR path,
- DWORD pathlen, DWORD *len)
+static HRESULT ASSOC_GetCommand(IQueryAssociationsImpl *This,
+ LPCWSTR pszExtra, WCHAR **ppszCommand)
{
HKEY hkeyCommand;
HKEY hkeyFile;
@@ -604,16 +603,11 @@ static HRESULT ASSOC_GetExecutable(IQueryAssociationsImpl *This,
HKEY hkeyVerb;
HRESULT hr;
LONG ret;
- WCHAR * pszCommand;
- WCHAR * pszEnd;
WCHAR * pszExtraFromReg = NULL;
WCHAR * pszFileType;
- WCHAR * pszStart;
static const WCHAR commandW[] = { 'c','o','m','m','a','n','d',0 };
static const WCHAR shellW[] = { 's','h','e','l','l',0 };
- assert(len);
-
hr = ASSOC_GetValue(This->hkeySource, &pszFileType);
if (FAILED(hr))
return hr;
@@ -672,8 +666,23 @@ static HRESULT ASSOC_GetExecutable(IQueryAssociationsImpl *This,
RegCloseKey(hkeyVerb);
if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ret);
- hr = ASSOC_GetValue(hkeyCommand, &pszCommand);
+ hr = ASSOC_GetValue(hkeyCommand, ppszCommand);
RegCloseKey(hkeyCommand);
+ return hr;
+}
+
+static HRESULT ASSOC_GetExecutable(IQueryAssociationsImpl *This,
+ LPCWSTR pszExtra, LPWSTR path,
+ DWORD pathlen, DWORD *len)
+{
+ WCHAR *pszCommand;
+ WCHAR *pszStart;
+ WCHAR *pszEnd;
+ HRESULT hr;
+
+ assert(len);
+
+ hr = ASSOC_GetCommand(This, pszExtra, &pszCommand);
if (FAILED(hr))
return hr;
@@ -763,6 +772,18 @@ static HRESULT WINAPI IQueryAssociations_fnGetString(
switch (str)
{
+ case ASSOCSTR_COMMAND:
+ {
+ WCHAR *command;
+ hr = ASSOC_GetCommand(This, pszExtra, &command);
+ if (SUCCEEDED(hr))
+ {
+ hr = ASSOC_ReturnData(pszOut, pcchOut, command, strlenW(command) + 1);
+ HeapFree(GetProcessHeap(), 0, command);
+ }
+ return hr;
+ }
+
case ASSOCSTR_EXECUTABLE:
{
hr = ASSOC_GetExecutable(This, pszExtra, path, MAX_PATH, &len);
More information about the wine-cvs
mailing list