[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-patches
Subject: Added (some) file operations in shlfileop.c
From: David Grant <dave () reach ! net>
Date: 2001-02-22 19:28:15
[Download RAW message or body]
Hi,
This implements partial support for FO_COPY and FO_DELETE.. It copies
and delete things.. it doesn't create the perdy GUI+status bar thingy..
but it makes some installers happier (ie. Roller Coaster Tycoon :)
Thanks,
dave.
Changelog
* /dlls/shell32/shlfileop.c:
David Grant <dave@reach.net>
Added (partial) support for FO_COPY and FO_DELETE.
--
David Grant
University of Waterloo
Computer Engineering
dave@reach.net
["shlfileop.diff" (text/plain)]
Index: dlls/shell32/shlfileop.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/shlfileop.c,v
retrieving revision 1.10
diff -u -r1.10 shlfileop.c
--- dlls/shell32/shlfileop.c 2001/02/21 04:01:20 1.10
+++ dlls/shell32/shlfileop.c 2001/02/22 19:17:52
@@ -4,6 +4,8 @@
#include <string.h>
#include "debugtools.h"
#include "shellapi.h"
+#include "heap.h"
+#include "shlwapi.h"
#include "shlobj.h"
#include "shresdef.h"
@@ -154,7 +156,50 @@
*/
DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
{
- FIXME("(%p):stub.\n", lpFileOp);
+ LPSTR pFrom = (LPSTR)lpFileOp->pFrom;
+ LPSTR pTo = (LPSTR)lpFileOp->pTo;
+ LPSTR pTempTo;
+
+ switch(lpFileOp->wFunc) {
+ case FO_COPY:
+ TRACE("File Copy:\n");
+ while(1) {
+ if(!pFrom[0]) break;
+ if(!pTo[0]) break;
+ TRACE(" From='%s' To='%s'\n", pFrom, pTo);
+
+ pTempTo = HEAP_strdupA(GetProcessHeap(), 0, pTo);
+ PathRemoveFileSpecA(pTempTo);
+ TRACE(" Creating Directory '%s'\n", pTempTo);
+ SHCreateDirectory(NULL,pTempTo);
+ HeapFree(GetProcessHeap(), 0, pTempTo);
+
+ CopyFileA(pFrom, pTo, FALSE);
+
+ pFrom += strlen(pFrom) + 1;
+ pTo += strlen(pTo) + 1;
+ }
+ TRACE("Setting AnyOpsAborted=FALSE\n");
+ lpFileOp->fAnyOperationsAborted=FALSE;
+ return 0;
+
+ case FO_DELETE:
+ TRACE("File Delete:\n");
+ while(1) {
+ if(!pFrom[0]) break;
+ TRACE(" File='%s'\n", pFrom);
+ DeleteFileA(pFrom);
+ pFrom += strlen(pFrom) + 1;
+ }
+ TRACE("Setting AnyOpsAborted=FALSE\n");
+ lpFileOp->fAnyOperationsAborted=FALSE;
+ return 0;
+
+
+ default:
+ FIXME("Unhandled shell file operation %d\n", lpFileOp->wFunc);
+ }
+
return 1;
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic