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);