mirror of
https://github.com/reactos/reactos.git
synced 2025-05-18 16:51:18 +00:00
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:
parent
f8072187ba
commit
3d376e1acb
12 changed files with 73 additions and 47 deletions
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.@)
|
||||
*/
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue