sync shlwapi with wine 1.1.13

svn path=/trunk/; revision=39000
This commit is contained in:
Christoph von Wittich 2009-01-21 15:57:21 +00:00
parent 78a49fe707
commit bf2e430cf1
16 changed files with 405 additions and 118 deletions

View file

@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
#include <stdarg.h> #include <stdarg.h>
#include <assert.h>
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
@ -26,6 +27,8 @@
#include "objbase.h" #include "objbase.h"
#include "shlguid.h" #include "shlguid.h"
#include "shlwapi.h" #include "shlwapi.h"
#include "winver.h"
#include "wine/unicode.h"
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell); WINE_DEFAULT_DEBUG_CHANNEL(shell);
@ -244,7 +247,7 @@ HRESULT WINAPI AssocQueryStringW(ASSOCF cfFlags, ASSOCSTR str, LPCWSTR pszAssoc,
debugstr_w(pszExtra), pszOut, pcchOut); debugstr_w(pszExtra), pszOut, pcchOut);
if (!pcchOut) if (!pcchOut)
return E_INVALIDARG; return E_UNEXPECTED;
lpAssoc = IQueryAssociations_Constructor(); lpAssoc = IQueryAssociations_Constructor();
@ -290,7 +293,7 @@ HRESULT WINAPI AssocQueryStringA(ASSOCF cfFlags, ASSOCSTR str, LPCSTR pszAssoc,
debugstr_a(pszExtra), pszOut, pcchOut); debugstr_a(pszExtra), pszOut, pcchOut);
if (!pcchOut) if (!pcchOut)
hRet = E_INVALIDARG; hRet = E_UNEXPECTED;
else if (SHLWAPI_ParamAToW(pszAssoc, szAssocW, MAX_PATH, &lpszAssocW) && else if (SHLWAPI_ParamAToW(pszAssoc, szAssocW, MAX_PATH, &lpszAssocW) &&
SHLWAPI_ParamAToW(pszExtra, szExtraW, MAX_PATH, &lpszExtraW)) SHLWAPI_ParamAToW(pszExtra, szExtraW, MAX_PATH, &lpszExtraW))
{ {
@ -300,6 +303,8 @@ HRESULT WINAPI AssocQueryStringA(ASSOCF cfFlags, ASSOCSTR str, LPCSTR pszAssoc,
if (dwLenOut >= MAX_PATH) if (dwLenOut >= MAX_PATH)
lpszReturnW = HeapAlloc(GetProcessHeap(), 0, lpszReturnW = HeapAlloc(GetProcessHeap(), 0,
(dwLenOut + 1) * sizeof(WCHAR)); (dwLenOut + 1) * sizeof(WCHAR));
else
dwLenOut = sizeof(szReturnW) / sizeof(szReturnW[0]);
if (!lpszReturnW) if (!lpszReturnW)
hRet = E_OUTOFMEMORY; hRet = E_OUTOFMEMORY;
@ -309,9 +314,10 @@ HRESULT WINAPI AssocQueryStringA(ASSOCF cfFlags, ASSOCSTR str, LPCSTR pszAssoc,
lpszReturnW, &dwLenOut); lpszReturnW, &dwLenOut);
if (SUCCEEDED(hRet)) if (SUCCEEDED(hRet))
WideCharToMultiByte(CP_ACP,0,szReturnW,-1,pszOut,dwLenOut,0,0); dwLenOut = WideCharToMultiByte(CP_ACP, 0, lpszReturnW, -1,
*pcchOut = dwLenOut; pszOut, *pcchOut, NULL, NULL);
*pcchOut = dwLenOut;
if (lpszReturnW != szReturnW) if (lpszReturnW != szReturnW)
HeapFree(GetProcessHeap(), 0, lpszReturnW); HeapFree(GetProcessHeap(), 0, lpszReturnW);
} }
@ -489,6 +495,8 @@ static ULONG WINAPI IQueryAssociations_fnRelease(IQueryAssociations *iface)
if (!refCount) if (!refCount)
{ {
TRACE("Destroying IQueryAssociations (%p)\n", This); TRACE("Destroying IQueryAssociations (%p)\n", This);
RegCloseKey(This->hkeySource);
RegCloseKey(This->hkeyProgID);
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
} }
@ -520,7 +528,7 @@ static HRESULT WINAPI IQueryAssociations_fnInit(
{ {
static const WCHAR szProgID[] = {'P','r','o','g','I','D',0}; static const WCHAR szProgID[] = {'P','r','o','g','I','D',0};
IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface; IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
HRESULT hr; LONG ret;
TRACE("(%p)->(%d,%s,%p,%p)\n", iface, TRACE("(%p)->(%d,%s,%p,%p)\n", iface,
cfFlags, cfFlags,
@ -533,23 +541,21 @@ static HRESULT WINAPI IQueryAssociations_fnInit(
FIXME("unsupported flags: %x\n", cfFlags); FIXME("unsupported flags: %x\n", cfFlags);
if (pszAssoc != NULL) if (pszAssoc != NULL)
{ {
hr = RegOpenKeyExW(HKEY_CLASSES_ROOT, ret = RegOpenKeyExW(HKEY_CLASSES_ROOT,
pszAssoc, pszAssoc,
0, 0,
KEY_READ, KEY_READ,
&This->hkeySource); &This->hkeySource);
if (FAILED(hr)) if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ERROR_NO_ASSOCIATION); return E_FAIL;
/* if this is not a prog id */ /* if this is not a prog id */
if ((*pszAssoc == '.') || (*pszAssoc == '{')) if ((*pszAssoc == '.') || (*pszAssoc == '{'))
{ {
hr = RegOpenKeyExW(This->hkeySource, RegOpenKeyExW(This->hkeySource,
szProgID, szProgID,
0, 0,
KEY_READ, KEY_READ,
&This->hkeyProgID); &This->hkeyProgID);
if (FAILED(hr))
FIXME("Don't know what to return\n");
} }
else else
This->hkeyProgID = This->hkeySource; This->hkeyProgID = This->hkeySource;
@ -561,7 +567,158 @@ static HRESULT WINAPI IQueryAssociations_fnInit(
return S_OK; return S_OK;
} }
else else
return E_FAIL; return E_INVALIDARG;
}
static HRESULT ASSOC_GetValue(HKEY hkey, WCHAR ** pszText)
{
DWORD len;
LONG ret;
assert(pszText);
ret = RegQueryValueExW(hkey, NULL, 0, NULL, NULL, &len);
if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ret);
if (!len)
return E_FAIL;
*pszText = HeapAlloc(GetProcessHeap(), 0, len);
if (!*pszText)
return E_OUTOFMEMORY;
ret = RegQueryValueExW(hkey, NULL, 0, NULL, (LPBYTE)*pszText,
&len);
if (ret != ERROR_SUCCESS)
{
HeapFree(GetProcessHeap(), 0, *pszText);
return HRESULT_FROM_WIN32(ret);
}
return S_OK;
}
static HRESULT ASSOC_GetExecutable(IQueryAssociationsImpl *This,
LPCWSTR pszExtra, LPWSTR path,
DWORD pathlen, DWORD *len)
{
HKEY hkeyCommand;
HKEY hkeyFile;
HKEY hkeyShell;
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;
ret = RegOpenKeyExW(HKEY_CLASSES_ROOT, pszFileType, 0, KEY_READ, &hkeyFile);
HeapFree(GetProcessHeap(), 0, pszFileType);
if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ret);
ret = RegOpenKeyExW(hkeyFile, shellW, 0, KEY_READ, &hkeyShell);
RegCloseKey(hkeyFile);
if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ret);
if (!pszExtra)
{
hr = ASSOC_GetValue(hkeyShell, &pszExtraFromReg);
/* if no default action */
if (hr == E_FAIL || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
{
DWORD rlen;
ret = RegQueryInfoKeyW(hkeyShell, 0, 0, 0, 0, &rlen, 0, 0, 0, 0, 0, 0);
if (ret != ERROR_SUCCESS)
{
RegCloseKey(hkeyShell);
return HRESULT_FROM_WIN32(ret);
}
rlen++;
pszExtraFromReg = HeapAlloc(GetProcessHeap(), 0, rlen * sizeof(WCHAR));
if (!pszExtraFromReg)
{
RegCloseKey(hkeyShell);
return E_OUTOFMEMORY;
}
ret = RegEnumKeyExW(hkeyShell, 0, pszExtraFromReg, &rlen, 0, NULL, NULL, NULL);
if (ret != ERROR_SUCCESS)
{
RegCloseKey(hkeyShell);
return HRESULT_FROM_WIN32(ret);
}
}
else if (FAILED(hr))
{
RegCloseKey(hkeyShell);
return hr;
}
}
ret = RegOpenKeyExW(hkeyShell, pszExtra ? pszExtra : pszExtraFromReg, 0,
KEY_READ, &hkeyVerb);
HeapFree(GetProcessHeap(), 0, pszExtraFromReg);
RegCloseKey(hkeyShell);
if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ret);
ret = RegOpenKeyExW(hkeyVerb, commandW, 0, KEY_READ, &hkeyCommand);
RegCloseKey(hkeyVerb);
if (ret != ERROR_SUCCESS)
return HRESULT_FROM_WIN32(ret);
hr = ASSOC_GetValue(hkeyCommand, &pszCommand);
RegCloseKey(hkeyCommand);
if (FAILED(hr))
return hr;
/* cleanup pszCommand */
if (pszCommand[0] == '"')
{
pszStart = pszCommand + 1;
pszEnd = strchrW(pszStart, '"');
}
else
{
pszStart = pszCommand;
pszEnd = strchrW(pszStart, ' ');
}
if (pszEnd)
*pszEnd = 0;
*len = SearchPathW(NULL, pszStart, NULL, pathlen, path, NULL);
HeapFree(GetProcessHeap(), 0, pszCommand);
if (!*len)
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
return S_OK;
}
static HRESULT ASSOC_ReturnData(LPWSTR out, DWORD *outlen, LPCWSTR data,
DWORD datalen)
{
assert(outlen);
if (out)
{
if (*outlen < datalen)
{
*outlen = datalen;
return E_POINTER;
}
*outlen = datalen;
lstrcpynW(out, data, datalen);
return S_OK;
}
else
{
*outlen = datalen;
return S_FALSE;
}
} }
/************************************************************************** /**************************************************************************
@ -590,10 +747,88 @@ static HRESULT WINAPI IQueryAssociations_fnGetString(
DWORD *pcchOut) DWORD *pcchOut)
{ {
IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface; IQueryAssociationsImpl *This = (IQueryAssociationsImpl *)iface;
const ASSOCF cfUnimplemented = ~(0);
DWORD len = 0;
HRESULT hr;
WCHAR path[MAX_PATH];
FIXME("(%p,0x%8x,0x%8x,%s,%p,%p)-stub!\n", This, cfFlags, str, TRACE("(%p,0x%8x,0x%8x,%s,%p,%p)\n", This, cfFlags, str,
debugstr_w(pszExtra), pszOut, pcchOut); debugstr_w(pszExtra), pszOut, pcchOut);
return E_NOTIMPL;
if (cfFlags & cfUnimplemented)
FIXME("%08x: unimplemented flags!\n", cfFlags & cfUnimplemented);
if (!pcchOut)
return E_UNEXPECTED;
switch (str)
{
case ASSOCSTR_EXECUTABLE:
{
hr = ASSOC_GetExecutable(This, pszExtra, path, MAX_PATH, &len);
if (FAILED(hr))
return hr;
len++;
return ASSOC_ReturnData(pszOut, pcchOut, path, len);
}
case ASSOCSTR_FRIENDLYAPPNAME:
{
PVOID verinfoW = NULL;
DWORD size, retval = 0;
UINT flen;
WCHAR *bufW;
static const WCHAR translationW[] = {
'\\','V','a','r','F','i','l','e','I','n','f','o',
'\\','T','r','a','n','s','l','a','t','i','o','n',0
};
static const WCHAR fileDescFmtW[] = {
'\\','S','t','r','i','n','g','F','i','l','e','I','n','f','o',
'\\','%','0','4','x','%','0','4','x',
'\\','F','i','l','e','D','e','s','c','r','i','p','t','i','o','n',0
};
WCHAR fileDescW[41];
hr = ASSOC_GetExecutable(This, pszExtra, path, MAX_PATH, &len);
if (FAILED(hr))
return hr;
retval = GetFileVersionInfoSizeW(path, &size);
if (!retval)
goto get_friendly_name_fail;
verinfoW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, retval);
if (!verinfoW)
return E_OUTOFMEMORY;
if (!GetFileVersionInfoW(path, 0, retval, verinfoW))
goto get_friendly_name_fail;
if (VerQueryValueW(verinfoW, translationW, (LPVOID *)&bufW, &flen))
{
UINT i;
DWORD *langCodeDesc = (DWORD *)bufW;
for (i = 0; i < flen / sizeof(DWORD); i++)
{
sprintfW(fileDescW, fileDescFmtW, LOWORD(langCodeDesc[i]),
HIWORD(langCodeDesc[i]));
if (VerQueryValueW(verinfoW, fileDescW, (LPVOID *)&bufW, &flen))
{
/* Does strlenW(bufW) == 0 mean we use the filename? */
len = strlenW(bufW) + 1;
TRACE("found FileDescription: %s\n", debugstr_w(bufW));
return ASSOC_ReturnData(pszOut, pcchOut, bufW, len);
}
}
}
get_friendly_name_fail:
PathRemoveExtensionW(path);
PathStripPathW(path);
TRACE("using filename: %s\n", debugstr_w(path));
return ASSOC_ReturnData(pszOut, pcchOut, path, strlenW(path) + 1);
}
default:
FIXME("assocstr %d unimplemented!\n", str);
return E_NOTIMPL;
}
} }
/************************************************************************** /**************************************************************************

View file

@ -91,8 +91,7 @@ HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewIt
if(!*lppList) if(!*lppList)
{ {
/* An empty list. Allocate space for terminal ulSize also */ /* An empty list. Allocate space for terminal ulSize also */
*lppList = (LPDATABLOCK_HEADER)LocalAlloc(LMEM_ZEROINIT, *lppList = LocalAlloc(LMEM_ZEROINIT, ulSize + sizeof(ULONG));
ulSize + sizeof(ULONG));
lpInsertAt = *lppList; lpInsertAt = *lppList;
} }
else else
@ -109,8 +108,7 @@ HRESULT WINAPI SHAddDataBlock(LPDBLIST* lppList, const DATABLOCK_HEADER *lpNewIt
} }
/* Increase the size of the list */ /* Increase the size of the list */
lpIter = (LPDATABLOCK_HEADER)LocalReAlloc((HLOCAL)*lppList, lpIter = LocalReAlloc(*lppList, ulTotalSize + ulSize+sizeof(ULONG),
ulTotalSize + ulSize+sizeof(ULONG),
LMEM_ZEROINIT | LMEM_MOVEABLE); LMEM_ZEROINIT | LMEM_MOVEABLE);
if(lpIter) if(lpIter)
{ {
@ -247,7 +245,7 @@ HRESULT WINAPI SHReadDataBlockList(IStream* lpStream, LPDBLIST* lppList)
if(*lppList) if(*lppList)
{ {
/* Free any existing list */ /* Free any existing list */
LocalFree((HLOCAL)*lppList); LocalFree(*lppList);
*lppList = NULL; *lppList = NULL;
} }
@ -283,10 +281,9 @@ HRESULT WINAPI SHReadDataBlockList(IStream* lpStream, LPDBLIST* lppList)
LPDATABLOCK_HEADER lpTemp; LPDATABLOCK_HEADER lpTemp;
if (pItem == bBuff) if (pItem == bBuff)
lpTemp = (LPDATABLOCK_HEADER)LocalAlloc(LMEM_ZEROINIT, ulSize); lpTemp = LocalAlloc(LMEM_ZEROINIT, ulSize);
else else
lpTemp = (LPDATABLOCK_HEADER)LocalReAlloc((HLOCAL)pItem, ulSize, lpTemp = LocalReAlloc(pItem, ulSize, LMEM_ZEROINIT|LMEM_MOVEABLE);
LMEM_ZEROINIT|LMEM_MOVEABLE);
if(!lpTemp) if(!lpTemp)
{ {
@ -312,7 +309,7 @@ HRESULT WINAPI SHReadDataBlockList(IStream* lpStream, LPDBLIST* lppList)
/* If we allocated space, free it */ /* If we allocated space, free it */
if(pItem != bBuff) if(pItem != bBuff)
LocalFree((HLOCAL)pItem); LocalFree(pItem);
return hRet; return hRet;
} }
@ -336,7 +333,7 @@ VOID WINAPI SHFreeDataBlockList(LPDBLIST lpList)
TRACE("(%p)\n", lpList); TRACE("(%p)\n", lpList);
if (lpList) if (lpList)
LocalFree((HLOCAL)lpList); LocalFree(lpList);
} }
/************************************************************************* /*************************************************************************
@ -389,20 +386,19 @@ BOOL WINAPI SHRemoveDataBlock(LPDBLIST* lppList, DWORD dwSignature)
lpList = NextItem(lpList); lpList = NextItem(lpList);
/* Resize the list */ /* Resize the list */
ulNewSize = LocalSize((HLOCAL)*lppList) - lpItem->cbSize; ulNewSize = LocalSize(*lppList) - lpItem->cbSize;
/* Copy following elements over lpItem */ /* Copy following elements over lpItem */
memmove(lpItem, lpNext, (char *)lpList - (char *)lpNext + sizeof(ULONG)); memmove(lpItem, lpNext, (char *)lpList - (char *)lpNext + sizeof(ULONG));
if(ulNewSize <= sizeof(ULONG)) if(ulNewSize <= sizeof(ULONG))
{ {
LocalFree((HLOCAL)*lppList); LocalFree(*lppList);
*lppList = NULL; /* Removed the last element */ *lppList = NULL; /* Removed the last element */
} }
else else
{ {
lpList = (LPDATABLOCK_HEADER)LocalReAlloc((HLOCAL)*lppList, ulNewSize, lpList = LocalReAlloc(*lppList, ulNewSize, LMEM_ZEROINIT|LMEM_MOVEABLE);
LMEM_ZEROINIT|LMEM_MOVEABLE);
if(lpList) if(lpList)
*lppList = lpList; *lppList = lpList;
} }

View file

@ -101,7 +101,7 @@ static ULONG WINAPI IStream_fnRelease(IStream *iface)
if (!refCount) if (!refCount)
{ {
IStream_fnCommit(iface, 0); /* If ever buffered, this will be needed */ IStream_fnCommit(iface, 0); /* If ever buffered, this will be needed */
LocalFree((HLOCAL)This->lpszPath); LocalFree(This->lpszPath);
CloseHandle(This->hFile); CloseHandle(This->hFile);
HeapFree(GetProcessHeap(), 0, This); HeapFree(GetProcessHeap(), 0, This);
} }

View file

@ -2,7 +2,7 @@
* SHLWAPI ordinal functions * SHLWAPI ordinal functions
* *
* Copyright 1997 Marcus Meissner * Copyright 1997 Marcus Meissner
* 1998 Jürgen Schmied * 1998 Jürgen Schmied
* 2001-2003 Jon Griffiths * 2001-2003 Jon Griffiths
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -76,10 +76,9 @@ BOOL WINAPI SHAboutInfoW(LPWSTR,DWORD);
* *
* Internal implemetation of SHLWAPI_11. * Internal implemetation of SHLWAPI_11.
*/ */
static static HANDLE SHLWAPI_DupSharedHandle(HANDLE hShared, DWORD dwDstProcId,
HANDLE WINAPI SHLWAPI_DupSharedHandle(HANDLE hShared, DWORD dwDstProcId, DWORD dwSrcProcId, DWORD dwAccess,
DWORD dwSrcProcId, DWORD dwAccess, DWORD dwOptions)
DWORD dwOptions)
{ {
HANDLE hDst, hSrc; HANDLE hDst, hSrc;
DWORD dwMyProcId = GetCurrentProcessId(); DWORD dwMyProcId = GetCurrentProcessId();
@ -1251,11 +1250,11 @@ BOOL WINAPI SHIsSameObject(IUnknown* lpInt1, IUnknown* lpInt2)
if (lpInt1 == lpInt2) if (lpInt1 == lpInt2)
return TRUE; return TRUE;
if (!SUCCEEDED(IUnknown_QueryInterface(lpInt1, &IID_IUnknown, if (FAILED(IUnknown_QueryInterface(lpInt1, &IID_IUnknown,
(LPVOID *)&lpUnknown1))) (LPVOID *)&lpUnknown1)))
return FALSE; return FALSE;
if (!SUCCEEDED(IUnknown_QueryInterface(lpInt2, &IID_IUnknown, if (FAILED(IUnknown_QueryInterface(lpInt2, &IID_IUnknown,
(LPVOID *)&lpUnknown2))) (LPVOID *)&lpUnknown2)))
return FALSE; return FALSE;
@ -2260,6 +2259,25 @@ HRESULT WINAPI QISearch(
return ret; return ret;
} }
/*************************************************************************
* @ [SHLWAPI.220]
*
* Set the Font for a window and the "PropDlgFont" property of the parent window.
*
* PARAMS
* hWnd [I] Parent Window to set the property
* id [I] Index of child Window to set the Font
*
* RETURNS
* Success: S_OK
*
*/
HRESULT WINAPI SHSetDefaultDialogFont(HWND hWnd, INT id)
{
FIXME("(%p, %d) stub\n", hWnd, id);
return S_OK;
}
/************************************************************************* /*************************************************************************
* @ [SHLWAPI.221] * @ [SHLWAPI.221]
* *
@ -2798,7 +2816,7 @@ HRESULT WINAPI SHInvokeDefaultCommand(HWND hWnd, IShellFolder* lpFolder, LPCITEM
* *
* _SHPackDispParamsV * _SHPackDispParamsV
*/ */
HRESULT WINAPI SHPackDispParamsV(DISPPARAMS *params, VARIANTARG *args, UINT cnt, va_list valist) HRESULT WINAPI SHPackDispParamsV(DISPPARAMS *params, VARIANTARG *args, UINT cnt, __ms_va_list valist)
{ {
VARIANTARG *iter; VARIANTARG *iter;
@ -2852,14 +2870,12 @@ HRESULT WINAPI SHPackDispParamsV(DISPPARAMS *params, VARIANTARG *args, UINT cnt,
*/ */
HRESULT WINAPIV SHPackDispParams(DISPPARAMS *params, VARIANTARG *args, UINT cnt, ...) HRESULT WINAPIV SHPackDispParams(DISPPARAMS *params, VARIANTARG *args, UINT cnt, ...)
{ {
va_list valist; __ms_va_list valist;
HRESULT hres; HRESULT hres;
va_start(valist, cnt); __ms_va_start(valist, cnt);
hres = SHPackDispParamsV(params, args, cnt, valist); hres = SHPackDispParamsV(params, args, cnt, valist);
__ms_va_end(valist);
va_end(valist);
return hres; return hres;
} }
@ -2985,7 +3001,7 @@ HRESULT WINAPIV IUnknown_CPContainerInvokeParam(
IConnectionPoint *iCP; IConnectionPoint *iCP;
IConnectionPointContainer *iCPC; IConnectionPointContainer *iCPC;
DISPPARAMS dispParams = {buffer, NULL, cParams, 0}; DISPPARAMS dispParams = {buffer, NULL, cParams, 0};
va_list valist; __ms_va_list valist;
if (!container) if (!container)
return E_NOINTERFACE; return E_NOINTERFACE;
@ -2999,9 +3015,9 @@ HRESULT WINAPIV IUnknown_CPContainerInvokeParam(
if(FAILED(result)) if(FAILED(result))
return result; return result;
va_start(valist, cParams); __ms_va_start(valist, cParams);
SHPackDispParamsV(&dispParams, buffer, cParams, valist); SHPackDispParamsV(&dispParams, buffer, cParams, valist);
va_end(valist); __ms_va_end(valist);
result = SHLWAPI_InvokeByIID(iCP, riid, dispId, &dispParams); result = SHLWAPI_InvokeByIID(iCP, riid, dispId, &dispParams);
IConnectionPoint_Release(iCP); IConnectionPoint_Release(iCP);
@ -3527,7 +3543,7 @@ HRESULT WINAPI SHIShellFolder_EnumObjects(LPSHELLFOLDER lpFolder, HWND hwnd, SHC
} }
/* INTERNAL: Map from HLS color space to RGB */ /* INTERNAL: Map from HLS color space to RGB */
static WORD WINAPI ConvertHue(int wHue, WORD wMid1, WORD wMid2) static WORD ConvertHue(int wHue, WORD wMid1, WORD wMid2)
{ {
wHue = wHue > 240 ? wHue - 240 : wHue < 0 ? wHue + 240 : wHue; wHue = wHue > 240 ? wHue - 240 : wHue < 0 ? wHue + 240 : wHue;
@ -3672,10 +3688,34 @@ DWORD WINAPI MLClearMLHInstance(DWORD x)
return 0xabba1247; return 0xabba1247;
} }
/*************************************************************************
* @ [SHLWAPI.432]
*
* See SHSendMessageBroadcastW
*
*/
DWORD WINAPI SHSendMessageBroadcastA(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return SendMessageTimeoutA(HWND_BROADCAST, uMsg, wParam, lParam,
SMTO_ABORTIFHUNG, 2000, NULL);
}
/*************************************************************************
* @ [SHLWAPI.433]
*
* A wrapper for sending Broadcast Messages to all top level Windows
*
*/
DWORD WINAPI SHSendMessageBroadcastW(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
return SendMessageTimeoutW(HWND_BROADCAST, uMsg, wParam, lParam,
SMTO_ABORTIFHUNG, 2000, NULL);
}
/************************************************************************* /*************************************************************************
* @ [SHLWAPI.436] * @ [SHLWAPI.436]
* *
* Convert an Unicode string CLSID into a CLSID. * Convert a Unicode string CLSID into a CLSID.
* *
* PARAMS * PARAMS
* idstr [I] string containing a CLSID in text form * idstr [I] string containing a CLSID in text form
@ -4269,10 +4309,10 @@ INT WINAPIV ShellMessageBoxWrapW(HINSTANCE hInstance, HWND hWnd, LPCWSTR lpText,
WCHAR szText[100], szTitle[100]; WCHAR szText[100], szTitle[100];
LPCWSTR pszText = szText, pszTitle = szTitle; LPCWSTR pszText = szText, pszTitle = szTitle;
LPWSTR pszTemp; LPWSTR pszTemp;
va_list args; __ms_va_list args;
int ret; int ret;
va_start(args, uType); __ms_va_start(args, uType);
TRACE("(%p,%p,%p,%p,%08x)\n", hInstance, hWnd, lpText, lpCaption, uType); TRACE("(%p,%p,%p,%p,%08x)\n", hInstance, hWnd, lpText, lpCaption, uType);
@ -4289,10 +4329,10 @@ INT WINAPIV ShellMessageBoxWrapW(HINSTANCE hInstance, HWND hWnd, LPCWSTR lpText,
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,
pszText, 0, 0, (LPWSTR)&pszTemp, 0, &args); pszText, 0, 0, (LPWSTR)&pszTemp, 0, &args);
va_end(args); __ms_va_end(args);
ret = MessageBoxW(hWnd, pszTemp, pszTitle, uType); ret = MessageBoxW(hWnd, pszTemp, pszTitle, uType);
LocalFree((HLOCAL)pszTemp); LocalFree(pszTemp);
return ret; return ret;
} }

View file

@ -1156,7 +1156,7 @@ BOOL WINAPI PathFileExistsDefExtA(LPSTR lpszPath,DWORD dwWhich)
* *
* Internal helper for SHLWAPI_PathFindOnPathExA/W. * Internal helper for SHLWAPI_PathFindOnPathExA/W.
*/ */
static BOOL WINAPI SHLWAPI_PathFindInOtherDirs(LPWSTR lpszFile, DWORD dwWhich) static BOOL SHLWAPI_PathFindInOtherDirs(LPWSTR lpszFile, DWORD dwWhich)
{ {
static const WCHAR szSystem[] = { 'S','y','s','t','e','m','\0'}; static const WCHAR szSystem[] = { 'S','y','s','t','e','m','\0'};
static const WCHAR szPath[] = { 'P','A','T','H','\0'}; static const WCHAR szPath[] = { 'P','A','T','H','\0'};
@ -1792,7 +1792,7 @@ BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD *dwAttr)
/************************************************************************* /*************************************************************************
* PathMatchSingleMaskA [internal] * PathMatchSingleMaskA [internal]
*/ */
static BOOL WINAPI PathMatchSingleMaskA(LPCSTR name, LPCSTR mask) static BOOL PathMatchSingleMaskA(LPCSTR name, LPCSTR mask)
{ {
while (*name && *mask && *mask!=';') while (*name && *mask && *mask!=';')
{ {
@ -1826,7 +1826,7 @@ static BOOL WINAPI PathMatchSingleMaskA(LPCSTR name, LPCSTR mask)
/************************************************************************* /*************************************************************************
* PathMatchSingleMaskW [internal] * PathMatchSingleMaskW [internal]
*/ */
static BOOL WINAPI PathMatchSingleMaskW(LPCWSTR name, LPCWSTR mask) static BOOL PathMatchSingleMaskW(LPCWSTR name, LPCWSTR mask)
{ {
while (*name && *mask && *mask != ';') while (*name && *mask && *mask != ';')
{ {
@ -2991,7 +2991,7 @@ UINT WINAPI PathGetCharTypeW(WCHAR ch)
* *
* Internal helper for PathMakeSystemFolderW. * Internal helper for PathMakeSystemFolderW.
*/ */
static BOOL WINAPI SHLWAPI_UseSystemForSystemFolders(void) static BOOL SHLWAPI_UseSystemForSystemFolders(void)
{ {
static BOOL bCheckedReg = FALSE; static BOOL bCheckedReg = FALSE;
static BOOL bUseSystemForSystemFolders = FALSE; static BOOL bUseSystemForSystemFolders = FALSE;

View file

@ -66,10 +66,10 @@ HRESULT WINAPI SHRegGetCLSIDKeyW(REFGUID,LPCWSTR,BOOL,BOOL,PHKEY);
* Function: Return the proper registry key from the HUSKEY structure * Function: Return the proper registry key from the HUSKEY structure
* also allow special predefined values. * also allow special predefined values.
*/ */
static HKEY WINAPI REG_GetHKEYFromHUSKEY(HUSKEY hUSKey, BOOL which) static HKEY REG_GetHKEYFromHUSKEY(HUSKEY hUSKey, BOOL which)
{ {
HKEY test = (HKEY) hUSKey; HKEY test = hUSKey;
LPSHUSKEY mihk = (LPSHUSKEY) hUSKey; LPSHUSKEY mihk = hUSKey;
if ((test == HKEY_CLASSES_ROOT) || if ((test == HKEY_CLASSES_ROOT) ||
(test == HKEY_CURRENT_CONFIG) || (test == HKEY_CURRENT_CONFIG) ||
@ -174,7 +174,7 @@ LONG WINAPI SHRegOpenUSKeyW(LPCWSTR Path, REGSAM AccessType, HUSKEY hRelativeUSK
TRACE("HUSKEY=%p\n", hKey); TRACE("HUSKEY=%p\n", hKey);
if (phNewUSKey) if (phNewUSKey)
*phNewUSKey = (HUSKEY)hKey; *phNewUSKey = hKey;
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
@ -1398,21 +1398,21 @@ DWORD WINAPI SHQueryValueExA( HKEY hKey, LPCSTR lpszValue,
char cNull = '\0'; char cNull = '\0';
nBytesToAlloc = dwUnExpDataLen; nBytesToAlloc = dwUnExpDataLen;
szData = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc); szData = LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
RegQueryValueExA (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc); RegQueryValueExA (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc);
dwExpDataLen = ExpandEnvironmentStringsA(szData, &cNull, 1); dwExpDataLen = ExpandEnvironmentStringsA(szData, &cNull, 1);
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen); dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
LocalFree((HLOCAL) szData); LocalFree(szData);
} }
else else
{ {
nBytesToAlloc = (lstrlenA(pvData)+1) * sizeof (CHAR); nBytesToAlloc = (lstrlenA(pvData)+1) * sizeof (CHAR);
szData = (LPSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc ); szData = LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
lstrcpyA(szData, pvData); lstrcpyA(szData, pvData);
dwExpDataLen = ExpandEnvironmentStringsA(szData, pvData, *pcbData / sizeof(CHAR)); dwExpDataLen = ExpandEnvironmentStringsA(szData, pvData, *pcbData / sizeof(CHAR));
if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA; if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen); dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
LocalFree((HLOCAL) szData); LocalFree(szData);
} }
} }
@ -1459,21 +1459,21 @@ DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue,
WCHAR cNull = '\0'; WCHAR cNull = '\0';
nBytesToAlloc = dwUnExpDataLen; nBytesToAlloc = dwUnExpDataLen;
szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc); szData = LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
RegQueryValueExW (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc); RegQueryValueExW (hKey, lpszValue, lpReserved, NULL, (LPBYTE)szData, &nBytesToAlloc);
dwExpDataLen = ExpandEnvironmentStringsW(szData, &cNull, 1); dwExpDataLen = ExpandEnvironmentStringsW(szData, &cNull, 1);
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen); dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
LocalFree((HLOCAL) szData); LocalFree(szData);
} }
else else
{ {
nBytesToAlloc = (lstrlenW(pvData) + 1) * sizeof(WCHAR); nBytesToAlloc = (lstrlenW(pvData) + 1) * sizeof(WCHAR);
szData = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc ); szData = LocalAlloc(LMEM_ZEROINIT, nBytesToAlloc);
lstrcpyW(szData, pvData); lstrcpyW(szData, pvData);
dwExpDataLen = ExpandEnvironmentStringsW(szData, pvData, *pcbData/sizeof(WCHAR) ); dwExpDataLen = ExpandEnvironmentStringsW(szData, pvData, *pcbData/sizeof(WCHAR) );
if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA; if (dwExpDataLen > *pcbData) dwRet = ERROR_MORE_DATA;
dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen); dwUnExpDataLen = max(nBytesToAlloc, dwExpDataLen);
LocalFree((HLOCAL) szData); LocalFree(szData);
} }
} }

View file

@ -217,7 +217,7 @@
217 stdcall -noname SHUnicodeToAnsi(wstr ptr ptr) 217 stdcall -noname SHUnicodeToAnsi(wstr ptr ptr)
218 stdcall -noname SHUnicodeToAnsiCP(long wstr ptr ptr) 218 stdcall -noname SHUnicodeToAnsiCP(long wstr ptr ptr)
219 stdcall -noname QISearch(long long long long) 219 stdcall -noname QISearch(long long long long)
220 stub -noname SHSetDefaultDialogFont 220 stdcall -noname SHSetDefaultDialogFont(ptr long)
221 stdcall -noname SHRemoveDefaultDialogFont(ptr) 221 stdcall -noname SHRemoveDefaultDialogFont(ptr)
222 stdcall -noname SHGlobalCounterCreate(long) 222 stdcall -noname SHGlobalCounterCreate(long)
223 stdcall -noname SHGlobalCounterGetValue(long) 223 stdcall -noname SHGlobalCounterGetValue(long)
@ -429,8 +429,8 @@
429 stdcall -noname MLIsMLHInstance(long) 429 stdcall -noname MLIsMLHInstance(long)
430 stdcall -noname MLSetMLHInstance(long long) 430 stdcall -noname MLSetMLHInstance(long long)
431 stdcall -noname MLClearMLHInstance(long) 431 stdcall -noname MLClearMLHInstance(long)
432 stub -noname SHSendMessageBroadcastA 432 stdcall -noname SHSendMessageBroadcastA(long long long)
433 stub -noname SHSendMessageBroadcastW 433 stdcall -noname SHSendMessageBroadcastW(long long long)
434 stdcall -noname SendMessageTimeoutWrapW(long long long long long long ptr) user32.SendMessageTimeoutW 434 stdcall -noname SendMessageTimeoutWrapW(long long long long long long ptr) user32.SendMessageTimeoutW
435 stdcall -noname CLSIDFromProgIDWrap(wstr ptr) ole32.CLSIDFromProgID 435 stdcall -noname CLSIDFromProgIDWrap(wstr ptr) ole32.CLSIDFromProgID
436 stdcall -noname CLSIDFromStringWrap(wstr ptr) 436 stdcall -noname CLSIDFromStringWrap(wstr ptr)

View file

@ -18,20 +18,23 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
/* UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "エラー!" CAPTION "エラー!"
FONT 9, "MS UI Gothic" FONT 9, "MS Shell Dlg"
{ {
LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20
LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8
CHECKBOX "今後はこのメッセージを表示しない(&i)", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP CHECKBOX "今後はこのメッセージを表示しない(&i)", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON L"キャンセル(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"キャンセル(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON L"はい(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"はい(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON L"いいえ(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP PUSHBUTTON L"いいえ(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP
} }
STRINGTABLE DISCARDABLE STRINGTABLE DISCARDABLE
@ -41,3 +44,5 @@ STRINGTABLE DISCARDABLE
IDS_TIME_INTERVAL_MINUTES " min" IDS_TIME_INTERVAL_MINUTES " min"
IDS_TIME_INTERVAL_SECONDS " sec" IDS_TIME_INTERVAL_SECONDS " sec"
} }
#pragma code_page(default)

View file

@ -18,12 +18,12 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/ */
LANGUAGE LANG_KOREAN, SUBLANG_NEUTRAL LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "¿¡·¯!" CAPTION "¿¡·¯!"
FONT 8, "MS Shell Dlg" FONT 9, "MS Shell Dlg"
{ {
LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20
LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8

View file

@ -26,7 +26,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "错误!" CAPTION "错误!"
FONT 9, "MS Song" FONT 9, "MS Shell Dlg"
{ {
LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20
LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8
@ -50,7 +50,7 @@ LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60 IDD_ERR_DIALOG DIALOG MOVEABLE DISCARDABLE 0, 0, 220, 60
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "錯誤!" CAPTION "錯誤!"
FONT 8, "PMingLiu" FONT 9, "MS Shell Dlg"
{ {
LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20
LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8

View file

@ -911,7 +911,7 @@ LPSTR WINAPI StrDupA(LPCSTR lpszStr)
TRACE("(%s)\n",debugstr_a(lpszStr)); TRACE("(%s)\n",debugstr_a(lpszStr));
iLen = lpszStr ? strlen(lpszStr) + 1 : 1; iLen = lpszStr ? strlen(lpszStr) + 1 : 1;
lpszRet = (LPSTR)LocalAlloc(LMEM_FIXED, iLen); lpszRet = LocalAlloc(LMEM_FIXED, iLen);
if (lpszRet) if (lpszRet)
{ {
@ -936,7 +936,7 @@ LPWSTR WINAPI StrDupW(LPCWSTR lpszStr)
TRACE("(%s)\n",debugstr_w(lpszStr)); TRACE("(%s)\n",debugstr_w(lpszStr));
iLen = (lpszStr ? strlenW(lpszStr) + 1 : 1) * sizeof(WCHAR); iLen = (lpszStr ? strlenW(lpszStr) + 1 : 1) * sizeof(WCHAR);
lpszRet = (LPWSTR)LocalAlloc(LMEM_FIXED, iLen); lpszRet = LocalAlloc(LMEM_FIXED, iLen);
if (lpszRet) if (lpszRet)
{ {

View file

@ -140,7 +140,7 @@ HRESULT WINAPI SHGetThreadRef(IUnknown **lppUnknown)
if (!lppUnknown || SHLWAPI_ThreadRef_index == TLS_OUT_OF_INDEXES) if (!lppUnknown || SHLWAPI_ThreadRef_index == TLS_OUT_OF_INDEXES)
return E_NOINTERFACE; return E_NOINTERFACE;
*lppUnknown = (IUnknown*)TlsGetValue(SHLWAPI_ThreadRef_index); *lppUnknown = TlsGetValue(SHLWAPI_ThreadRef_index);
if (!*lppUnknown) if (!*lppUnknown)
return E_NOINTERFACE; return E_NOINTERFACE;

View file

@ -118,7 +118,7 @@ static const unsigned char HashDataLookup[256] = {
static DWORD get_scheme_code(LPCWSTR scheme, DWORD scheme_len) static DWORD get_scheme_code(LPCWSTR scheme, DWORD scheme_len)
{ {
int i; unsigned int i;
for(i=0; i < sizeof(shlwapi_schemes)/sizeof(shlwapi_schemes[0]); i++) { for(i=0; i < sizeof(shlwapi_schemes)/sizeof(shlwapi_schemes[0]); i++) {
if(scheme_len == strlenW(shlwapi_schemes[i].scheme_name) if(scheme_len == strlenW(shlwapi_schemes[i].scheme_name)
@ -314,8 +314,8 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
HRESULT hr = S_OK; HRESULT hr = S_OK;
DWORD EscapeFlags; DWORD EscapeFlags;
LPWSTR lpszUrlCpy, wk1, wk2, mp, mp2, root; LPWSTR lpszUrlCpy, wk1, wk2, mp, mp2, root;
INT nByteLen, state; INT state;
DWORD nLen, nWkLen; DWORD nByteLen, nLen, nWkLen;
WCHAR slash = '/'; WCHAR slash = '/';
static const WCHAR wszFile[] = {'f','i','l','e',':'}; static const WCHAR wszFile[] = {'f','i','l','e',':'};
@ -332,7 +332,7 @@ HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized,
return S_OK; return S_OK;
} }
nByteLen = (lstrlenW(pszUrl) + 1) * sizeof(WCHAR); /* length in bytes */ nByteLen = (strlenW(pszUrl) + 1) * sizeof(WCHAR); /* length in bytes */
lpszUrlCpy = HeapAlloc(GetProcessHeap(), 0, lpszUrlCpy = HeapAlloc(GetProcessHeap(), 0,
INTERNET_MAX_URL_LENGTH * sizeof(WCHAR)); INTERNET_MAX_URL_LENGTH * sizeof(WCHAR));
@ -1589,7 +1589,7 @@ static HRESULT URL_GuessScheme(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut)
index++; index++;
} }
RegCloseKey(newkey); RegCloseKey(newkey);
return -1; return E_FAIL;
} }
static HRESULT URL_ApplyDefault(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut) static HRESULT URL_ApplyDefault(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut)
@ -1652,7 +1652,7 @@ HRESULT WINAPI UrlApplySchemeW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, DW
if (res1) { if (res1) {
/* no scheme in input, need to see if we need to guess */ /* no scheme in input, need to see if we need to guess */
if (dwFlags & URL_APPLY_GUESSSCHEME) { if (dwFlags & URL_APPLY_GUESSSCHEME) {
if ((ret = URL_GuessScheme(pszIn, pszOut, pcchOut)) != -1) if ((ret = URL_GuessScheme(pszIn, pszOut, pcchOut)) != E_FAIL)
return ret; return ret;
} }
} }

View file

@ -284,7 +284,7 @@ static UINT WPRINTF_GetLen( WPRINTF_FORMAT *format, WPRINTF_DATA *arg,
* Success: The number of characters written. * Success: The number of characters written.
* Failure: -1. * Failure: -1.
*/ */
INT WINAPI wvnsprintfA( LPSTR buffer, INT maxlen, LPCSTR spec, va_list args ) INT WINAPI wvnsprintfA( LPSTR buffer, INT maxlen, LPCSTR spec, __ms_va_list args )
{ {
WPRINTF_FORMAT format; WPRINTF_FORMAT format;
LPSTR p = buffer; LPSTR p = buffer;
@ -389,7 +389,7 @@ INT WINAPI wvnsprintfA( LPSTR buffer, INT maxlen, LPCSTR spec, va_list args )
* *
* See wvnsprintfA. * See wvnsprintfA.
*/ */
INT WINAPI wvnsprintfW( LPWSTR buffer, INT maxlen, LPCWSTR spec, va_list args ) INT WINAPI wvnsprintfW( LPWSTR buffer, INT maxlen, LPCWSTR spec, __ms_va_list args )
{ {
WPRINTF_FORMAT format; WPRINTF_FORMAT format;
LPWSTR p = buffer; LPWSTR p = buffer;
@ -504,12 +504,12 @@ INT WINAPI wvnsprintfW( LPWSTR buffer, INT maxlen, LPCWSTR spec, va_list args )
*/ */
int WINAPIV wnsprintfA(LPSTR lpOut, int cchLimitIn, LPCSTR lpFmt, ...) int WINAPIV wnsprintfA(LPSTR lpOut, int cchLimitIn, LPCSTR lpFmt, ...)
{ {
va_list valist; __ms_va_list valist;
INT res; INT res;
va_start( valist, lpFmt ); __ms_va_start( valist, lpFmt );
res = wvnsprintfA( lpOut, cchLimitIn, lpFmt, valist ); res = wvnsprintfA( lpOut, cchLimitIn, lpFmt, valist );
va_end( valist ); __ms_va_end( valist );
return res; return res;
} }
@ -521,11 +521,11 @@ int WINAPIV wnsprintfA(LPSTR lpOut, int cchLimitIn, LPCSTR lpFmt, ...)
*/ */
int WINAPIV wnsprintfW(LPWSTR lpOut, int cchLimitIn, LPCWSTR lpFmt, ...) int WINAPIV wnsprintfW(LPWSTR lpOut, int cchLimitIn, LPCWSTR lpFmt, ...)
{ {
va_list valist; __ms_va_list valist;
INT res; INT res;
va_start( valist, lpFmt ); __ms_va_start( valist, lpFmt );
res = wvnsprintfW( lpOut, cchLimitIn, lpFmt, valist ); res = wvnsprintfW( lpOut, cchLimitIn, lpFmt, valist );
va_end( valist ); __ms_va_end( valist );
return res; return res;
} }

View file

@ -83,10 +83,10 @@ DWORD WINAPI SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD);
DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD); DWORD WINAPI SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD);
#define SHCopyKey WINELIB_NAME_AW(SHCopyKey) #define SHCopyKey WINELIB_NAME_AW(SHCopyKey)
/* Undocumented registry functions */
HKEY WINAPI SHRegDuplicateHKey(HKEY); HKEY WINAPI SHRegDuplicateHKey(HKEY);
/* Undocumented registry functions */
DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR); DWORD WINAPI SHDeleteOrphanKeyA(HKEY,LPCSTR);
DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR); DWORD WINAPI SHDeleteOrphanKeyW(HKEY,LPCWSTR);
#define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey) #define SHDeleteOrphanKey WINELIB_NAME_AW(SHDeleteOrphanKey)
@ -193,6 +193,7 @@ enum
ASSOCF_REMAPRUNDLL = 0x080, /* Get rundll args */ ASSOCF_REMAPRUNDLL = 0x080, /* Get rundll args */
ASSOCF_NOFIXUPS = 0x100, /* Don't fixup errors */ ASSOCF_NOFIXUPS = 0x100, /* Don't fixup errors */
ASSOCF_IGNOREBASECLASS = 0x200, /* Don't read baseclass */ ASSOCF_IGNOREBASECLASS = 0x200, /* Don't read baseclass */
ASSOCF_INIT_IGNOREUNKNOWN = 0x400, /* Fail for unknown progid */
}; };
typedef DWORD ASSOCF; typedef DWORD ASSOCF;
@ -245,9 +246,7 @@ typedef enum
typedef struct IQueryAssociations *LPQUERYASSOCIATIONS; typedef struct IQueryAssociations *LPQUERYASSOCIATIONS;
#ifndef INTERFACE
#define INTERFACE IQueryAssociations #define INTERFACE IQueryAssociations
#endif
DECLARE_INTERFACE_(IQueryAssociations,IUnknown) DECLARE_INTERFACE_(IQueryAssociations,IUnknown)
{ {
/*** IUnknown methods ***/ /*** IUnknown methods ***/
@ -341,7 +340,7 @@ int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR);
HRESULT WINAPI PathCreateFromUrlA(LPCSTR pszUrl, LPSTR pszPath, LPDWORD pcchPath, DWORD dwReserved); HRESULT WINAPI PathCreateFromUrlA(LPCSTR pszUrl, LPSTR pszPath, LPDWORD pcchPath, DWORD dwReserved);
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved); HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved);
#define PathCreateFromUrl WINELIB_NANE_AW(PathCreateFromUrl) #define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl)
BOOL WINAPI PathFileExistsA(LPCSTR); BOOL WINAPI PathFileExistsA(LPCSTR);
BOOL WINAPI PathFileExistsW(LPCWSTR); BOOL WINAPI PathFileExistsW(LPCWSTR);
@ -668,17 +667,17 @@ BOOL WINAPI UrlIsOpaqueW(LPCWSTR);
HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD);
HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD); HRESULT WINAPI UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD);
#define UrlUnescape WINELIB_AW_NAME(UrlUnescape) #define UrlUnescape WINELIB_NAME_AW(UrlUnescape)
#define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \ #define UrlUnescapeInPlaceA(x,y) UrlUnescapeA(x, NULL, NULL, \
y | URL_UNESCAPE_INPLACE) y | URL_UNESCAPE_INPLACE)
#define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \ #define UrlUnescapeInPlaceW(x,y) UrlUnescapeW(x, NULL, NULL, \
y | URL_UNESCAPE_INPLACE) y | URL_UNESCAPE_INPLACE)
#define UrlUnescapeInPlace WINELIB_AW_NAME(UrlUnescapeInPlace) #define UrlUnescapeInPlace WINELIB_NAME_AW(UrlUnescapeInPlace)
HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD);
HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD); HRESULT WINAPI UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD);
#define UrlCreateFromPath WINELIB_AW_NAME(UrlCreateFromPath) #define UrlCreateFromPath WINELIB_NAME_AW(UrlCreateFromPath)
typedef struct tagPARSEDURLA { typedef struct tagPARSEDURLA {
DWORD cbSize; DWORD cbSize;
@ -700,7 +699,7 @@ typedef struct tagPARSEDURLW {
HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu); HRESULT WINAPI ParseURLA(LPCSTR pszUrl, PARSEDURLA *ppu);
HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu); HRESULT WINAPI ParseURLW(LPCWSTR pszUrl, PARSEDURLW *ppu);
#define ParseURL WINELIB_AW_NAME(ParseUrl) #define ParseURL WINELIB_NAME_AW(ParseUrl)
#endif /* NO_SHLWAPI_PATH */ #endif /* NO_SHLWAPI_PATH */
@ -784,7 +783,7 @@ LPSTR WINAPI StrFormatByteSizeA (DWORD,LPSTR,UINT);
/* A/W Pairing is broken for this function */ /* A/W Pairing is broken for this function */
LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT); LPSTR WINAPI StrFormatByteSize64A (LONGLONG,LPSTR,UINT);
LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT); LPWSTR WINAPI StrFormatByteSizeW (LONGLONG,LPWSTR,UINT);
#ifndef __WINESRC__ #ifndef WINE_NO_UNICODE_MACROS
#ifdef UNICODE #ifdef UNICODE
#define StrFormatByteSize StrFormatByteSizeW #define StrFormatByteSize StrFormatByteSizeW
#else #else
@ -860,8 +859,8 @@ BOOL WINAPI StrTrimA(LPSTR,LPCSTR);
BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR); BOOL WINAPI StrTrimW(LPWSTR,LPCWSTR);
#define StrTrim WINELIB_NAME_AW(StrTrim) #define StrTrim WINELIB_NAME_AW(StrTrim)
INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,va_list); INT WINAPI wvnsprintfA(LPSTR,INT,LPCSTR,__ms_va_list);
INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,va_list); INT WINAPI wvnsprintfW(LPWSTR,INT,LPCWSTR,__ms_va_list);
#define wvnsprintf WINELIB_NAME_AW(wvnsprintf) #define wvnsprintf WINELIB_NAME_AW(wvnsprintf)
INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...); INT WINAPIV wnsprintfA(LPSTR,INT,LPCSTR, ...);

View file

@ -300,6 +300,18 @@ typedef unsigned int UINT,*PUINT,*LPUINT;
typedef void *LPVOID; typedef void *LPVOID;
#ifndef __ms_va_list
# if defined(__x86_64__) && defined (__GNUC__)
# define __ms_va_list __builtin_ms_va_list
# define __ms_va_start(list,arg) __builtin_ms_va_start(list,arg)
# define __ms_va_end(list) __builtin_ms_va_end(list)
# else
# define __ms_va_list va_list
# define __ms_va_start(list,arg) va_start(list,arg)
# define __ms_va_end(list) va_end(list)
# endif
#endif
// //
// Check if ntdef.h already defined these for us // Check if ntdef.h already defined these for us
// //