MoveFileW fix

Roderick Colenbrander thunderbird2k at gmx.net
Tue Feb 25 10:05:18 CST 2003


As explained on the wine-devel list moving of files to a different volume was 
broken in Wine. According to MSDN this is allowed. This patch fixes that 
problem.

The other thing it fixes is that it now allows moves of directories as long as 
the directories stay on the same volume. Before no directory moves were 
allowed. 


Roderick Colenbrander

ChangeLog:
- moving of files to different volumes
- moving of directories on the same volume

Index: files/file.c
===================================================================
RCS file: /home/wine/wine/files/file.c,v
retrieving revision 1.177
diff -u -r1.177 file.c
--- files/file.c	11 Jan 2003 21:03:18 -0000	1.177
+++ files/file.c	25 Feb 2003 15:59:04 -0000
@@ -2840,19 +2840,26 @@
     }
     if (!DOSFS_GetFullName( fn2, FALSE, &full_name2 )) return FALSE;
 
-    if (full_name1.drive == full_name2.drive) /* move */
-        return MoveFileExW( fn1, fn2, MOVEFILE_COPY_ALLOWED );
-
-    /* copy */
-    if (stat( full_name1.long_name, &fstat ))
+    if (stat( full_name1.long_name, &fstat) )
     {
         WARN("Invalid source file %s\n",
              full_name1.long_name);
         FILE_SetDosError();
         return FALSE;
     }
+    
+    /* Allow all types of filemoves */
+    if (!S_ISDIR(fstat.st_mode))
+        return MoveFileExW( fn1, fn2, MOVEFILE_COPY_ALLOWED );
+
     if (S_ISDIR(fstat.st_mode)) {
-        /* No Move for directories across file systems */
+
+	/* According to MSDN, moves for directories are allowed */
+	/* as long as they happen on the same volume */
+	if(full_name1.drive == full_name2.drive)
+    	    return MoveFileExW( fn1, fn2, MOVEFILE_COPY_ALLOWED );
+
+        /* No Move for directories across different volumes */
         /* FIXME: Use right error code */
         SetLastError( ERROR_GEN_FAILURE );
         return FALSE;



More information about the wine-patches mailing list