Sync to Wine-20050628: Mike McCormack mike@codeweavers.com - Switch IShellLink to use shlwapi.SHCreateStreamOnFileW. Dmitry Timoshkov dmitry@codeweavers.com - Make remaining OLE interface vtables const. Alexandre Julliard julliard@winehq.org - Sort entry points in the same order as Windows. Stefan Huehner stefan@huehner.org - Fix some more -Wstrict-prototypes warnings. Modified: trunk/reactos/lib/shlwapi/assoc.c Modified: trunk/reactos/lib/shlwapi/istream.c Modified: trunk/reactos/lib/shlwapi/path.c Modified: trunk/reactos/lib/shlwapi/regstream.c Modified: trunk/reactos/lib/shlwapi/shlwapi.spec _____
Modified: trunk/reactos/lib/shlwapi/assoc.c --- trunk/reactos/lib/shlwapi/assoc.c 2005-08-03 21:18:24 UTC (rev 17032) +++ trunk/reactos/lib/shlwapi/assoc.c 2005-08-03 21:34:01 UTC (rev 17033) @@ -58,13 +58,13 @@
typedef struct { - IQueryAssociationsVtbl *lpVtbl; + const IQueryAssociationsVtbl *lpVtbl; LONG ref; HKEY hkeySource; HKEY hkeyProgID; } IQueryAssociationsImpl;
-static struct IQueryAssociationsVtbl IQueryAssociations_vtbl; +static const IQueryAssociationsVtbl IQueryAssociations_vtbl;
/*********************************************************************** *** * IQueryAssociations_Constructor [internal] @@ -693,7 +693,7 @@ return E_NOTIMPL; }
-static struct IQueryAssociationsVtbl IQueryAssociations_vtbl = +static const IQueryAssociationsVtbl IQueryAssociations_vtbl = { IQueryAssociations_fnQueryInterface, IQueryAssociations_fnAddRef, _____
Modified: trunk/reactos/lib/shlwapi/istream.c --- trunk/reactos/lib/shlwapi/istream.c 2005-08-03 21:18:24 UTC (rev 17032) +++ trunk/reactos/lib/shlwapi/istream.c 2005-08-03 21:34:01 UTC (rev 17033) @@ -35,10 +35,14 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
+#define STGM_ACCESS_MODE(stgm) ((stgm)&0x0000f) +#define STGM_SHARE_MODE(stgm) ((stgm)&0x000f0) +#define STGM_CREATE_MODE(stgm) ((stgm)&0x0f000) + /* Layout of ISHFileStream object */ typedef struct { - IStreamVtbl *lpVtbl; + const IStreamVtbl *lpVtbl; ULONG ref; HANDLE hFile; DWORD dwMode; @@ -65,8 +69,7 @@ IsEqualIID(riid, &IID_IStream)) { *ppvObj = This; - - IStream_AddRef((IStream*)*ppvObj); + IStream_AddRef(iface); return S_OK; } return E_NOINTERFACE; @@ -112,22 +115,21 @@ static HRESULT WINAPI IStream_fnRead(IStream *iface, void* pv, ULONG cb, ULONG* pcbRead) { ISHFileStream *This = (ISHFileStream *)iface; - HRESULT hRet = S_OK; DWORD dwRead = 0;
TRACE("(%p,%p,0x%08lx,%p)\n", This, pv, cb, pcbRead);
if (!pv) - hRet = STG_E_INVALIDPOINTER; - else if (!ReadFile(This->hFile, pv, cb, &dwRead, NULL)) + return STG_E_INVALIDPOINTER; + + if (!ReadFile(This->hFile, pv, cb, &dwRead, NULL)) { - hRet = (HRESULT)GetLastError(); - if(hRet > 0) - hRet = HRESULT_FROM_WIN32(hRet); + ERR("error %ld reading file\n", GetLastError()); + return HRESULT_FROM_WIN32(GetLastError()); } if (pcbRead) *pcbRead = dwRead; - return hRet; + return S_OK; }
/*********************************************************************** *** @@ -136,24 +138,28 @@ static HRESULT WINAPI IStream_fnWrite(IStream *iface, const void* pv, ULONG cb, ULONG* pcbWritten) { ISHFileStream *This = (ISHFileStream *)iface; - HRESULT hRet = S_OK; DWORD dwWritten = 0;
TRACE("(%p,%p,0x%08lx,%p)\n", This, pv, cb, pcbWritten);
if (!pv) - hRet = STG_E_INVALIDPOINTER; - else if (!(This->dwMode & STGM_WRITE)) - hRet = E_FAIL; - else if (!WriteFile(This->hFile, pv, cb, &dwWritten, NULL)) + return STG_E_INVALIDPOINTER; + + switch (STGM_ACCESS_MODE(This->dwMode)) { - hRet = (HRESULT)GetLastError(); - if(hRet > 0) - hRet = HRESULT_FROM_WIN32(hRet); + case STGM_WRITE: + case STGM_READWRITE: + break; + default: + return E_FAIL; } + + if (!WriteFile(This->hFile, pv, cb, &dwWritten, NULL)) + return HRESULT_FROM_WIN32(GetLastError()); + if (pcbWritten) *pcbWritten = dwWritten; - return hRet; + return S_OK; }
/*********************************************************************** *** @@ -169,6 +175,8 @@
IStream_fnCommit(iface, 0); /* If ever buffered, this will be needed */ dwPos = SetFilePointer(This->hFile, dlibMove.u.LowPart, NULL, dwOrigin); + if( dwPos == INVALID_SET_FILE_POINTER ) + return E_FAIL;
if (pNewPos) { @@ -186,8 +194,15 @@ ISHFileStream *This = (ISHFileStream *)iface;
TRACE("(%p,%ld)\n", This, libNewSize.u.LowPart); + IStream_fnCommit(iface, 0); /* If ever buffered, this will be needed */ - return E_NOTIMPL; + if( ! SetFilePointer( This->hFile, libNewSize.QuadPart, NULL, FILE_BEGIN ) ) + return E_FAIL; + + if( ! SetEndOfFile( This->hFile ) ) + return E_FAIL; + + return S_OK; }
/*********************************************************************** *** @@ -325,7 +340,7 @@ return E_NOTIMPL; }
-static struct IStreamVtbl SHLWAPI_fsVTable = +static const IStreamVtbl SHLWAPI_fsVTable = { IStream_fnQueryInterface, IStream_fnAddRef, @@ -403,29 +418,27 @@
*lppStream = NULL;
- if (dwMode & ~(STGM_WRITE|STGM_READWRITE|STGM_SHARE_DENY_NONE|STGM_SHARE_DENY_READ|ST GM_CREATE)) - { - WARN("Invalid mode 0x%08lX\n", dwMode); + if (dwMode & STGM_TRANSACTED) return E_INVALIDARG; - }
/* Access */ - switch (dwMode & (STGM_WRITE|STGM_READWRITE)) + switch (STGM_ACCESS_MODE(dwMode)) { - case STGM_READWRITE|STGM_WRITE: case STGM_READWRITE: dwAccess = GENERIC_READ|GENERIC_WRITE; break; case STGM_WRITE: dwAccess = GENERIC_WRITE; break; - default: + case STGM_READ: dwAccess = GENERIC_READ; break; + default: + return E_INVALIDARG; }
/* Sharing */ - switch (dwMode & STGM_SHARE_DENY_READ) + switch (STGM_SHARE_MODE(dwMode)) { case STGM_SHARE_DENY_READ: dwShare = FILE_SHARE_WRITE; @@ -436,17 +449,24 @@ case STGM_SHARE_EXCLUSIVE: dwShare = 0; break; + case STGM_SHARE_DENY_NONE: + dwShare = FILE_SHARE_READ|FILE_SHARE_WRITE; + break; default: - dwShare = FILE_SHARE_READ|FILE_SHARE_WRITE; + return E_INVALIDARG; }
- /* FIXME: Creation Flags, MSDN is fuzzy on the mapping... */ - if (dwMode == STGM_FAILIFTHERE) - dwCreate = bCreate ? CREATE_NEW : OPEN_EXISTING; - else if (dwMode & STGM_CREATE) + switch(STGM_CREATE_MODE(dwMode)) + { + case STGM_FAILIFTHERE: + dwCreate = OPEN_EXISTING; + break; + case STGM_CREATE: dwCreate = CREATE_ALWAYS; - else - dwCreate = OPEN_ALWAYS; + break; + default: + return E_INVALIDARG; + }
/* Open HANDLE to file */ hFile = CreateFileW(lpszPath, dwAccess, dwShare, NULL, dwCreate, @@ -478,19 +498,12 @@ HRESULT WINAPI SHCreateStreamOnFileW(LPCWSTR lpszPath, DWORD dwMode, IStream **lppStream) { - DWORD dwAttr; - TRACE("(%s,%ld,%p)\n", debugstr_w(lpszPath), dwMode, lppStream);
if (!lpszPath || !lppStream) return E_INVALIDARG;
- dwAttr = GetFileAttributesW(lpszPath); - if (dwAttr == INVALID_FILE_ATTRIBUTES) - dwAttr = 0; - - return SHCreateStreamOnFileEx(lpszPath, dwMode|STGM_WRITE, dwAttr, - TRUE, NULL, lppStream); + return SHCreateStreamOnFileEx(lpszPath, dwMode, 0, FALSE, NULL, lppStream); }
/*********************************************************************** ** _____
Modified: trunk/reactos/lib/shlwapi/path.c --- trunk/reactos/lib/shlwapi/path.c 2005-08-03 21:18:24 UTC (rev 17032) +++ trunk/reactos/lib/shlwapi/path.c 2005-08-03 21:34:01 UTC (rev 17033) @@ -2979,7 +2979,7 @@
* * Internal helper for PathMakeSystemFolderW. */ -static BOOL WINAPI SHLWAPI_UseSystemForSystemFolders() +static BOOL WINAPI SHLWAPI_UseSystemForSystemFolders(void) { static BOOL bCheckedReg = FALSE; static BOOL bUseSystemForSystemFolders = FALSE; _____
Modified: trunk/reactos/lib/shlwapi/regstream.c --- trunk/reactos/lib/shlwapi/regstream.c 2005-08-03 21:18:24 UTC (rev 17032) +++ trunk/reactos/lib/shlwapi/regstream.c 2005-08-03 21:34:01 UTC (rev 17033) @@ -35,7 +35,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
typedef struct -{ IStreamVtbl *lpVtbl; +{ + const IStreamVtbl *lpVtbl; DWORD ref; HKEY hKey; LPBYTE pbBuffer; @@ -255,7 +256,7 @@ return E_NOTIMPL; }
-static struct IStreamVtbl rstvt = +static const IStreamVtbl rstvt = { IStream_fnQueryInterface, IStream_fnAddRef, @@ -305,7 +306,7 @@ return E_NOTIMPL; }
-static struct IStreamVtbl DummyRegStreamVTable = +static const IStreamVtbl DummyRegStreamVTable = { IStream_fnQueryInterface, IStream_fnAddRefDummy, /* Overridden */ _____
Modified: trunk/reactos/lib/shlwapi/shlwapi.spec --- trunk/reactos/lib/shlwapi/shlwapi.spec 2005-08-03 21:18:24 UTC (rev 17032) +++ trunk/reactos/lib/shlwapi/shlwapi.spec 2005-08-03 21:34:01 UTC (rev 17033) @@ -547,6 +547,7 @@
551 stub -noname IShellFolder_CompareIDs
@ stdcall AssocCreate(long long long long ptr ptr) +@ stdcall AssocIsDangerous(long) @ stdcall AssocQueryKeyA(long long str ptr ptr) @ stdcall AssocQueryKeyW(long long wstr ptr ptr) @ stdcall AssocQueryStringA(long long ptr ptr str ptr) @@ -593,6 +594,8 @@ @ stdcall PathFindNextComponentW (wstr) @ stdcall PathFindOnPathA (str ptr) @ stdcall PathFindOnPathW (wstr ptr) +@ stdcall PathFindSuffixArrayA(str ptr long) +@ stdcall PathFindSuffixArrayW(wstr ptr long) @ stdcall PathGetArgsA (str) @ stdcall PathGetArgsW (wstr) @ stdcall PathGetCharTypeA(long) @@ -602,9 +605,15 @@ @ stdcall PathIsContentTypeA(str str) @ stdcall PathIsContentTypeW(wstr wstr) @ stdcall PathIsDirectoryA(str) +@ stdcall PathIsDirectoryEmptyA(str) +@ stdcall PathIsDirectoryEmptyW(wstr) @ stdcall PathIsDirectoryW(wstr) @ stdcall PathIsFileSpecA(str) @ stdcall PathIsFileSpecW(wstr) +@ stdcall PathIsLFNFileSpecA(str) +@ stdcall PathIsLFNFileSpecW(wstr) +@ stdcall PathIsNetworkPathA(str) +@ stdcall PathIsNetworkPathW(wstr) @ stdcall PathIsPrefixA(str str) @ stdcall PathIsPrefixW(wstr wstr) @ stdcall PathIsRelativeA (str) @@ -657,11 +666,22 @@ @ stdcall PathStripPathW(wstr) @ stdcall PathStripToRootA(str) @ stdcall PathStripToRootW(wstr) +@ stdcall PathUnExpandEnvStringsA(str ptr long) +@ stdcall PathUnExpandEnvStringsW(wstr ptr long) +@ stdcall PathUndecorateA(str) +@ stdcall PathUndecorateW(wstr) @ stdcall PathUnmakeSystemFolderA(str) @ stdcall PathUnmakeSystemFolderW(wstr) @ stdcall PathUnquoteSpacesA (str) @ stdcall PathUnquoteSpacesW (wstr) +@ stdcall SHAutoComplete(ptr long) +@ stdcall SHCopyKeyA(long str long long) +@ stdcall SHCopyKeyW(long wstr long long) @ stdcall SHCreateShellPalette(long) +@ stdcall SHCreateStreamOnFileA(str long ptr) +@ stdcall SHCreateStreamOnFileEx(wstr long long long ptr ptr) +@ stdcall SHCreateStreamOnFileW(wstr long ptr) +@ stdcall SHCreateStreamWrapper(ptr ptr long ptr) @ stdcall SHDeleteEmptyKeyA(long ptr) @ stdcall SHDeleteEmptyKeyW(long ptr) @ stdcall SHDeleteKeyA(long str) @@ -675,13 +695,14 @@ @ stdcall SHEnumValueA(long long str ptr ptr ptr ptr) @ stdcall SHEnumValueW(long long wstr ptr ptr ptr ptr) @ stdcall SHGetInverseCMAP ( ptr long ) +@ stdcall SHGetThreadRef (ptr) @ stdcall SHGetValueA ( long str str ptr ptr ptr ) @ stdcall SHGetValueW ( long wstr wstr ptr ptr ptr ) @ stdcall SHIsLowMemoryMachine(long) -@ stdcall SHOpenRegStreamA(long str str long) -@ stdcall SHOpenRegStreamW(long wstr str long) @ stdcall SHOpenRegStream2A(long str str long) @ stdcall SHOpenRegStream2W(long wstr str long) +@ stdcall SHOpenRegStreamA(long str str long) +@ stdcall SHOpenRegStreamW(long wstr str long) @ stdcall SHQueryInfoKeyA(long ptr ptr ptr ptr) @ stdcall SHQueryInfoKeyW(long ptr ptr ptr ptr) @ stdcall SHQueryValueExA(long str ptr ptr ptr ptr) @@ -693,12 +714,15 @@ @ stdcall SHRegDeleteEmptyUSKeyW(long wstr long) @ stdcall SHRegDeleteUSValueA(long str long) @ stdcall SHRegDeleteUSValueW(long wstr long) +@ stdcall SHRegDuplicateHKey (long) @ stdcall SHRegEnumUSKeyA(long long str ptr long) @ stdcall SHRegEnumUSKeyW(long long wstr ptr long) @ stdcall SHRegEnumUSValueA(long long ptr ptr ptr ptr ptr long) @ stdcall SHRegEnumUSValueW(long long ptr ptr ptr ptr ptr long) @ stdcall SHRegGetBoolUSValueA(str str long long) @ stdcall SHRegGetBoolUSValueW(wstr wstr long long) +@ stdcall SHRegGetPathA(long str str ptr long) +@ stdcall SHRegGetPathW(long wstr wstr ptr long) @ stdcall SHRegGetUSValueA ( str str ptr ptr ptr long ptr long ) @ stdcall SHRegGetUSValueW ( wstr wstr ptr ptr ptr long ptr long ) @ stdcall SHRegOpenUSKeyA ( str long long long long ) @@ -707,12 +731,20 @@ @ stdcall SHRegQueryInfoUSKeyW ( long ptr ptr ptr ptr long ) @ stdcall SHRegQueryUSValueA ( long str ptr ptr ptr long ptr long ) @ stdcall SHRegQueryUSValueW ( long wstr ptr ptr ptr long ptr long ) +@ stdcall SHRegSetPathA(long str str str long) +@ stdcall SHRegSetPathW(long wstr wstr wstr long) @ stdcall SHRegSetUSValueA ( str str long ptr long long) @ stdcall SHRegSetUSValueW ( wstr wstr long ptr long long) @ stdcall SHRegWriteUSValueA (long str long ptr long long) @ stdcall SHRegWriteUSValueW (long str long ptr long long) +@ stdcall SHRegisterValidateTemplate(wstr long) +@ stdcall SHReleaseThreadRef() +@ stdcall SHSetThreadRef (ptr) @ stdcall SHSetValueA (long str str long ptr long) @ stdcall SHSetValueW (long wstr wstr long ptr long) +@ stdcall SHSkipJunction(ptr ptr) +@ stdcall SHStrDupA (str ptr) +@ stdcall SHStrDupW (wstr ptr) @ stdcall StrCSpnA (str str) @ stdcall StrCSpnIA (str str) @ stdcall StrCSpnIW (wstr wstr) @@ -725,6 +757,7 @@ @ stdcall StrChrIW (wstr long) @ stdcall StrChrW (wstr long) @ stdcall StrCmpIW (wstr wstr) +@ stdcall StrCmpLogicalW(wstr wstr) @ stdcall StrCmpNA (str str long) @ stdcall StrCmpNIA (str str long) @ stdcall StrCmpNIW (wstr wstr long) @@ -734,8 +767,11 @@ @ stdcall StrCpyW (ptr wstr) @ stdcall StrDupA (str) @ stdcall StrDupW (wstr) +@ stdcall StrFormatByteSize64A(long long ptr long) @ stdcall StrFormatByteSizeA(long ptr long) @ stdcall StrFormatByteSizeW(long long ptr long) +@ stdcall StrFormatKBSizeA(long long str long) +@ stdcall StrFormatKBSizeW(long long wstr long) @ stdcall StrFromTimeIntervalA(ptr long long long) @ stdcall StrFromTimeIntervalW(ptr long long long) @ stdcall StrIsIntlEqualA(long str str long) @@ -750,6 +786,11 @@ @ stdcall StrRChrW (wstr wstr long) @ stdcall StrRStrIA (str str str) @ stdcall StrRStrIW (wstr wstr wstr) +@ stdcall StrRetToBSTR(ptr ptr ptr) +@ stdcall StrRetToBufA(ptr ptr ptr long) +@ stdcall StrRetToBufW(ptr ptr ptr long) +@ stdcall StrRetToStrA(ptr ptr ptr) +@ stdcall StrRetToStrW(ptr ptr ptr) @ stdcall StrSpnA (str str) @ stdcall StrSpnW (wstr wstr) @ stdcall StrStrA(str str) @@ -788,52 +829,8 @@ @ stdcall UrlIsW(wstr long) @ stdcall UrlUnescapeA(str ptr ptr long) @ stdcall UrlUnescapeW(wstr ptr ptr long) +@ stdcall _SHGetInstanceExplorer(ptr) @ varargs wnsprintfA(ptr long str) @ varargs wnsprintfW(ptr long wstr) @ stdcall wvnsprintfA(ptr long str ptr) @ stdcall wvnsprintfW(ptr long wstr ptr) - - -# exported in later versions -@ stdcall AssocIsDangerous(long) -@ stdcall StrRetToBufA(ptr ptr ptr long) -@ stdcall StrRetToBufW(ptr ptr ptr long) -@ stdcall StrRetToBSTR(ptr ptr ptr) -@ stdcall StrRetToStrA(ptr ptr ptr) -@ stdcall StrRetToStrW(ptr ptr ptr) -@ stdcall SHRegGetPathA(long str str ptr long) -@ stdcall SHRegGetPathW(long wstr wstr ptr long) -@ stdcall PathIsDirectoryEmptyA(str) -@ stdcall PathIsDirectoryEmptyW(wstr) -@ stdcall PathIsNetworkPathA(str) -@ stdcall PathIsNetworkPathW(wstr) -@ stdcall PathIsLFNFileSpecA(str) -@ stdcall PathIsLFNFileSpecW(wstr) -@ stdcall PathFindSuffixArrayA(str ptr long) -@ stdcall PathFindSuffixArrayW(wstr ptr long) -@ stdcall _SHGetInstanceExplorer(ptr) -@ stdcall PathUndecorateA(str) -@ stdcall PathUndecorateW(wstr) -@ stdcall PathUnExpandEnvStringsA(str ptr long) -@ stdcall PathUnExpandEnvStringsW(wstr ptr long) -@ stdcall SHCopyKeyA(long str long long) -@ stdcall SHCopyKeyW(long wstr long long) -@ stdcall SHAutoComplete(ptr long) -@ stdcall SHCreateStreamOnFileA(str long ptr) -@ stdcall SHCreateStreamOnFileW(wstr long ptr) -@ stdcall SHCreateStreamOnFileEx(wstr long long long ptr ptr) -@ stdcall SHCreateStreamWrapper(ptr ptr long ptr) -@ stdcall SHGetThreadRef (ptr) -@ stdcall SHRegDuplicateHKey (long) -@ stdcall SHRegSetPathA(long str str str long) -@ stdcall SHRegSetPathW(long wstr wstr wstr long) -@ stdcall SHRegisterValidateTemplate(wstr long) -@ stdcall SHSetThreadRef (ptr) -@ stdcall SHReleaseThreadRef() -@ stdcall SHSkipJunction(ptr ptr) -@ stdcall SHStrDupA (str ptr) -@ stdcall SHStrDupW (wstr ptr) -@ stdcall StrFormatByteSize64A(long long ptr long) -@ stdcall StrFormatKBSizeA(long long str long) -@ stdcall StrFormatKBSizeW(long long wstr long) -@ stdcall StrCmpLogicalW(wstr wstr)