{
WCHAR *progId;
HRESULT hr;
+ LPCWSTR pchDotExt;
+
+ pchDotExt = PathFindExtensionW(pszAssoc);
+ if (pchDotExt && *pchDotExt)
+ pszAssoc = pchDotExt;
LONG ret = RegOpenKeyExW(HKEY_CLASSES_ROOT,
pszAssoc,
case ASSOCSTR_EXECUTABLE:
{
hr = this->GetExecutable(pszExtra, path, MAX_PATH, &len);
- if (FAILED(hr))
+ if (FAILED_UNEXPECTEDLY(hr))
{
return hr;
}
ret = RegQueryValueExW(hkey, name, 0, NULL, NULL, &size);
if (ret != ERROR_SUCCESS)
- {
return HRESULT_FROM_WIN32(ret);
- }
+
if (!size)
- {
return E_FAIL;
- }
+
*data = HeapAlloc(GetProcessHeap(), 0, size);
if (!*data)
- {
return E_OUTOFMEMORY;
- }
+
ret = RegQueryValueExW(hkey, name, 0, NULL, (LPBYTE)*data, &size);
if (ret != ERROR_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, *data);
return HRESULT_FROM_WIN32(ret);
}
- if(data_size)
- {
+
+ if (data_size)
*data_size = size;
- }
+
return S_OK;
}
{
/* check for default verb */
hr = this->GetValue(hkeyShell, NULL, (void**)&extra_from_reg, NULL);
+ if (FAILED(hr))
+ hr = this->GetValue(hkeyShell, L"open", (void**)&extra_from_reg, NULL);
if (FAILED(hr))
{
/* no default verb, try first subkey */
WCHAR *pszEnd;
HRESULT hr = this->GetCommand(pszExtra, &pszCommand);
- if (FAILED(hr))
+ if (FAILED_UNEXPECTEDLY(hr))
{
return hr;
}
}
else
{
- len = datalen;
+ *outlen = len = datalen;
}
if (len)