Vitaly Lipatov : Use sizeof instead of constant for buffer size. <lav at etersoft.ru>

Alexander Nicolaysen Sørnes : Handle backspace key in shellview. <alex at thehandofagony.com>
Gerald Pfeifer : Avoid checking for <0 for unsigned variables. <gerald at pfeifer.com>
Thomas Weidenmueller : Use SHStrDupW in IShellFolder2:: GetDetailsOf to allocate returned string. <thomas at reactsoft.com>
Rob Shearman : Fix the length calculation of the pidl in ILSaveToStream by using the helper function ILGetSize . <rob at codeweavers.com>
Rob Shearman : Fix a memory leak in Stream_WriteLocationInfo. <rob at codeweavers.com>
Lei Zhang : Don't crash if $HOME is not set. <thestig at google.com>
Alexandre Julliard : Pass some of the ShellExecute flags through InvokeCommand. <julliard at winehq.org>
Juan Lang : Don't overwrite the caller's buffer when doing a dde connection. <juan.lang at gmail.com>
Juan Lang : Remove a bad comment. <juan.lang at gmail.com>
Juan Lang : Use more restricted registry rights when quering values. <juan.lang at gmail.com>
Rob Shearman : Add a stub for LinkWindow_RegisterClass. <rob at codeweavers.com>
Rob Shearman : Add a stub for LinkWindow_UnregisterClass. <rob at codeweavers.com>
Michael Stefaniuc : Fix a mem leak on an error path. Found by Smatch. <mstefani at redhat.de>
Marcus Meissner : GetModuleFileNameW gets number of WCHARs not bytes. <marcus at jet.franken.de>
Lei Zhang : rename My Video to My Videos. <thestig at google.com>

svn path=/trunk/; revision=31071
This commit is contained in:
Christoph von Wittich 2007-12-08 13:03:24 +00:00
parent f8072187ba
commit 3d376e1acb
12 changed files with 73 additions and 47 deletions

View file

@ -65,7 +65,7 @@ BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL
lstrcpynW(szTemp + (bPrependDot?1:0), szExtension, MAX_EXTENSION_LENGTH);
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, 0x02000000, &hkey))
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hkey))
{
return FALSE;
}
@ -99,7 +99,7 @@ BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bP
lstrcpynA(szTemp + (bPrependDot?1:0), szExtension, MAX_EXTENSION_LENGTH);
if (RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, 0x02000000, &hkey))
if (RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hkey))
{
return FALSE;
}
@ -182,7 +182,7 @@ BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LP
TRACE("%p %s %s %p\n", hkeyClass, debugstr_w(szClass), debugstr_w(szVerb), szDest);
if (szClass)
RegOpenKeyExW(HKEY_CLASSES_ROOT, szClass, 0, 0x02000000, &hkeyClass);
RegOpenKeyExW(HKEY_CLASSES_ROOT, szClass, 0, KEY_READ, &hkeyClass);
if (!hkeyClass)
return FALSE;
ret = FALSE;
@ -280,7 +280,7 @@ BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_i
lstrcpynW(sTemp, szClass, MAX_PATH);
lstrcatW(sTemp, swDefaultIcon);
if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, 0x02000000, &hkey))
if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hkey))
{
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
@ -304,7 +304,7 @@ BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx
sprintf(sTemp, "%s\\DefaultIcon",szClass);
if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, 0x02000000, &hkey))
if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hkey))
{
ret = HCR_RegGetDefaultIconA(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);

View file

@ -416,7 +416,7 @@ BEGIN
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start Menu"
IDS_MYMUSIC "My Music"
IDS_MYVIDEO "My Video"
IDS_MYVIDEO "My Videos"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
@ -433,7 +433,7 @@ BEGIN
IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools"
IDS_COMMON_MUSIC "Documents\\My Music"
IDS_COMMON_PICTURES "Documents\\My Pictures"
IDS_COMMON_VIDEO "Documents\\My Video"
IDS_COMMON_VIDEO "Documents\\My Videos"
IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
IDS_DRIVE_FIXED "Local Disk"

View file

@ -341,7 +341,6 @@ HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST * ppPidl)
*/
HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl)
{
LPCITEMIDLIST pidl;
WORD wLen = 0;
HRESULT ret = E_FAIL;
@ -349,12 +348,7 @@ HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl)
IStream_AddRef (pStream);
pidl = pPidl;
while (pidl->mkid.cb)
{
wLen += sizeof(WORD) + pidl->mkid.cb;
pidl = ILGetNext(pidl);
}
wLen = ILGetSize(pPidl);
if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL)))
{

View file

@ -469,7 +469,7 @@ static HRESULT WINAPI RecycleBin_GetDefaultColumnState(IShellFolder2 *iface, UIN
{
RecycleBin *This = (RecycleBin *)iface;
TRACE("(%p, %d, %p)\n", This, iColumn, pcsFlags);
if (iColumn < 0 || iColumn >= COLUMNS_COUNT)
if (iColumn >= COLUMNS_COUNT)
return E_INVALIDARG;
*pcsFlags = RecycleBinColumns[iColumn].pcsFlags;
return S_OK;
@ -488,7 +488,7 @@ static HRESULT WINAPI RecycleBin_GetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIS
WCHAR buffer[MAX_PATH];
TRACE("(%p, %p, %d, %p)\n", This, pidl, iColumn, pDetails);
if (iColumn < 0 || iColumn >= COLUMNS_COUNT)
if (iColumn >= COLUMNS_COUNT)
return E_FAIL;
pDetails->fmt = RecycleBinColumns[iColumn].fmt;
pDetails->cxChar = RecycleBinColumns[iColumn].cxChars;
@ -527,15 +527,14 @@ static HRESULT WINAPI RecycleBin_GetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIS
}
pDetails->str.uType = STRRET_WSTR;
pDetails->str.u.pOleStr = StrDupW(buffer);
return (pDetails->str.u.pOleStr != NULL ? S_OK : E_OUTOFMEMORY);
return SHStrDupW(buffer, &pDetails->str.u.pOleStr);
}
static HRESULT WINAPI RecycleBin_MapColumnToSCID(IShellFolder2 *iface, UINT iColumn, SHCOLUMNID *pscid)
{
RecycleBin *This = (RecycleBin *)iface;
TRACE("(%p, %d, %p)\n", This, iColumn, pscid);
if (iColumn<0 || iColumn>=COLUMNS_COUNT)
if (iColumn>=COLUMNS_COUNT)
return E_INVALIDARG;
pscid->fmtid = *RecycleBinColumns[iColumn].fmtId;
pscid->pid = RecycleBinColumns[iColumn].pid;

View file

@ -213,6 +213,8 @@
251 stdcall -noname PathRemoveArgs(ptr) PathRemoveArgsAW
255 stdcall Options_RunDLLA(ptr ptr str long)
256 stdcall @(ptr ptr) SHELL32_256
258 stdcall -noname LinkWindow_RegisterClass()
259 stdcall -noname LinkWindow_UnregisterClass()
260 stdcall Options_RunDLLW(ptr ptr wstr long)
#299 stub Shl1632_ThunkData32
#300 stub Shl3216_ThunkData32

View file

@ -101,7 +101,7 @@ LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs)
argv=GlobalLock(hargv);
for (;;)
{
len = GetModuleFileNameW(0, (LPWSTR)(argv+1), size-sizeof(LPWSTR));
len = GetModuleFileNameW(0, (LPWSTR)(argv+1), (size-sizeof(LPWSTR))/sizeof(WCHAR));
if (!len)
{
GlobalFree(hargv);

View file

@ -993,6 +993,7 @@ static HRESULT Stream_WriteLocationInfo( IStream* stm, LPCWSTR path,
LOCATION_INFO *loc;
LPSTR szLabel, szPath, szFinalPath;
ULONG count = 0;
HRESULT hr;
TRACE("%p %s %p\n", stm, debugstr_w(path), volume);
@ -1034,7 +1035,10 @@ static HRESULT Stream_WriteLocationInfo( IStream* stm, LPCWSTR path,
szPath, path_size, NULL, NULL );
szFinalPath[0] = 0;
return IStream_Write( stm, loc, total_size, &count );
hr = IStream_Write( stm, loc, total_size, &count );
HeapFree(GetProcessHeap(), 0, loc);
return hr;
}
static EXP_DARWIN_LINK* shelllink_build_darwinid( LPCWSTR string, DWORD magic )
@ -2826,7 +2830,7 @@ ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )
memset( &sei, 0, sizeof sei );
sei.cbSize = sizeof sei;
sei.fMask = SEE_MASK_UNICODE | SEE_MASK_NOCLOSEPROCESS;
sei.fMask = SEE_MASK_UNICODE | (lpici->fMask & (SEE_MASK_NOASYNC|SEE_MASK_ASYNCOK|SEE_MASK_FLAG_NO_UI));
sei.lpFile = path;
sei.nShow = This->iShowCmd;
sei.lpIDList = This->pPidl;

View file

@ -2070,6 +2070,24 @@ HRESULT WINAPI SHSetLocalizedName(LPWSTR pszPath, LPCWSTR pszResModule, int idsR
return S_OK;
}
/*************************************************************************
* LinkWindow_RegisterClass (SHELL32.258)
*/
BOOL WINAPI LinkWindow_RegisterClass(void)
{
FIXME("()\n");
return TRUE;
}
/*************************************************************************
* LinkWindow_UnregisterClass (SHELL32.259)
*/
BOOL WINAPI LinkWindow_UnregisterClass(void)
{
FIXME("()\n");
return TRUE;
}
/*************************************************************************
* Options_RunDLL (SHELL32.@)
*/

View file

@ -2066,8 +2066,6 @@ static void _SHCreateSymbolicLinks(void)
}
}
HeapFree(GetProcessHeap(), 0, pszPersonal);
/* Create symbolic links for 'My Pictures', 'My Video' and 'My Music'. */
for (i=0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
/* Create the current 'My Whatever' folder and get it's unix path. */
@ -2095,7 +2093,12 @@ static void _SHCreateSymbolicLinks(void)
}
/* Last but not least, the Desktop folder */
strcpy(szDesktopTarget, pszHome);
if (pszHome)
strcpy(szDesktopTarget, pszHome);
else
strcpy(szDesktopTarget, pszPersonal);
HeapFree(GetProcessHeap(), 0, pszPersonal);
if (_SHAppendToUnixPath(szDesktopTarget, DesktopW) &&
!stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
{

View file

@ -708,6 +708,7 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface,
{
/* Neither a shell namespace extension nor a drive letter. */
ERR("Wrong pidl type\n");
CoTaskMemFree(pszPath);
return E_INVALIDARG;
}
}

View file

@ -632,11 +632,7 @@ UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpOperation,
* attached */
TRACE("found %s\n", debugstr_w(lpResult));
return 33;
/* Greater than 32 to indicate success FIXME According to the
* docs, I should be returning a handle for the
* executable. Does this mean I'm supposed to open the
* executable file or something? More RTFM, I guess... */
/* Greater than 32 to indicate success */
}
tok = p;
}
@ -756,7 +752,8 @@ static unsigned dde_connect(WCHAR* key, const WCHAR* start, WCHAR* ddeexec,
{
static const WCHAR wApplication[] = {'\\','a','p','p','l','i','c','a','t','i','o','n',0};
static const WCHAR wTopic[] = {'\\','t','o','p','i','c',0};
WCHAR * endkey = key + strlenW(key);
WCHAR regkey[256];
WCHAR * endkey = regkey + strlenW(key);
WCHAR app[256], topic[256], ifexec[256], res[256];
LONG applen, topiclen, ifexeclen;
WCHAR * exec;
@ -769,9 +766,10 @@ static unsigned dde_connect(WCHAR* key, const WCHAR* start, WCHAR* ddeexec,
unsigned ret = SE_ERR_NOASSOC;
BOOL unicode = !(GetVersion() & 0x80000000);
strcpyW(regkey, key);
strcpyW(endkey, wApplication);
applen = sizeof(app);
if (RegQueryValueW(HKEY_CLASSES_ROOT, key, app, &applen) != ERROR_SUCCESS)
if (RegQueryValueW(HKEY_CLASSES_ROOT, regkey, app, &applen) != ERROR_SUCCESS)
{
WCHAR command[1024], fullpath[MAX_PATH];
static const WCHAR wSo[] = { '.','s','o',0 };
@ -822,7 +820,7 @@ static unsigned dde_connect(WCHAR* key, const WCHAR* start, WCHAR* ddeexec,
strcpyW(endkey, wTopic);
topiclen = sizeof(topic);
if (RegQueryValueW(HKEY_CLASSES_ROOT, key, topic, &topiclen) != ERROR_SUCCESS)
if (RegQueryValueW(HKEY_CLASSES_ROOT, regkey, topic, &topiclen) != ERROR_SUCCESS)
{
static const WCHAR wSystem[] = {'S','y','s','t','e','m',0};
strcpyW(topic, wSystem);
@ -864,7 +862,7 @@ static unsigned dde_connect(WCHAR* key, const WCHAR* start, WCHAR* ddeexec,
}
strcpyW(endkey, wIfexec);
ifexeclen = sizeof(ifexec);
if (RegQueryValueW(HKEY_CLASSES_ROOT, key, ifexec, &ifexeclen) == ERROR_SUCCESS)
if (RegQueryValueW(HKEY_CLASSES_ROOT, regkey, ifexec, &ifexeclen) == ERROR_SUCCESS)
{
exec = ifexec;
}
@ -1172,7 +1170,7 @@ static HRESULT shellex_run_context_menu_default( IShellExtInit *obj,
memset( &ici, 0, sizeof ici );
ici.cbSize = sizeof ici;
ici.fMask = CMIC_MASK_UNICODE;
ici.fMask = CMIC_MASK_UNICODE | (sei->fMask & (SEE_MASK_NOASYNC|SEE_MASK_ASYNCOK|SEE_MASK_FLAG_NO_UI));
ici.nShow = sei->nShow;
ici.lpVerb = MAKEINTRESOURCEA( def );
ici.hwnd = sei->hwnd;
@ -1268,7 +1266,7 @@ static LONG ShellExecute_FromContextMenu( LPSHELLEXECUTEINFOW sei )
i = 0;
while ( 1 )
{
r = RegEnumKeyW( hkeycm, i++, szguid, 39 );
r = RegEnumKeyW( hkeycm, i++, szguid, sizeof(szguid)/sizeof(szguid[0]) );
if ( r != ERROR_SUCCESS )
break;

View file

@ -1541,18 +1541,25 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
/* free pidl array memory */
HeapFree(GetProcessHeap(), 0, pItems);
}
}
/* Initiate a refresh */
else if(plvKeyDown->wVKey == VK_F5)
{
IShellView_Refresh((IShellView*)This);
}
else
FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey);
}
break;
/* Initiate a refresh */
else if(plvKeyDown->wVKey == VK_F5)
{
IShellView_Refresh((IShellView*)This);
}
else if(plvKeyDown->wVKey == VK_BACK)
{
LPSHELLBROWSER lpSb;
if((lpSb = (LPSHELLBROWSER)SendMessageW(This->hWndParent, CWM_GETISHELLBROWSER, 0, 0)))
{
IShellBrowser_BrowseObject(lpSb, NULL, SBSP_PARENT);
}
}
else
FIXME("LVN_KEYDOWN key=0x%08x\n",plvKeyDown->wVKey);
}
break;
default:
TRACE("-- %p WM_COMMAND %x unhandled\n", This, lpnmh->code);