Code cleanup: SHFileOperationW

Joris Huizer jorishuizer at planet.nl
Thu Jan 13 08:12:17 CST 2005


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
-------------- next part --------------
? .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);


More information about the wine-devel mailing list