Sync to Wine-20041201

Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.
Juan Lang <juan_lang@yahoo.com>
- Fix CSIDL_CONTROLS and CSIDL_PRINTERS PIDL types, and update tests now
  that they pass.
Robert Shearman <rob@codeweavers.com>
- Use more specific error codes than E_FAIL, where possible.
- Move vtable to end, give it the const modifier, and remove unneeded
  function declarations.
Juan Lang <juan_lang@yahoo.com>
- the correct registry location to override is User Shell Folders, not
  Shell Folders
- if User Shell Folders doesn't exist in HKCU, HKLM should be tried
- SHGetSpecialFolderPath should call SHGetFolderPath, not vice-versa
- the default values should be localizable
- some of the parameter checking and returned LPITEMIDLISTs were a bit
  off
- _SHExpandEnvironmentStrings should return input string if no % found
to expand, and should call ExpandEnvironmentStringsW if it doesn't
handle an environment variable directly.  Based on a patch from Dan
Kegel.
- Avoid copying invalid data on error.
- Update shell32's version to WinXP level.
Aric Stewart <aric@codeweavers.com>
- Implementation of PathCleanupSpec.
Fabrice Menard <menard.fabrice@wanadoo.fr>
- Some French translations added.
- Check the type of error returned by SHCreateDirectoryExW.
Rolf Kalbermatter <rolf.kalbermatter@citeng.com>
- Use SHCreateDirectoryEx function instead of doing explicit recursive
  directory creation.
- Fix bad memory allocation for unicode buffer.
- SHCreateDirectory should create intermediate directories if
  necessary.
- Remove extra boolean parameter in SHNotifyMoveFile as it is not
  used.
- Use in SHFileOperation the function SHNotifyCreateDirectory instead
  of SHCreateDirectoryEx as it does not anymore what is needed here.
- Fix several unsigned/signed mismatch warnings.
Alexandre Julliard <julliard@winehq.org>
- Avoid copying invalid data on error.
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
Tom Wickline <twickline@sitestar.net>
- Version resources cleanup.

svn path=/trunk/; revision=11970
This commit is contained in:
Gé van Geldorp 2004-12-06 23:55:46 +00:00
parent c1a2a1d3de
commit 12c35f6b5a
22 changed files with 2486 additions and 917 deletions

View file

@ -263,7 +263,7 @@ BOOL WINAPI SHChangeNotifyUpdateEntryList(DWORD unknown1, DWORD unknown2,
return -1;
}
static BOOL should_notify( LPITEMIDLIST changed, LPCITEMIDLIST watched, BOOL sub )
static BOOL should_notify( LPCITEMIDLIST changed, LPCITEMIDLIST watched, BOOL sub )
{
TRACE("%p %p %d\n", changed, watched, sub );
if ( !watched )
@ -280,7 +280,7 @@ static BOOL should_notify( LPITEMIDLIST changed, LPCITEMIDLIST watched, BOOL sub
*/
void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
{
LPITEMIDLIST Pidls[2];
LPCITEMIDLIST Pidls[2];
LPNOTIFICATIONLIST ptr;
UINT typeFlag = uFlags & SHCNF_TYPE;
@ -326,8 +326,8 @@ void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID
if (dwItem2) Pidls[1] = SHSimpleIDListFromPathW((LPCWSTR)dwItem2);
break;
case SHCNF_IDLIST:
Pidls[0] = (LPITEMIDLIST)dwItem1;
Pidls[1] = (LPITEMIDLIST)dwItem2;
Pidls[0] = (LPCITEMIDLIST)dwItem1;
Pidls[1] = (LPCITEMIDLIST)dwItem2;
break;
case SHCNF_PRINTERA:
case SHCNF_PRINTERW:
@ -404,8 +404,8 @@ void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID
/* if we allocated it, free it. The ANSI flag is also set in its Unicode sibling. */
if ((typeFlag & SHCNF_PATHA) || (typeFlag & SHCNF_PRINTERA))
{
if (Pidls[0]) SHFree(Pidls[0]);
if (Pidls[1]) SHFree(Pidls[1]);
if (Pidls[0]) SHFree((LPITEMIDLIST)Pidls[0]);
if (Pidls[1]) SHFree((LPITEMIDLIST)Pidls[1]);
}
}
@ -440,7 +440,7 @@ HANDLE WINAPI SHChangeNotification_Lock(
{
DWORD i;
LPNOTIFICATIONLIST node;
LPITEMIDLIST *idlist;
LPCITEMIDLIST *idlist;
TRACE("%p %08lx %p %p\n", hChange, dwProcessId, lppidls, lpwEventId);
@ -451,9 +451,9 @@ HANDLE WINAPI SHChangeNotification_Lock(
{
idlist = SHAlloc( sizeof(LPCITEMIDLIST *) * node->cidl );
for(i=0; i<node->cidl; i++)
idlist[i] = (LPITEMIDLIST)node->pidlSignaled;
idlist[i] = (LPCITEMIDLIST)node->pidlSignaled;
*lpwEventId = node->wSignalledEvent;
*lppidls = idlist;
*lppidls = (LPITEMIDLIST*)idlist;
node->wSignalledEvent = 0;
}
else

View file

@ -76,6 +76,7 @@ LPSTR _dbg_ILGetTextPointer(LPCITEMIDLIST pidl)
{
case PT_GUID:
case PT_SHELLEXT:
case PT_YAGUID:
return NULL;
case PT_DRIVE:
@ -88,7 +89,6 @@ LPSTR _dbg_ILGetTextPointer(LPCITEMIDLIST pidl)
case PT_FOLDER1:
case PT_VALUE:
case PT_IESPECIAL1:
case PT_RAS_FOLDER:
case PT_IESPECIAL2:
return (LPSTR)&(pdata->u.file.szNames);
@ -115,7 +115,6 @@ LPSTR _dbg_ILGetSTextPointer(LPCITEMIDLIST pidl)
case PT_FOLDER:
case PT_VALUE:
case PT_IESPECIAL1:
case PT_RAS_FOLDER:
case PT_IESPECIAL2:
return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1);
@ -250,7 +249,7 @@ BOOL pcheck (LPCITEMIDLIST pidl)
case PT_NETPROVIDER:
case PT_NETWORK:
case PT_IESPECIAL1:
case PT_RAS_FOLDER:
case PT_YAGUID:
case PT_IESPECIAL2:
case PT_SHARE:
break;
@ -263,7 +262,7 @@ BOOL pcheck (LPCITEMIDLIST pidl)
memset(szTemp, ' ', BYTES_PRINTED*4 + 1);
for ( i = 0; (i<pidltemp->mkid.cb) && (i<BYTES_PRINTED); i++)
{
c = ((unsigned char *)pidltemp)[i];
c = ((const unsigned char *)pidltemp)[i];
szTemp[i*3+0] = ((c>>4)>9)? (c>>4)+55 : (c>>4)+48;
szTemp[i*3+1] = ((0x0F&c)>9)? (0x0F&c)+55 : (0x0F&c)+48;

View file

@ -313,7 +313,6 @@ BOOL WINAPI Shell_GetImageList(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList)
return TRUE;
}
/*************************************************************************
* PidlToSicIndex [INTERNAL]
*
@ -354,6 +353,7 @@ BOOL PidlToSicIndex (
*pIndex = 0;
return ret;
}
/*************************************************************************

View file

@ -42,42 +42,11 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVOID *ppvObj);
static ULONG WINAPI IStream_fnAddRef(IStream *iface);
static ULONG WINAPI IStream_fnRelease(IStream *iface);
static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG* pcbRead);
static HRESULT WINAPI IStream_fnWrite (IStream * iface, const void* pv, ULONG cb, ULONG* pcbWritten);
static HRESULT WINAPI IStream_fnSeek (IStream * iface, LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER* plibNewPosition);
static HRESULT WINAPI IStream_fnSetSize (IStream * iface, ULARGE_INTEGER libNewSize);
static HRESULT WINAPI IStream_fnCopyTo (IStream * iface, IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER* pcbRead, ULARGE_INTEGER* pcbWritten);
static HRESULT WINAPI IStream_fnCommit (IStream * iface, DWORD grfCommitFlags);
static HRESULT WINAPI IStream_fnRevert (IStream * iface);
static HRESULT WINAPI IStream_fnLockRegion (IStream * iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
static HRESULT WINAPI IStream_fnUnlockRegion (IStream * iface, ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
static HRESULT WINAPI IStream_fnStat (IStream * iface, STATSTG* pstatstg, DWORD grfStatFlag);
static HRESULT WINAPI IStream_fnClone (IStream * iface, IStream** ppstm);
static IStreamVtbl stvt =
{
IStream_fnQueryInterface,
IStream_fnAddRef,
IStream_fnRelease,
IStream_fnRead,
IStream_fnWrite,
IStream_fnSeek,
IStream_fnSetSize,
IStream_fnCopyTo,
IStream_fnCommit,
IStream_fnRevert,
IStream_fnLockRegion,
IStream_fnUnlockRegion,
IStream_fnStat,
IStream_fnClone
};
static const IStreamVtbl stvt;
typedef struct
{ IStreamVtbl *lpvtst;
{
const IStreamVtbl *lpvtst;
DWORD ref;
HANDLE handle;
} ISHFileStream;
@ -110,12 +79,12 @@ HRESULT CreateStreamOnFile (LPCWSTR pszFilename, DWORD grfMode, IStream ** ppstm
handle = CreateFileW( pszFilename, access, FILE_SHARE_READ, NULL, creat, 0, NULL );
if( handle == INVALID_HANDLE_VALUE )
return E_FAIL;
return HRESULT_FROM_WIN32(GetLastError());
fstr = (ISHFileStream*)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,sizeof(ISHFileStream));
if( !fstr )
return E_FAIL;
return E_OUTOFMEMORY;
fstr->lpvtst=&stvt;
fstr->ref = 1;
fstr->handle = handle;
@ -192,7 +161,7 @@ static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG
return STG_E_INVALIDPOINTER;
if ( ! ReadFile( This->handle, pv, cb, pcbRead, NULL ) )
return E_FAIL;
return S_FALSE;
return S_OK;
}
@ -306,3 +275,22 @@ static HRESULT WINAPI IStream_fnClone (IStream * iface, IStream** ppstm)
return E_NOTIMPL;
}
static const IStreamVtbl stvt =
{
IStream_fnQueryInterface,
IStream_fnAddRef,
IStream_fnRelease,
IStream_fnRead,
IStream_fnWrite,
IStream_fnSeek,
IStream_fnSetSize,
IStream_fnCopyTo,
IStream_fnCommit,
IStream_fnRevert,
IStream_fnLockRegion,
IStream_fnUnlockRegion,
IStream_fnStat,
IStream_fnClone
};

View file

@ -129,7 +129,7 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
break;
}
if (!*(LPWORD)pidl || type == ILGDN_FORPARSING)
if (!*(const WORD*)pidl || type == ILGDN_FORPARSING)
{
ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
if (SUCCEEDED(ret))
@ -779,7 +779,7 @@ UINT WINAPI ILGetSize(LPCITEMIDLIST pidl)
if (pidl)
{ while (si->cb)
{ len += si->cb;
si = (LPSHITEMID)(((LPBYTE)si)+si->cb);
si = (LPCSHITEMID)(((const BYTE*)si)+si->cb);
}
len += 2;
}
@ -814,7 +814,7 @@ LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
len = pidl->mkid.cb;
if (len)
{
pidl = (LPITEMIDLIST) (((LPBYTE)pidl)+len);
pidl = (LPCITEMIDLIST) (((const BYTE*)pidl)+len);
TRACE("-- %p\n", pidl);
return (LPITEMIDLIST)pidl;
}
@ -1493,7 +1493,7 @@ LPITEMIDLIST _ILCreateControlPanel()
TRACE("()\n");
if (parent)
{
LPITEMIDLIST cpl = _ILCreateGuid(PT_GUID, &CLSID_ControlPanel);
LPITEMIDLIST cpl = _ILCreateGuid(PT_SHELLEXT, &CLSID_ControlPanel);
if (cpl)
{
@ -1512,7 +1512,7 @@ LPITEMIDLIST _ILCreatePrinters()
TRACE("()\n");
if (parent)
{
LPITEMIDLIST printers = _ILCreateGuid(PT_GUID, &CLSID_Printers);
LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers);
if (printers)
{
@ -1538,7 +1538,7 @@ LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid)
{
LPITEMIDLIST pidlOut;
if (type == PT_SHELLEXT || type == PT_GUID)
if (type == PT_SHELLEXT || type == PT_GUID || type == PT_YAGUID)
{
pidlOut = _ILAlloc(type, sizeof(GUIDStruct));
if (pidlOut)
@ -1757,7 +1757,7 @@ BOOL _ILIsPidlSimple ( LPCITEMIDLIST pidl)
if(! _ILIsDesktop(pidl)) /* pidl=NULL or mkid.cb=0 */
{
WORD len = pidl->mkid.cb;
LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((LPBYTE)pidl) + len );
LPCITEMIDLIST pidlnext = (LPCITEMIDLIST) (((const BYTE*)pidl) + len );
if (pidlnext->mkid.cb)
ret = FALSE;
}
@ -1883,6 +1883,7 @@ LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
{
case PT_GUID:
case PT_SHELLEXT:
case PT_YAGUID:
return NULL;
case PT_DRIVE:
@ -1895,7 +1896,6 @@ LPSTR _ILGetTextPointer(LPCITEMIDLIST pidl)
case PT_FOLDER1:
case PT_VALUE:
case PT_IESPECIAL1:
case PT_RAS_FOLDER:
case PT_IESPECIAL2:
return (LPSTR)&(pdata->u.file.szNames);
@ -1926,7 +1926,6 @@ LPSTR _ILGetSTextPointer(LPCITEMIDLIST pidl)
case PT_FOLDER:
case PT_VALUE:
case PT_IESPECIAL1:
case PT_RAS_FOLDER:
case PT_IESPECIAL2:
return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1);

View file

@ -71,6 +71,7 @@
* net provider 0x46 network
* whole network 0x47 network (5)
* MSITStore 0x61 htmlhlp (7)
* printers/ras connections 0x70 guid
* history/favorites 0xb1 file
* share 0xc3 network (6)
*
@ -101,7 +102,7 @@
#define PT_NETPROVIDER 0x46
#define PT_NETWORK 0x47
#define PT_IESPECIAL1 0x61
#define PT_RAS_FOLDER 0x70
#define PT_YAGUID 0x70 /* yet another guid.. */
#define PT_IESPECIAL2 0xb1
#define PT_SHARE 0xc3
@ -200,8 +201,8 @@ BOOL _ILIsCPanelStruct (LPCITEMIDLIST pidl);
*/
LPITEMIDLIST _ILAlloc(PIDLTYPE type, size_t size);
/* Creates a PIDL with guid format and type type, which must be either PT_GUID
* or PT_SHELLEXT.
/* Creates a PIDL with guid format and type type, which must be one of PT_GUID,
* PT_SHELLEXT, or PT_YAGUID.
*/
LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid);

View file

@ -29,6 +29,7 @@
#include "ole2.h"
#include "shlguid.h"
#include "shell32_main.h"
#include "wine/debug.h"
@ -518,6 +519,8 @@ HRESULT WINAPI SHELL32_DllRegisterServer()
hr = register_coclasses(coclass_list);
if (SUCCEEDED(hr))
hr = register_interfaces(interface_list);
if (SUCCEEDED(hr))
hr = SHELL_RegisterShellFolders();
return hr;
}

View file

@ -162,7 +162,7 @@
168 stdcall SHCreatePropSheetExtArray(long str long)
169 stdcall SHDestroyPropSheetExtArray(long)
170 stdcall SHReplaceFromPropSheetExtArray(long long long long)
171 stdcall PathCleanupSpec(ptr ptr) PathCleanupSpecAW
171 stdcall PathCleanupSpec(ptr ptr)
172 stdcall SHCreateLinks(long str ptr long ptr)
173 stdcall SHValidateUNC(long long long)
174 stdcall SHCreateShellFolderViewEx (ptr ptr)

View file

@ -187,3 +187,35 @@ STRINGTABLE DISCARDABLE
IDS_SHUTDOWN_TITLE "Shutdown"
IDS_SHUTDOWN_PROMPT "Do you want to shutdown?"
}
/* shell folder path default values */
STRINGTABLE DISCARDABLE
{
IDS_PROGRAMS "Start Menu\\Programs"
IDS_PERSONAL "My Documents"
IDS_FAVORITES "Favorites"
IDS_STARTUP "Start Menu\\Programs\\StartUp"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start Menu"
IDS_MYMUSIC "My Documents\\My Music"
IDS_MYVIDEO "My Documents\\My Video"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "PrintHood"
IDS_LOCAL_APPDATA "Local Settings\\Application Data"
IDS_INTERNET_CACHE "Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "History"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "My Documents\\My Pictures"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Documents"
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_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
}

View file

@ -190,3 +190,35 @@ STRINGTABLE DISCARDABLE
IDS_SHUTDOWN_TITLE "Arrêter"
IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS?"
}
/* shell folder path default values */
STRINGTABLE DISCARDABLE
{
IDS_PROGRAMS "Menu Démarrer\\Programmes"
IDS_PERSONAL "Mes documents"
IDS_FAVORITES "Favoris"
IDS_STARTUP "Menu Démarrer\\Programmes\\Démarrage"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Menu Démarrer"
IDS_MYMUSIC "Mes documents\\Ma musique"
IDS_MYVIDEO "Mes documents\\Mes vidéos"
IDS_DESKTOPDIRECTORY "Bureau"
IDS_NETHOOD "Voisinage Réseau"
IDS_TEMPLATES "Modèles"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "Voisinage d'impression"
IDS_LOCAL_APPDATA "Local Settings\\Application Data"
IDS_INTERNET_CACHE "Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Historique"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "Mes documents\\Mes images"
IDS_PROGRAM_FILES_COMMON "Program Files\\Fichiers communs"
IDS_COMMON_DOCUMENTS "Documents"
IDS_ADMINTOOLS "Menu Démarrer\\Programmes\\Outils d'administration"
IDS_COMMON_MUSIC "Documents\\Ma musique"
IDS_COMMON_PICTURES "Documents\\Mes images"
IDS_COMMON_VIDEO "Documents\\Mes vidéos"
IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
}

View file

@ -220,4 +220,7 @@ UINT SHELL_FindExecutable(LPCWSTR lpPath, LPCWSTR lpFile, LPCWSTR lpOperation,
extern WCHAR swShell32Name[MAX_PATH];
/* Default shell folder value registration */
HRESULT SHELL_RegisterShellFolders(void);
#endif

View file

@ -761,7 +761,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
SHGetPathFromIDListA((LPCITEMIDLIST) pv, doc_name);
}
else {
lstrcpyA(doc_name, (LPSTR) pv);
lstrcpyA(doc_name, (LPCSTR) pv);
}
TRACE("full document name %s\n", doc_name);
PathStripPathA(doc_name);

File diff suppressed because it is too large Load diff

View file

@ -3,8 +3,8 @@
*
* Copyright 2000 Juergen Schmied
* Copyright 2002 Andriy Palamarchuk
* Copyright 2002 Dietrich Teickner (from Odin)
* Copyright 2002 Rolf Kalbermatter
* Copyright 2004 Dietrich Teickner (from Odin)
* Copyright 2004 Rolf Kalbermatter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -56,15 +56,16 @@ static const WCHAR wWildcardFile[] = {'*',0};
static const WCHAR wWildcardChars[] = {'*','?',0};
static const WCHAR wBackslash[] = {'\\',0};
static BOOL SHELL_DeleteDirectoryW(LPCWSTR pszDir, BOOL bShowUI);
static BOOL SHELL_DeleteDirectoryW(LPCWSTR path, BOOL bShowUI);
static DWORD SHNotifyCreateDirectoryA(LPCSTR path, LPSECURITY_ATTRIBUTES sec);
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec);
static DWORD SHNotifyRemoveDirectoryA(LPCSTR path);
static DWORD SHNotifyRemoveDirectoryW(LPCWSTR path);
static DWORD SHNotifyDeleteFileA(LPCSTR path);
static DWORD SHNotifyDeleteFileW(LPCWSTR path);
static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest, BOOL bRenameIfExists);
static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bRenameIfExists);
static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest);
static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists);
static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly);
typedef struct
{
@ -130,14 +131,14 @@ BOOL SHELL_ConfirmDialogW(int nKindOfDialog, LPCWSTR szDir)
return (IDOK == MessageBoxW(GetActiveWindow(), szBuffer, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
}
static DWORD SHELL32_AnsiToUnicodeBuf(LPCSTR aPath, LPWSTR *wPath, DWORD minlen)
static DWORD SHELL32_AnsiToUnicodeBuf(LPCSTR aPath, LPWSTR *wPath, DWORD minChars)
{
DWORD len = MultiByteToWideChar(CP_ACP, 0, aPath, -1, NULL, 0);
if (len < minlen)
len = minlen;
if (len < minChars)
len = minChars;
*wPath = HeapAlloc(GetProcessHeap(), 0, len);
*wPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
if (*wPath)
{
MultiByteToWideChar(CP_ACP, 0, aPath, -1, *wPath, len);
@ -152,9 +153,10 @@ static void SHELL32_FreeUnicodeBuf(LPWSTR wPath)
}
/**************************************************************************
* SHELL_DeleteDirectoryA() [internal]
* SHELL_DeleteDirectory() [internal]
*
* like rm -r
* Asks for confirmation when bShowUI is true and deletes the directory and
* all its subdirectories and files if necessary.
*/
BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI)
{
@ -292,7 +294,6 @@ BOOL WINAPI Win32CreateDirectoryAW(LPCVOID path, LPSECURITY_ATTRIBUTES sec)
* Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be ANSI.
* This is Unicode on NT/2000
*/
static DWORD SHNotifyRemoveDirectoryA(LPCSTR path)
{
LPWSTR wPath;
@ -357,7 +358,6 @@ BOOL WINAPI Win32RemoveDirectoryAW(LPCVOID path)
* Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be ANSI.
* This is Unicode on NT/2000
*/
static DWORD SHNotifyDeleteFileA(LPCSTR path)
{
LPWSTR wPath;
@ -416,35 +416,29 @@ DWORD WINAPI Win32DeleteFileAW(LPCVOID path)
* PARAMS
* src [I] path to source file to move
* dest [I] path to target file to move to
* bRename [I] if TRUE, the target file will be renamed if a
* file with this name already exists
*
* RETURNS
* ERORR_SUCCESS if successful
*/
static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest, BOOL bRename)
static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest)
{
BOOL ret;
TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bRename ? "renameIfExists" : "");
TRACE("(%s %s)\n", debugstr_w(src), debugstr_w(dest));
ret = MoveFileW(src, dest);
if (!ret)
{
/* Source file may be write protected or a system file */
DWORD dwAttr = GetFileAttributesW(src);
if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM))
if (SetFileAttributesW(src, dwAttr & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)))
ret = MoveFileW(src, dest);
DWORD dwAttr;
if (!ret && bRename)
dwAttr = SHFindAttrW(dest, FALSE);
if (INVALID_FILE_ATTRIBUTES == dwAttr)
{
/* Destination file probably exists */
dwAttr = GetFileAttributesW(dest);
if (dwAttr != INVALID_FILE_ATTRIBUTES)
{
FIXME("Rename on move to existing file not implemented!\n");
}
/* Source file may be write protected or a system file */
dwAttr = GetFileAttributesW(src);
if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM))
if (SetFileAttributesW(src, dwAttr & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_SYSTEM)))
ret = MoveFileW(src, dest);
}
}
if (ret)
@ -461,30 +455,21 @@ static DWORD SHNotifyMoveFileW(LPCWSTR src, LPCWSTR dest, BOOL bRename)
* Copies a file. Also triggers a change notify if one exists.
*
* PARAMS
* src [I] path to source file to move
* dest [I] path to target file to move to
* bRename [I] if TRUE, the target file will be renamed if a
* file with this name already exists
* src [I] path to source file to move
* dest [I] path to target file to move to
* bFailIfExists [I] if TRUE, the target file will not be overwritten if
* a file with this name already exists
*
* RETURNS
* ERROR_SUCCESS if successful
*/
static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bRename)
static DWORD SHNotifyCopyFileW(LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists)
{
BOOL ret;
TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bRename ? "renameIfExists" : "");
TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bFailIfExists ? "failIfExists" : "");
ret = CopyFileW(src, dest, TRUE);
if (!ret && bRename)
{
/* Destination file probably exists */
DWORD dwAttr = GetFileAttributesW(dest);
if (dwAttr != INVALID_FILE_ATTRIBUTES)
{
FIXME("Rename on copy to existing file not implemented!\n");
}
}
ret = CopyFileW(src, dest, bFailIfExists);
if (ret)
{
SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, dest, NULL);
@ -546,7 +531,9 @@ DWORD WINAPI SHCreateDirectory(HWND hWnd, LPCVOID path)
* ERROR_FILENAME_EXCED_RANGE if the filename was to long to process
*
* FIXME: Not implemented yet;
* SHCreateDirectoryEx also verifies that the files will be visible. If not:
* SHCreateDirectoryEx also verifies that the files in the directory will be visible
* if the path is a network path to deal with network drivers which might have a limited
* but unknown maximum path length. If not:
*
* If hWnd is set to a valid window handle, a message box is displayed warning
* the user that the files may not be accessible. If the user chooses not to
@ -591,15 +578,76 @@ int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES s
ret != ERROR_ALREADY_EXISTS &&
ret != ERROR_FILENAME_EXCED_RANGE)
{
/* handling network file names?
lstrcpynW(pathName, path, MAX_PATH);
lpStr = PathAddBackslashW(pathName);*/
FIXME("Semi-stub, non zero hWnd should be used somehow?\n");
WCHAR *pEnd, *pSlash, szTemp[MAX_PATH + 1]; /* extra for PathAddBackslash() */
lstrcpynW(szTemp, path, MAX_PATH);
pEnd = PathAddBackslashW(szTemp);
pSlash = szTemp + 3;
while (*pSlash)
{
while (*pSlash && *pSlash != '\\')
pSlash = CharNextW(pSlash);
if (*pSlash)
{
*pSlash = 0; /* terminate path at separator */
ret = SHNotifyCreateDirectoryW(szTemp, pSlash + 1 == pEnd ? sec : NULL);
}
*pSlash++ = '\\'; /* put the separator back */
}
}
if (ret && hWnd && (ERROR_CANCELLED != ret))
{
/* We failed and should show a dialog box */
FIXME("Show system error message, creating path %s, failed with error %d\n", debugstr_w(path), ret);
ret = ERROR_CANCELLED; /* Error has been already presented to user (not really yet!) */
}
}
return ret;
}
/*************************************************************************
* SHFindAttrW [internal]
*
* Get the Attributes for a file or directory. The difference to GetAttributes()
* is that this function will also work for paths containing wildcard characters
* in its filename.
* PARAMS
* path [I] path of directory or file to check
* fileOnly [I] TRUE if only files should be found
*
* RETURNS
* INVALID_FILE_ATTRIBUTES if the path does not exist, the actual attributes of
* the first file or directory found otherwise
*/
static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly)
{
WIN32_FIND_DATAW wfd;
BOOL b_FileMask = fileOnly && (NULL != StrPBrkW(pName, wWildcardChars));
DWORD dwAttr = INVALID_FILE_ATTRIBUTES;
HANDLE hFind = FindFirstFileW(pName, &wfd);
TRACE("%s %d\n", debugstr_w(pName), fileOnly);
if (INVALID_HANDLE_VALUE != hFind)
{
do
{
if (b_FileMask && IsAttribDir(wfd.dwFileAttributes))
continue;
dwAttr = wfd.dwFileAttributes;
break;
}
while (FindNextFileW(hFind, &wfd));
FindClose(hFind);
}
return dwAttr;
}
/*************************************************************************
*
* SHFileStrICmp HelperFunction for SHFileOperationW
@ -690,7 +738,7 @@ BOOL SHELL_FileNamesMatch(LPCWSTR pszFiles1, LPCWSTR pszFiles2, BOOL bOnlySrc)
{
if (NULL == StrPBrkW(pszFiles1, wWildcardChars))
{
if (-1 == GetFileAttributesW(pszFiles1))
if (INVALID_FILE_ATTRIBUTES == GetFileAttributesW(pszFiles1))
return FALSE;
}
pszFiles1 += lstrlenW(pszFiles1) + 1;
@ -1070,7 +1118,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
b_SameTailName = SHFileStrICmpW(pToFile, pFromFile, NULL, NULL);
ToPathAttr = ToAttr = GetFileAttributesW(pTempTo);
if (!b_Mask && (ToAttr == -1) && (pToFile))
if (!b_Mask && (ToAttr == INVALID_FILE_ATTRIBUTES) && (pToFile))
{
pToFile[0] = '\0';
ToPathAttr = GetFileAttributesW(pTempTo);
@ -1091,7 +1139,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
retCode=0x2;
goto shfileop_end;
}
if (-1 == ToPathAttr)
if (INVALID_FILE_ATTRIBUTES == ToPathAttr)
{
retCode = 0x75;
goto shfileop_end;
@ -1102,7 +1150,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
goto shfileop_end;
}
/* we use SHNotifyMoveFile() instead MoveFileW */
if (SHNotifyMoveFileW(pTempFrom, pTempTo, nFileOp.fFlags & FOF_RENAMEONCOLLISION) != ERROR_SUCCESS)
if (SHNotifyMoveFileW(pTempFrom, pTempTo) != ERROR_SUCCESS)
{
/* we need still the value for the returncode, we use the mostly assumed */
retCode = 0xb7;
@ -1146,16 +1194,16 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
continue;
/* only FO_COPY/FO_MOVE without mask, all others are (must be) solved */
if (IsAttribDir(wfd.dwFileAttributes) && (ToAttr == -1))
if (IsAttribDir(wfd.dwFileAttributes) && (ToAttr == INVALID_FILE_ATTRIBUTES))
{
if (pToFile)
{
pToFile[0] = '\0';
ToPathAttr = GetFileAttributesW(pTempTo);
if ((ToPathAttr == -1) && b_ToValid)
if ((ToPathAttr == INVALID_FILE_ATTRIBUTES) && b_ToValid)
{
/* create dir must be here, sample target D:\y\ *.* create with RC=10003 */
if (SHCreateDirectoryExW(NULL, pTempTo, NULL))
if (SHNotifyCreateDirectoryW(pTempTo, NULL))
{
retCode = 0x73;/* value unknown */
goto shfileop_end;
@ -1208,7 +1256,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
}
/* singlesource + no mask */
if (-1 == (ToAttr & ToPathAttr))
if (INVALID_FILE_ATTRIBUTES == (ToAttr & ToPathAttr))
{
/* Target-dir does not exist, and cannot be created */
retCode=0x75;
@ -1219,7 +1267,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
{
case FO_MOVE:
pToFile = NULL;
if ((ToAttr == -1) && SHFileStrICmpW(pTempFrom, pTempTo, pFromFile, NULL))
if ((ToAttr == INVALID_FILE_ATTRIBUTES) && SHFileStrICmpW(pTempFrom, pTempTo, pFromFile, NULL))
{
nFileOp.wFunc = ((level+1)<<4) + FO_RENAME;
}
@ -1253,7 +1301,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
}
if (IsAttribDir((ToAttr & wfd.dwFileAttributes)))
{
if (IsAttribDir(ToAttr) || !SHCreateDirectoryExW(NULL,pTempTo, NULL))
if (IsAttribDir(ToAttr) || !SHNotifyCreateDirectoryW(pTempTo, NULL))
{
/* ??? nFileOp.fFlags = (nFileOp.fFlags | FOF_MULTIDESTFILES); */
SHFileStrCpyCatW(pTempFrom, NULL, wWildcardFile);
@ -1274,7 +1322,7 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
retCode = 0x73;
goto shfileop_end;
}
if (SHNotifyCopyFileW(pTempFrom, pTempTo, nFileOp.fFlags & FOF_RENAMEONCOLLISION) != ERROR_SUCCESS)
if (SHNotifyCopyFileW(pTempFrom, pTempTo, TRUE) != ERROR_SUCCESS)
{
retCode = 0x77; /* value unknown */
goto shfileop_end;

View file

@ -143,7 +143,7 @@ LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut)
while (*pszTail && (*pszTail != (WCHAR) '\\'))
pszTail++;
dwCopy = (WCHAR *) pszTail - (WCHAR *) pszNext + 1;
dwCopy = (const WCHAR *) pszTail - (const WCHAR *) pszNext + 1;
lstrcpynW (pszOut, pszNext, (dwOut < dwCopy) ? dwOut : dwCopy);
if (*pszTail)

View file

@ -897,15 +897,15 @@ BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey)
{
if (SHELL_OsIsUnicode())
{
if (lstrcmpiW((LPWSTR)inpRegKey, strRegistryPolicyW) &&
lstrcmpiW((LPWSTR)inpRegKey, strPolicyW))
if (lstrcmpiW((LPCWSTR)inpRegKey, strRegistryPolicyW) &&
lstrcmpiW((LPCWSTR)inpRegKey, strPolicyW))
/* doesn't match, fail */
return 0;
}
else
{
if (lstrcmpiA((LPSTR)inpRegKey, strRegistryPolicyA) &&
lstrcmpiA((LPSTR)inpRegKey, strPolicyA))
if (lstrcmpiA((LPCSTR)inpRegKey, strRegistryPolicyA) &&
lstrcmpiA((LPCSTR)inpRegKey, strPolicyA))
/* doesn't match, fail */
return 0;
}

View file

@ -56,6 +56,34 @@
#define IDS_SHUTDOWN_TITLE 42
#define IDS_SHUTDOWN_PROMPT 43
#define IDS_PROGRAMS 45
#define IDS_PERSONAL 46
#define IDS_FAVORITES 47
#define IDS_STARTUP 48
#define IDS_RECENT 49
#define IDS_SENDTO 50
#define IDS_STARTMENU 51
#define IDS_MYMUSIC 52
#define IDS_MYVIDEO 53
#define IDS_DESKTOPDIRECTORY 54
#define IDS_NETHOOD 55
#define IDS_TEMPLATES 56
#define IDS_APPDATA 57
#define IDS_PRINTHOOD 58
#define IDS_LOCAL_APPDATA 59
#define IDS_INTERNET_CACHE 60
#define IDS_COOKIES 61
#define IDS_HISTORY 62
#define IDS_PROGRAM_FILES 63
#define IDS_MYPICTURES 64
#define IDS_PROGRAM_FILES_COMMON 65
#define IDS_COMMON_DOCUMENTS 66
#define IDS_ADMINTOOLS 67
#define IDS_COMMON_MUSIC 68
#define IDS_COMMON_PICTURES 69
#define IDS_COMMON_VIDEO 70
#define IDS_CDBURN_AREA 71
/* browse for folder dialog box */
#define IDD_STATUS 0x3743
#define IDD_TITLE 0x3742

View file

@ -429,14 +429,6 @@ BOOL WINAPI PathYetAnotherMakeUniqueName(
LPCWSTR lpszShortName,
LPCWSTR lpszLongName);
/* PathCleanupSpec return values */
#define PCS_REPLACEDCHARS 0x00000001
#define PCS_REMOVEDCHARS 0x00000002
#define PCS_SHORTENED 0x00000004
#define PCS_PATHTOOLONG 0x80000008
DWORD WINAPI PathCleanupSpecAW(LPCVOID lpszPath, LPVOID lpszFile);
BOOL WINAPI PathQualifyA(LPCSTR path);
BOOL WINAPI PathQualifyW(LPCWSTR path);
#define PathQualify WINELIB_NAME_AW(PathQualify)

View file

@ -18,11 +18,11 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define WINE_FILEVERSION_MAJOR 4
#define WINE_FILEVERSION_MINOR 72
#define WINE_FILEVERSION_BUILD 3110
#define WINE_FILEVERSION_MAJOR 6
#define WINE_FILEVERSION_MINOR 0
#define WINE_FILEVERSION_BUILD 2600
#define WINE_FILEVERSION_PLATFORMID 1
/* FIXME: when libs/wpp gets fixed to support concatenation we can remove
* this and define it in version.rc */
#define WINE_FILEVERSION "4.72.3110.1"
#define WINE_FILEVERSION "6.0.2600.1"

View file

@ -16,9 +16,9 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define WINE_FILEVERSION 4,0,0,0
#define WINE_FILEVERSION_STR "4.0"
#define WINE_FILEDESCRIPTION_STR "Wine core dll"
#define WINE_FILENAME_STR "shell.dll"
#define WINE_FILEVERSION 4,0,0,0
#define WINE_FILEVERSION_STR "4.0"
#include "wine/wine_common_ver.rc"

File diff suppressed because it is too large Load diff

View file

@ -273,6 +273,9 @@ extern "C" {
#define CMIC_VALID_SEE_FLAGS SEE_VALID_CMIC_FLAGS
#define GIL_OPENICON 1
#define GIL_FORSHELL 2
#define GIL_ASYNC 32
#define GIL_DEFAULTICON 64
#define GIL_FORSHORTCUT 128
#define GIL_SIMULATEDOC 1
#define GIL_PERINSTANCE 2
#define GIL_PERCLASS 4
@ -377,6 +380,11 @@ extern "C" {
#define SHCNF_PATH SHCNF_PATHA
#define SHCNF_PRINTER SHCNF_PRINTERA
#endif
#define PCS_FATAL 0x80000000
#define PCS_REPLACEDCHAR 0x00000001
#define PCS_REMOVEDCHAR 0x00000002
#define PCS_TRUNCATED 0x00000004
#define PCS_PATHTOOLONG 0x00000008
typedef ULONG SFGAOF;
typedef DWORD SHGDNF;
@ -431,6 +439,10 @@ typedef enum tagSHGDN {
SHGDN_FORADDRESSBAR=0x4000,
SHGDN_FORPARSING=0x8000
} SHGNO;
typedef enum {
SHGFP_TYPE_CURRENT = 0,
SHGFP_TYPE_DEFAULT = 1
} SHGFP_TYPE;
typedef enum tagSHCONTF {
SHCONTF_FOLDERS = 32,
SHCONTF_NONFOLDERS = 64,