Sync to Wine-20050211
James Hawkins <truiken(a)gmail.com>
- Use Interlocked* instead of ++/-- in AddRef/Release.
- Use only stored result of Interlocked* in AddRef/Release.
- Expand TRACEs to display the ref count.
Francois Gouget <fgouget(a)free.fr>
- Assorted spelling fixes.
Mike McCormack <mike(a)codeweavers.com>
- Implement GetAdvise and SetAdvise.
Henning Gerhardt <henning.gerhardt(a)web.de>
- A small spelling fix and a small update (thank to Andreas Mohr).
- Update German resources.
Joris Huizer <jorishuizer(a)planet.nl>
- add file_operation_delete
- add file_operation_checkFlags
- use these in SHFileOperationW replacing inline code
Modified: trunk/reactos/lib/shell32/autocomplete.c
Modified: trunk/reactos/lib/shell32/cpanelfolder.c
Modified: trunk/reactos/lib/shell32/dataobject.c
Modified: trunk/reactos/lib/shell32/dragdrophelper.c
Modified: trunk/reactos/lib/shell32/enumidlist.c
Modified: trunk/reactos/lib/shell32/folders.c
Modified: trunk/reactos/lib/shell32/memorystream.c
Modified: trunk/reactos/lib/shell32/pidl.c
Modified: trunk/reactos/lib/shell32/shell32_De.rc
Modified: trunk/reactos/lib/shell32/shelllink.c
Modified: trunk/reactos/lib/shell32/shellole.c
Modified: trunk/reactos/lib/shell32/shellord.c
Modified: trunk/reactos/lib/shell32/shellpath.c
Modified: trunk/reactos/lib/shell32/shfldr_desktop.c
Modified: trunk/reactos/lib/shell32/shfldr_fs.c
Modified: trunk/reactos/lib/shell32/shfldr_mycomp.c
Modified: trunk/reactos/lib/shell32/shlfileop.c
Modified: trunk/reactos/lib/shell32/shlfsbind.c
Modified: trunk/reactos/lib/shell32/shlview.c
Modified: trunk/reactos/lib/shell32/shv_bg_cmenu.c
Modified: trunk/reactos/lib/shell32/shv_item_cmenu.c
_____
Modified: trunk/reactos/lib/shell32/autocomplete.c
--- trunk/reactos/lib/shell32/autocomplete.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/autocomplete.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -170,9 +170,11 @@
IAutoComplete * iface)
{
IAutoCompleteImpl *This = (IAutoCompleteImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(%lu)\n",This,This->ref);
- return ++(This->ref);
+ TRACE("(%p)->(%lu)\n", This, refCount - 1);
+
+ return refCount;
}
/***********************************************************************
*******
@@ -182,10 +184,11 @@
IAutoComplete * iface)
{
IAutoCompleteImpl *This = (IAutoCompleteImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(%lu)\n",This,This->ref);
+ TRACE("(%p)->(%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE(" destroying IAutoComplete(%p)\n",This);
HeapFree(GetProcessHeap(), 0, This->quickComplete);
HeapFree(GetProcessHeap(), 0, This->txtbackup);
@@ -194,9 +197,8 @@
if (This->enumstr)
IEnumString_Release(This->enumstr);
HeapFree(GetProcessHeap(), 0, This);
- return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
*******
_____
Modified: trunk/reactos/lib/shell32/cpanelfolder.c
--- trunk/reactos/lib/shell32/cpanelfolder.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/cpanelfolder.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -181,26 +181,27 @@
static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 * iface)
{
ICPanelImpl *This = (ICPanelImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 * iface)
{
ICPanelImpl *This = (ICPanelImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
SHFree(This->pidlRoot);
LocalFree((HLOCAL) This);
- return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
***
_____
Modified: trunk/reactos/lib/shell32/dataobject.c
--- trunk/reactos/lib/shell32/dataobject.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/dataobject.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -124,16 +124,21 @@
static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPENUMFORMATETC iface)
{
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
- TRACE("(%p)->(count=%lu)\n",This, This->ref);
- return ++(This->ref);
+ ULONG refCount = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+
+ return refCount;
}
static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface)
{
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
- TRACE("(%p)->()\n",This);
+ ULONG refCount = InterlockedDecrement(&This->ref);
- if (!--(This->ref))
+ TRACE("(%p)->(%lu)\n", This, refCount + 1);
+
+ if (!refCount)
{
TRACE(" destroying IEnumFORMATETC(%p)\n",This);
if (This->pFmt)
@@ -143,7 +148,7 @@
HeapFree(GetProcessHeap(),0,This);
return 0;
}
- return This->ref;
+ return refCount;
}
static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface,
ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed)
@@ -291,8 +296,11 @@
static ULONG WINAPI IDataObject_fnAddRef(LPDATAOBJECT iface)
{
IDataObjectImpl *This = (IDataObjectImpl *)iface;
- TRACE("(%p)->(count=%lu)\n",This, This->ref);
- return ++(This->ref);
+ ULONG refCount = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+
+ return refCount;
}
/***********************************************************************
***
@@ -301,17 +309,18 @@
static ULONG WINAPI IDataObject_fnRelease(LPDATAOBJECT iface)
{
IDataObjectImpl *This = (IDataObjectImpl *)iface;
- TRACE("(%p)->()\n",This);
+ ULONG refCount = InterlockedDecrement(&This->ref);
- if (!--(This->ref))
+ TRACE("(%p)->(%lu)\n", This, refCount + 1);
+
+ if (!refCount)
{
TRACE(" destroying IDataObject(%p)\n",This);
_ILFreeaPidl(This->apidl, This->cidl);
ILFree(This->pidl),
HeapFree(GetProcessHeap(),0,This);
- return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
***
_____
Modified: trunk/reactos/lib/shell32/dragdrophelper.c
--- trunk/reactos/lib/shell32/dragdrophelper.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/dragdrophelper.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -113,24 +113,26 @@
static ULONG WINAPI IDropTargetHelper_fnAddRef (IDropTargetHelper *
iface)
{
IDropTargetHelperImpl *This = (IDropTargetHelperImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
static ULONG WINAPI IDropTargetHelper_fnRelease (IDropTargetHelper *
iface)
{
IDropTargetHelperImpl *This = (IDropTargetHelperImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE("-- destroying (%p)\n", This);
LocalFree ((HLOCAL) This);
return 0;
}
- return This->ref;
+ return refCount;
}
static HRESULT WINAPI IDropTargetHelper_fnDragEnter (
_____
Modified: trunk/reactos/lib/shell32/enumidlist.c
--- trunk/reactos/lib/shell32/enumidlist.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/enumidlist.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -240,8 +240,11 @@
IEnumIDList * iface)
{
IEnumIDListImpl *This = (IEnumIDListImpl *)iface;
- TRACE("(%p)->(%lu)\n",This,This->ref);
- return ++(This->ref);
+ ULONG refCount = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p)->(%lu)\n", This, refCount - 1);
+
+ return refCount;
}
/***********************************************************************
*******
* IEnumIDList_fnRelease
@@ -250,16 +253,16 @@
IEnumIDList * iface)
{
IEnumIDListImpl *This = (IEnumIDListImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(%lu)\n",This,This->ref);
+ TRACE("(%p)->(%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE(" destroying IEnumIDList(%p)\n",This);
DeleteList((IEnumIDList*)This);
HeapFree(GetProcessHeap(),0,This);
- return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
***
_____
Modified: trunk/reactos/lib/shell32/folders.c
--- trunk/reactos/lib/shell32/folders.c 2005-02-13 22:08:14 UTC (rev
13543)
+++ trunk/reactos/lib/shell32/folders.c 2005-02-13 22:42:47 UTC (rev
13544)
@@ -130,10 +130,11 @@
static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
{
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n",This, This->ref );
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
/***********************************************************************
***
* IExtractIconW_Release
@@ -141,17 +142,18 @@
static ULONG WINAPI IExtractIconW_fnRelease(IExtractIconW * iface)
{
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->()\n",This);
+ TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref))
+ if (!refCount)
{
TRACE(" destroying IExtractIcon(%p)\n",This);
SHFree(This->pidl);
HeapFree(GetProcessHeap(),0,This);
return 0;
}
- return This->ref;
+ return refCount;
}
static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT
uFlags,
_____
Modified: trunk/reactos/lib/shell32/memorystream.c
--- trunk/reactos/lib/shell32/memorystream.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/memorystream.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -127,10 +127,11 @@
static ULONG WINAPI IStream_fnAddRef(IStream *iface)
{
ISHFileStream *This = (ISHFileStream *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n",This, This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
/***********************************************************************
***
@@ -139,16 +140,17 @@
static ULONG WINAPI IStream_fnRelease(IStream *iface)
{
ISHFileStream *This = (ISHFileStream *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->()\n",This);
+ TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref))
+ if (!refCount)
{
TRACE(" destroying SHFileStream (%p)\n",This);
CloseHandle(This->handle);
HeapFree(GetProcessHeap(),0,This);
}
- return This->ref;
+ return refCount;
}
static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG
cb, ULONG* pcbRead)
_____
Modified: trunk/reactos/lib/shell32/pidl.c
--- trunk/reactos/lib/shell32/pidl.c 2005-02-13 22:08:14 UTC (rev
13543)
+++ trunk/reactos/lib/shell32/pidl.c 2005-02-13 22:42:47 UTC (rev
13544)
@@ -977,7 +977,7 @@
* IShellFolder uses that FileSystem Bind Data object of the
BindContext
* to pass data about the current path element to the next object.
This
* is used to avoid having to verify the current path element on disk,
so
- * that creating an ItemIDList from a non-existent path still can
work.
+ * that creating an ItemIDList from a nonexistent path still can work.
*/
static HRESULT WINAPI _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW
lpFindFile,
BOOL bBindCtx, LPITEMIDLIST *ppidl,
LPDWORD prgfInOut)
@@ -1024,7 +1024,7 @@
* SHSimpleIDListFromPath [SHELL32.162]
*
* Creates a simple ItemIDList from a path and returns it. This
function
- * does not fail on non-existent paths.
+ * does not fail on nonexistent paths.
*
* PARAMS
* path [I] path to parse and convert into an ItemIDList
_____
Modified: trunk/reactos/lib/shell32/shell32_De.rc
--- trunk/reactos/lib/shell32/shell32_De.rc 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shell32_De.rc 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -188,3 +188,35 @@
IDS_SHUTDOWN_TITLE "Anhalten"
IDS_SHUTDOWN_PROMPT "M÷chten Sie die aktuelle ReactOS
Sitzung beenden ?"
}
+
+/* shell folder path default values */
+STRINGTABLE DISCARDABLE
+{
+ IDS_PROGRAMS "Startmen³\\Programme"
+ IDS_PERSONAL "Eigene Dateien"
+ IDS_FAVORITES "Favoriten"
+ IDS_STARTUP "Startmen³\\Programme\\Autostart"
+ IDS_RECENT "Recent"
+ IDS_SENDTO "SendTo"
+ IDS_STARTMENU "Startmen³"
+ IDS_MYMUSIC "Eigene Dateien\\Meine Musik"
+ IDS_MYVIDEO "Eigene Dateien\\Meine Videos"
+ IDS_DESKTOPDIRECTORY "Desktop"
+ IDS_NETHOOD "Netzwerkumgebung"
+ IDS_TEMPLATES "Vorlagen"
+ IDS_APPDATA "Anwendungsdaten"
+ IDS_PRINTHOOD "Druckumgebung"
+ IDS_LOCAL_APPDATA "Lokale Einstellungen\\Anwendungsdaten"
+ IDS_INTERNET_CACHE "Temporary Internet Files"
+ IDS_COOKIES "Cookies"
+ IDS_HISTORY "Verlauf"
+ IDS_PROGRAM_FILES "Programme"
+ IDS_MYPICTURES "Eigene Dateien\\Eigene Bilder"
+ IDS_PROGRAM_FILES_COMMON "Programme\\Gemeinsame Dateien"
+ IDS_COMMON_DOCUMENTS "Dokumente"
+ IDS_ADMINTOOLS "Startmen³\\Programme\\Verwaltung"
+ IDS_COMMON_MUSIC "Dokumente\\Eigene Musik"
+ IDS_COMMON_PICTURES "Dokumente\\Eigene Bilder"
+ IDS_COMMON_VIDEO "Dokumente\\Eigene Videos"
+ IDS_CDBURN_AREA "Lokale
Einstellungen\\Anwendungsdaten\\Microsoft\\CD Burning"
+}
_____
Modified: trunk/reactos/lib/shell32/shelllink.c
--- trunk/reactos/lib/shell32/shelllink.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shelllink.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -974,10 +974,11 @@
static ULONG WINAPI IShellLinkA_fnAddRef(IShellLinkA * iface)
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n",This,This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
/***********************************************************************
*******
* IShellLinkA_Release
@@ -985,11 +986,12 @@
static ULONG WINAPI IShellLinkA_fnRelease(IShellLinkA * iface)
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n",This,This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
- if (--(This->ref))
- return This->ref;
+ if (refCount)
+ return refCount;
TRACE("-- destroying IShellLink(%p)\n",This);
_____
Modified: trunk/reactos/lib/shell32/shellole.c
--- trunk/reactos/lib/shell32/shellole.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shellole.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -556,9 +556,11 @@
static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
{
IDefClFImpl *This = (IDefClFImpl *)iface;
- TRACE("(%p)->(count=%lu)\n",This,This->ref);
+ ULONG refCount = InterlockedIncrement(&This->ref);
- return InterlockedIncrement(&This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
+
+ return refCount;
}
/***********************************************************************
*******
* IDefClF_fnRelease
@@ -566,9 +568,11 @@
static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
{
IDefClFImpl *This = (IDefClFImpl *)iface;
- TRACE("(%p)->(count=%lu)\n",This,This->ref);
+ ULONG refCount = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!InterlockedDecrement(&This->ref))
+ if (!refCount)
{
if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
@@ -576,7 +580,7 @@
HeapFree(GetProcessHeap(),0,This);
return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
*******
* IDefClF_fnCreateInstance
_____
Modified: trunk/reactos/lib/shell32/shellord.c
--- trunk/reactos/lib/shell32/shellord.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shellord.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -673,7 +673,7 @@
if (ret == ERROR_SUCCESS) {
if (!( (type == REG_DWORD) ||
((type == REG_BINARY) && (datalen == 4)) )) {
- ERR("Error policy data for \"NoRecentDocsHistory\" not
formated correctly, type=%ld, len=%ld\n",
+ ERR("Error policy data for \"NoRecentDocsHistory\" not
formatted correctly, type=%ld, len=%ld\n",
type, datalen);
return;
}
_____
Modified: trunk/reactos/lib/shell32/shellpath.c
--- trunk/reactos/lib/shell32/shellpath.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shellpath.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -1995,7 +1995,7 @@
else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
{
/* unlike SHGetFolderPath, SHGetFolderLocation in
shell32
- * version 6.0 returns E_FAIL for non-existing paths
+ * version 6.0 returns E_FAIL for nonexistent paths
*/
hr = E_FAIL;
}
_____
Modified: trunk/reactos/lib/shell32/shfldr_desktop.c
--- trunk/reactos/lib/shell32/shfldr_desktop.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shfldr_desktop.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -157,19 +157,21 @@
static ULONG WINAPI ISF_Desktop_fnAddRef (IShellFolder2 * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
static ULONG WINAPI ISF_Desktop_fnRelease (IShellFolder2 * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE ("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
SHFree (This->pidlRoot);
@@ -178,7 +180,7 @@
LocalFree ((HLOCAL) This);
return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
***
_____
Modified: trunk/reactos/lib/shell32/shfldr_fs.c
--- trunk/reactos/lib/shell32/shfldr_fs.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shfldr_fs.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -173,19 +173,21 @@
static ULONG WINAPI IUnknown_fnAddRef (IUnknown * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
static ULONG WINAPI IUnknown_fnRelease (IUnknown * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE ("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
@@ -193,9 +195,8 @@
if (This->sPathTarget)
SHFree (This->sPathTarget);
LocalFree ((HLOCAL) This);
- return 0;
}
- return This->ref;
+ return refCount;
}
static IUnknownVtbl unkvt =
_____
Modified: trunk/reactos/lib/shell32/shfldr_mycomp.c
--- trunk/reactos/lib/shell32/shfldr_mycomp.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shfldr_mycomp.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -160,26 +160,27 @@
static ULONG WINAPI ISF_MyComputer_fnAddRef (IShellFolder2 * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
static ULONG WINAPI ISF_MyComputer_fnRelease (IShellFolder2 * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE ("(%p)->(count=%lu)\n", This, This->ref);
+ TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
- if (!--(This->ref)) {
+ if (!refCount) {
TRACE ("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
SHFree (This->pidlRoot);
LocalFree ((HLOCAL) This);
- return 0;
}
- return This->ref;
+ return refCount;
}
/***********************************************************************
***
_____
Modified: trunk/reactos/lib/shell32/shlfileop.c
--- trunk/reactos/lib/shell32/shlfileop.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shlfileop.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -861,6 +861,90 @@
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
#define HIGH_ADR (LPWSTR)0xffffffff
+static int file_operation_delete( WIN32_FIND_DATAW *wfd,SHFILEOPSTRUCTW
nFileOp, LPWSTR pFromFile,LPWSTR pTempFrom,HANDLE *hFind)
+
+{
+ LPWSTR lpFileName;
+ BOOL b_Mask = (NULL != StrPBrkW(&pFromFile[1], wWildcardChars));
+ int retCode = 0;
+ do
+ {
+ lpFileName = wfd->cAlternateFileName;
+ if (!lpFileName[0])
+ lpFileName = wfd->cFileName;
+ if (IsDotDir(lpFileName) ||
+ ((b_Mask) && IsAttribDir(wfd->dwFileAttributes) &&
(nFileOp.fFlags & FOF_FILESONLY)))
+ continue;
+ SHFileStrCpyCatW(&pFromFile[1], lpFileName, NULL);
+ /* TODO: Check the SHELL_DeleteFileOrDirectoryW() function in
shell32.dll */
+ if (IsAttribFile(wfd->dwFileAttributes))
+ {
+ if(SHNotifyDeleteFileW(pTempFrom) != ERROR_SUCCESS)
+ {
+ nFileOp.fAnyOperationsAborted = TRUE;
+ retCode = 0x78; /* value unknown */
+ }
+ }
+ else if(!SHELL_DeleteDirectoryW(pTempFrom, (!(nFileOp.fFlags &
FOF_NOCONFIRMATION))))
+ {
+ nFileOp.fAnyOperationsAborted = TRUE;
+ retCode = 0x79; /* value unknown */
+ }
+ }
+ while (!nFileOp.fAnyOperationsAborted &&
FindNextFileW(*hFind,wfd));
+ FindClose(*hFind);
+ *hFind = INVALID_HANDLE_VALUE;
+ return retCode;
+}
+
+/*
+ * Summary of flags:
+ *
+ * implemented flags:
+ * FOF_MULTIDESTFILES, FOF_NOCONFIRMATION, FOF_FILESONLY
+ *
+ * unimplememented and ignored flags:
+ * FOF_CONFIRMMOUSE, FOF_SILENT, FOF_NOCONFIRMMKDIR,
+ * FOF_SIMPLEPROGRESS, FOF_NOCOPYSECURITYATTRIBS
+ *
+ * partially implemented, breaks if file exists:
+ * FOF_RENAMEONCOLLISION
+ *
+ * unimplemented and break if any other flag set:
+ * FOF_ALLOWUNDO, FOF_WANTMAPPINGHANDLE
+ */
+
+static int file_operation_checkFlags(SHFILEOPSTRUCTW nFileOp)
+{
+ FILEOP_FLAGS OFl = ((FILEOP_FLAGS)nFileOp.fFlags & 0xfff);
+ long FuncSwitch = (nFileOp.wFunc & FO_MASK);
+ long level= nFileOp.wFunc >> 4;
+
+ TRACE("%s level=%ld nFileOp.fFlags=0x%x\n",
+ debug_shfileops_action(FuncSwitch), level, nFileOp.fFlags);
+ /* OFl &= (-1 - (FOF_MULTIDESTFILES | FOF_FILESONLY)); */
+ /* OFl ^= (FOF_SILENT | FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS
| FOF_NOCONFIRMMKDIR); */
+ OFl &= (~(FOF_MULTIDESTFILES | FOF_NOCONFIRMATION |
FOF_FILESONLY)); /* implemented */
+ OFl ^= (FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI |
FOF_NOCOPYSECURITYATTRIBS); /* ignored, if one */
+ OFl &= (~FOF_SIMPLEPROGRESS); /* ignored, only with FOF_SILENT */
+ if (OFl)
+ {
+ if (OFl & (~(FOF_CONFIRMMOUSE | FOF_SILENT |
FOF_RENAMEONCOLLISION |
+ FOF_NOCONFIRMMKDIR | FOF_NOERRORUI |
FOF_NOCOPYSECURITYATTRIBS)))
+ {
+ TRACE("%s level=%ld lpFileOp->fFlags=0x%x not implemented,
Aborted=TRUE, stub\n",
+ debug_shfileops_action(FuncSwitch), level, OFl);
+ return 0x403; /* 1027, we need an extension to shlfileop */
+ }
+ else
+ {
+ TRACE("%s level=%ld lpFileOp->fFlags=0x%x not fully
implemented, stub\n",
+ debug_shfileops_action(FuncSwitch), level, OFl);
+ }
+ }
+ return 0;
+}
+
/***********************************************************************
**
* SHFileOperationW [SHELL32.@]
*
@@ -884,8 +968,6 @@
int retCode = 0;
DWORD ToAttr;
DWORD ToPathAttr;
- DWORD FromPathAttr;
- FILEOP_FLAGS OFl = ((FILEOP_FLAGS)lpFileOp->fFlags & 0xfff);
BOOL b_Multi = (nFileOp.fFlags & FOF_MULTIDESTFILES);
@@ -904,6 +986,8 @@
long FuncSwitch = (nFileOp.wFunc & FO_MASK);
long level= nFileOp.wFunc>>4;
+ int ret;
+
/* default no error */
nFileOp.fAnyOperationsAborted = FALSE;
@@ -932,47 +1016,12 @@
* create dir 0 0 0 0 0 0 1 0
*/
- /*
- * Summary of flags:
- *
- * implemented flags:
- * FOF_MULTIDESTFILES, FOF_NOCONFIRMATION, FOF_FILESONLY
- *
- * unimplememented and ignored flags:
- * FOF_CONFIRMMOUSE, FOF_SILENT, FOF_NOCONFIRMMKDIR,
- * FOF_SIMPLEPROGRESS, FOF_NOCOPYSECURITYATTRIBS
- *
- * partially implemented, breaks if file exists:
- * FOF_RENAMEONCOLLISION
- *
- * unimplemented and break if any other flag set:
- * FOF_ALLOWUNDO, FOF_WANTMAPPINGHANDLE
- */
-
- TRACE("%s level=%ld nFileOp.fFlags=0x%x\n",
- debug_shfileops_action(FuncSwitch), level,
lpFileOp->fFlags);
-
- /* OFl &= (-1 - (FOF_MULTIDESTFILES | FOF_FILESONLY)); */
- /* OFl ^= (FOF_SILENT | FOF_NOCONFIRMATION |
FOF_SIMPLEPROGRESS | FOF_NOCONFIRMMKDIR); */
- OFl &= (~(FOF_MULTIDESTFILES | FOF_NOCONFIRMATION |
FOF_FILESONLY)); /* implemented */
- OFl ^= (FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI |
FOF_NOCOPYSECURITYATTRIBS); /* ignored, if one */
- OFl &= (~FOF_SIMPLEPROGRESS); /* ignored,
only with FOF_SILENT */
- if (OFl)
+ ret = file_operation_checkFlags(nFileOp);
+ if (ret != 0)
{
- if (OFl & (~(FOF_CONFIRMMOUSE | FOF_SILENT |
FOF_RENAMEONCOLLISION |
- FOF_NOCONFIRMMKDIR | FOF_NOERRORUI |
FOF_NOCOPYSECURITYATTRIBS)))
- {
- TRACE("%s level=%ld lpFileOp->fFlags=0x%x not
implemented, Aborted=TRUE, stub\n",
- debug_shfileops_action(FuncSwitch), level, OFl);
- retCode = 0x403; /* 1027, we need an extension to
shlfileop */
- goto shfileop_end;
- }
- else
- {
- TRACE("%s level=%ld lpFileOp->fFlags=0x%x not fully
implemented, stub\n",
- debug_shfileops_action(FuncSwitch), level, OFl);
- }
- }
+ retCode = ret;
+ goto shfileop_end;
+ }
if ((pNextFrom) && (!(b_MultiTo) || (pNextTo)))
{
@@ -1055,12 +1104,13 @@
goto shfileop_end;
}
}
-
+
hFind = FindFirstFileW(pFrom, &wfd);
if (INVALID_HANDLE_VALUE == hFind)
{
if ((FO_DELETE == FuncSwitch) && (b_Mask))
{
+ DWORD FromPathAttr;
pFromFile[0] = '\0';
FromPathAttr = GetFileAttributesW(pTempFrom);
pFromFile[0] = '\\';
@@ -1080,37 +1130,13 @@
/* ??? b_Mask = (!SHFileStrICmpA(&pFromFile[1],
&wfd.cFileName[0], HIGH_ADR, HIGH_ADR)); */
if (!pTo) /* FO_DELETE */
{
- do
+ ret =
file_operation_delete(&wfd,nFileOp,pFromFile,pTempFrom,&hFind);
+ /* if ret is not 0, nFileOp.fAnyOperationsAborted is
TRUE */
+ if (ret != 0)
{
- lpFileName = wfd.cAlternateFileName;
- if (!lpFileName[0])
- lpFileName = wfd.cFileName;
- if (IsDotDir(lpFileName) ||
- ((b_Mask) && IsAttribDir(wfd.dwFileAttributes)
&& (nFileOp.fFlags & FOF_FILESONLY)))
- continue;
- SHFileStrCpyCatW(&pFromFile[1], lpFileName, NULL);
- /* TODO: Check the SHELL_DeleteFileOrDirectoryW()
function in shell32.dll */
- if (IsAttribFile(wfd.dwFileAttributes))
- {
- if(SHNotifyDeleteFileW(pTempFrom) !=
ERROR_SUCCESS)
- {
- nFileOp.fAnyOperationsAborted = TRUE;
- retCode = 0x78; /* value unknown */
- }
- }
- else
- {
- if(!SHELL_DeleteDirectoryW(pTempFrom,
(!(nFileOp.fFlags & FOF_NOCONFIRMATION))))
- {
- nFileOp.fAnyOperationsAborted = TRUE;
- retCode = 0x79; /* value unknown */
- }
- }
- } while (!nFileOp.fAnyOperationsAborted &&
FindNextFileW(hFind, &wfd));
- FindClose(hFind);
- hFind = INVALID_HANDLE_VALUE;
- if (nFileOp.fAnyOperationsAborted)
- goto shfileop_end;
+ retCode = ret;
+ goto shfileop_end;
+ }
continue;
} /* FO_DELETE ends, pTo must be always valid from here */
_____
Modified: trunk/reactos/lib/shell32/shlfsbind.c
--- trunk/reactos/lib/shell32/shlfsbind.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shlfsbind.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -179,22 +179,26 @@
static ULONG WINAPI IFileSystemBindData_fnAddRef(IFileSystemBindData
*iface)
{
IFileSystemBindDataImpl *This = (IFileSystemBindDataImpl
*)iface;
- TRACE("(%p)\n", This);
- return InterlockedIncrement(&This->ref);
+ ULONG refCount = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p)->(count=%li)\n", This, refCount - 1);
+
+ return refCount;
}
static ULONG WINAPI IFileSystemBindData_fnRelease(IFileSystemBindData
*iface)
{
IFileSystemBindDataImpl *This = (IFileSystemBindDataImpl
*)iface;
- TRACE("(%p)\n", This);
+ ULONG refCount = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)->(count=%li)\n", This, refCount + 1);
- if (!InterlockedDecrement(&This->ref))
+ if (!refCount)
{
TRACE(" destroying ISFBindPidl(%p)\n",This);
HeapFree(GetProcessHeap(), 0, This);
- return 0;
}
- return This->ref;
+ return refCount;
}
static HRESULT WINAPI
IFileSystemBindData_fnGetFindData(IFileSystemBindData *iface,
WIN32_FIND_DATAW *pfd)
_____
Modified: trunk/reactos/lib/shell32/shlview.c
--- trunk/reactos/lib/shell32/shlview.c 2005-02-13 22:08:14 UTC (rev
13543)
+++ trunk/reactos/lib/shell32/shlview.c 2005-02-13 22:42:47 UTC (rev
13544)
@@ -97,6 +97,9 @@
LISTVIEW_SORT_INFO ListViewSortInfo;
ULONG hNotify; /* change notification
handle */
HANDLE hAccel;
+ DWORD dwAspects;
+ DWORD dwAdvf;
+ IAdviseSink *pAdvSink;
} IShellViewImpl;
static struct IShellViewVtbl svvt;
@@ -1639,10 +1642,11 @@
static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
{
IShellViewImpl *This = (IShellViewImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n",This,This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
/**********************************************************
* IShellView_Release
@@ -1650,10 +1654,11 @@
static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
{
IShellViewImpl *This = (IShellViewImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->()\n",This);
+ TRACE("(%p)->(count=%li)\n", This, refCount + 1);
- if (!--(This->ref))
+ if (!refCount)
{
TRACE(" destroying IShellView(%p)\n",This);
@@ -1665,13 +1670,15 @@
if(This->pSF2Parent)
IShellFolder2_Release(This->pSF2Parent);
- if (This->apidl)
+ if(This->apidl)
SHFree(This->apidl);
+ if(This->pAdvSink)
+ IAdviseSink_Release(This->pAdvSink);
+
HeapFree(GetProcessHeap(),0,This);
- return 0;
}
- return This->ref;
+ return refCount;
}
/**********************************************************
@@ -2374,10 +2381,17 @@
_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
- FIXME("Stub: This=%p\n",This);
+ FIXME("partial stub: %p %08lx %08lx %p\n",
+ This, aspects, advf, pAdvSink);
- return E_NOTIMPL;
+ /* FIXME: we set the AdviseSink, but never use it to send any
advice */
+ This->pAdvSink = pAdvSink;
+ This->dwAspects = aspects;
+ This->dwAdvf = advf;
+
+ return S_OK;
}
+
static HRESULT WINAPI ISVViewObject_GetAdvise(
IViewObject *iface,
DWORD* pAspects,
@@ -2387,9 +2401,20 @@
_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
- FIXME("Stub: This=%p\n",This);
+ TRACE("This=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n",
+ This, pAspects, pAdvf, ppAdvSink);
- return E_NOTIMPL;
+ if( ppAdvSink )
+ {
+ IAdviseSink_AddRef( This->pAdvSink );
+ *ppAdvSink = This->pAdvSink;
+ }
+ if( pAspects )
+ *pAspects = This->dwAspects;
+ if( pAdvf )
+ *pAdvf = This->dwAdvf;
+
+ return S_OK;
}
_____
Modified: trunk/reactos/lib/shell32/shv_bg_cmenu.c
--- trunk/reactos/lib/shell32/shv_bg_cmenu.c 2005-02-13 22:08:14 UTC
(rev 13543)
+++ trunk/reactos/lib/shell32/shv_bg_cmenu.c 2005-02-13 22:42:47 UTC
(rev 13544)
@@ -106,10 +106,11 @@
static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu2 *iface)
{
BgCmImpl *This = (BgCmImpl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->ref);
- TRACE("(%p)->(count=%lu)\n",This, This->ref);
+ TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
- return ++(This->ref);
+ return refCount;
}
/***********************************************************************
***
@@ -118,10 +119,11 @@
static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu2 *iface)
{
BgCmImpl *This = (BgCmImpl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->ref);
- TRACE("(%p)->()\n",This);
+ TRACE("(%p)->(count=%li)\n", This, refCount + 1);
- if (!--(This->ref))
+ if (!refCount)
{
TRACE(" destroying IContextMenu(%p)\n",This);
@@ -129,10 +131,8 @@
IShellFolder_Release(This->pSFParent);
HeapFree(GetProcessHeap(),0,This);
- return 0;
}
-
- return This->ref;
+ return refCount;
}
[truncated at 1000 lines; 45 more skipped]