Hi,
I took out a part of the function SHFileOperationW and put it in a new
function - please give any comments: is this the way to make this
function more readable you want it? what is a better way of calling such
a function?
regards,
Joris
? .patch.diff.swp
? backup-010320051808-pre-wine.tgz
? backup-010920052053-pre-wine.tgz
? backup-011120051329-pre-wine.tgz
? backup-011120051339-pre-wine.tgz
? backup-011220050008-pre-wine.tgz
? backup-123120041614-pre-wine.tgz
? badrefs
? description-pak
? doc-pak
? getrefs
? patch.diff
? ref
? refs
? versions
? wine-working.deb
? wine_cvs-041231-1_i386.deb
? wine_cvs-050103-1_i386.deb
? wine_cvs-050109-1_i386.deb
? wine_cvs-050111.noalsa-1_i386.deb
? wine_cvs-050112.release-1_i386.deb
? programs/notepad2
Index: dlls/shell32/shlfileop.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shlfileop.c,v
retrieving revision 1.50
diff -u -r1.50 shlfileop.c
--- dlls/shell32/shlfileop.c 23 Dec 2004 17:12:07 -0000 1.50
+++ dlls/shell32/shlfileop.c 13 Jan 2005 14:13:33 -0000
@@ -861,6 +861,40 @@
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
#define HIGH_ADR (LPWSTR)0xffffffff
+static int WINAPI SHFileOperationW_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));
+ return retCode;
+}
+
/*************************************************************************
* SHFileOperationW [SHELL32.@]
*
@@ -1080,33 +1114,9 @@
/* ??? b_Mask = (!SHFileStrICmpA(&pFromFile[1], &wfd.cFileName[0], HIGH_ADR, HIGH_ADR)); */
if (!pTo) /* FO_DELETE */
{
- 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));
+ int ret = SHFileOperationW_delete(&wfd,nFileOp,pFromFile,pTempFrom,hFind);
+ if (ret != 0)
+ retCode = ret;
FindClose(hFind);
hFind = INVALID_HANDLE_VALUE;
if (nFileOp.fAnyOperationsAborted)
Index: dlls/wined3d/basetexture.c
===================================================================
RCS file: /home/wine/wine/dlls/wined3d/basetexture.c,v
retrieving revision 1.2
diff -u -r1.2 basetexture.c
--- dlls/wined3d/basetexture.c 9 Jan 2005 17:37:02 -0000 1.2
+++ dlls/wined3d/basetexture.c 13 Jan 2005 14:13:34 -0000
@@ -37,16 +37,17 @@
ULONG WINAPI IWineD3DBaseTextureImpl_AddRef(IWineD3DBaseTexture *iface) {
IWineD3DBaseTextureImpl *This = (IWineD3DBaseTextureImpl *)iface;
- TRACE("(%p) : AddRef increasing from %ld\n", This, This->resource.ref);
+ ULONG ref = InterlockedIncrement(&This->resource.ref);
+
+ TRACE("(%p) : AddRef increasing from %ld\n", This,ref - 1);
IUnknown_AddRef(This->resource.parent);
- return InterlockedIncrement(&This->resource.ref);
+ return ref;
}
ULONG WINAPI IWineD3DBaseTextureImpl_Release(IWineD3DBaseTexture *iface) {
IWineD3DBaseTextureImpl *This = (IWineD3DBaseTextureImpl *)iface;
- ULONG ref;
- TRACE("(%p) : Releasing from %ld\n", This, This->resource.ref);
- ref = InterlockedDecrement(&This->resource.ref);
+ ULONG ref = InterlockedDecrement(&This->resource.ref);
+ TRACE("(%p) : Releasing from %ld\n", This, ref + 1);
if (ref == 0) {
IWineD3DDevice_Release((IWineD3DDevice *)This->resource.wineD3DDevice);
HeapFree(GetProcessHeap(), 0, This);
Index: dlls/wined3d/indexbuffer.c
===================================================================
RCS file: /home/wine/wine/dlls/wined3d/indexbuffer.c,v
retrieving revision 1.4
diff -u -r1.4 indexbuffer.c
--- dlls/wined3d/indexbuffer.c 9 Jan 2005 17:37:02 -0000 1.4
+++ dlls/wined3d/indexbuffer.c 13 Jan 2005 14:13:34 -0000
@@ -38,16 +38,16 @@
ULONG WINAPI IWineD3DIndexBufferImpl_AddRef(IWineD3DIndexBuffer *iface) {
IWineD3DIndexBufferImpl *This = (IWineD3DIndexBufferImpl *)iface;
- TRACE("(%p) : AddRef increasing from %ld\n", This, This->resource.ref);
+ ULONG ref = InterlockedIncrement(&This->resource.ref);
+ TRACE("(%p) : AddRef increasing from %ld\n", This, ref - 1);
IUnknown_AddRef(This->resource.parent);
- return InterlockedIncrement(&This->resource.ref);
+ return ref
}
ULONG WINAPI IWineD3DIndexBufferImpl_Release(IWineD3DIndexBuffer *iface) {
IWineD3DIndexBufferImpl *This = (IWineD3DIndexBufferImpl *)iface;
- ULONG ref;
- TRACE("(%p) : Releasing from %ld\n", This, This->resource.ref);
- ref = InterlockedDecrement(&This->resource.ref);
+ ULONG ref = InterlockedDecrement(&This->resource.ref);
+ TRACE("(%p) : Releasing from %ld\n", This, ref + 1);
if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This->allocatedMemory);
IWineD3DDevice_Release((IWineD3DDevice *)This->resource.wineD3DDevice);
Index: dlls/wined3d/resource.c
===================================================================
RCS file: /home/wine/wine/dlls/wined3d/resource.c,v
retrieving revision 1.4
diff -u -r1.4 resource.c
--- dlls/wined3d/resource.c 9 Jan 2005 17:37:02 -0000 1.4
+++ dlls/wined3d/resource.c 13 Jan 2005 14:13:34 -0000
@@ -36,15 +36,15 @@
ULONG WINAPI IWineD3DResourceImpl_AddRef(IWineD3DResource *iface) {
IWineD3DResourceImpl *This = (IWineD3DResourceImpl *)iface;
- TRACE("(%p) : AddRef increasing from %ld\n", This, This->resource.ref);
- return InterlockedIncrement(&This->resource.ref);
+ ULONG ref = InterlockedIncrement(&This->resource.ref);
+ TRACE("(%p) : AddRef increasing from %ld\n", This, ref - 1);
+ return ref;
}
ULONG WINAPI IWineD3DResourceImpl_Release(IWineD3DResource *iface) {
IWineD3DResourceImpl *This = (IWineD3DResourceImpl *)iface;
- ULONG ref;
- TRACE("(%p) : Releasing from %ld\n", This, This->resource.ref);
- ref = InterlockedDecrement(&This->resource.ref);
+ ULONG ref = InterlockedDecrement(&This->resource.ref);
+ TRACE("(%p) : Releasing from %ld\n", This, ref + 1);
if (ref == 0) {
IWineD3DDevice_Release((IWineD3DDevice *)This->resource.wineD3DDevice);
HeapFree(GetProcessHeap(), 0, This);
Index: dlls/wined3d/surface.c
===================================================================
RCS file: /home/wine/wine/dlls/wined3d/surface.c,v
retrieving revision 1.1
diff -u -r1.1 surface.c
--- dlls/wined3d/surface.c 9 Jan 2005 17:37:02 -0000 1.1
+++ dlls/wined3d/surface.c 13 Jan 2005 14:13:35 -0000
@@ -38,16 +38,16 @@
ULONG WINAPI IWineD3DSurfaceImpl_AddRef(IWineD3DSurface *iface) {
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
- TRACE("(%p) : AddRef increasing from %ld\n", This, This->resource.ref);
+ ULONG ref = InterlockedIncrement(&This->resource.ref);
+ TRACE("(%p) : AddRef increasing from %ld\n", This,ref - 1);
IUnknown_AddRef(This->resource.parent);
- return InterlockedIncrement(&This->resource.ref);
+ return ref
}
ULONG WINAPI IWineD3DSurfaceImpl_Release(IWineD3DSurface *iface) {
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
- ULONG ref;
- TRACE("(%p) : Releasing from %ld\n", This, This->resource.ref);
- ref = InterlockedDecrement(&This->resource.ref);
+ ULONG ref = InterlockedDecrement(&This->resource.ref);
+ TRACE("(%p) : Releasing from %ld\n", This, ref + 1);
if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This->allocatedMemory);
IWineD3DDevice_Release((IWineD3DDevice *)This->resource.wineD3DDevice);
Index: dlls/wined3d/vertexbuffer.c
===================================================================
RCS file: /home/wine/wine/dlls/wined3d/vertexbuffer.c,v
retrieving revision 1.6
diff -u -r1.6 vertexbuffer.c
--- dlls/wined3d/vertexbuffer.c 9 Jan 2005 17:37:02 -0000 1.6
+++ dlls/wined3d/vertexbuffer.c 13 Jan 2005 14:13:35 -0000
@@ -38,16 +38,16 @@
ULONG WINAPI IWineD3DVertexBufferImpl_AddRef(IWineD3DVertexBuffer *iface) {
IWineD3DVertexBufferImpl *This = (IWineD3DVertexBufferImpl *)iface;
- TRACE("(%p) : AddRef increasing from %ld\n", This, This->resource.ref);
+ ULONG ref = InterlockedIncrement(&This->resource.ref);
+ TRACE("(%p) : AddRef increasing from %ld\n", This, ref - 1);
IUnknown_AddRef(This->resource.parent);
- return InterlockedIncrement(&This->resource.ref);
+ return ref;
}
ULONG WINAPI IWineD3DVertexBufferImpl_Release(IWineD3DVertexBuffer *iface) {
IWineD3DVertexBufferImpl *This = (IWineD3DVertexBufferImpl *)iface;
- ULONG ref;
- TRACE("(%p) : Releasing from %ld\n", This, This->resource.ref);
- ref = InterlockedDecrement(&This->resource.ref);
+ ULONG ref = InterlockedDecrement(&This->resource.ref);
+ TRACE("(%p) : Releasing from %ld\n", This, ref + 1);
if (ref == 0) {
HeapFree(GetProcessHeap(), 0, This->allocatedMemory);
IWineD3DDevice_Release((IWineD3DDevice *)This->resource.wineD3DDevice);