Implement append redirection in wcmd

Ferenc Wagner wferi at afavant.elte.hu
Wed Sep 10 10:34:41 CDT 2003


ChangeLog: Implement >> style (append) output redirection in wcmd.

Index: programs/wcmd/wcmdmain.c
===================================================================
RCS file: /home/wine/wine/programs/wcmd/wcmdmain.c,v
retrieving revision 1.36
diff -u -r1.36 wcmdmain.c
--- programs/wcmd/wcmdmain.c	5 Sep 2003 23:15:42 -0000	1.36
+++ programs/wcmd/wcmdmain.c	10 Sep 2003 15:31:03 -0000
@@ -258,7 +258,7 @@
 {
     char *cmd, *p;
     int status, i, len;
-    DWORD count;
+    DWORD count, creationDisposition;
     HANDLE old_stdin = 0, old_stdout = 0, h;
     char *whichcmd;
     SECURITY_ATTRIBUTES sa;
@@ -307,16 +307,27 @@
       SetStdHandle (STD_INPUT_HANDLE, h);
     }
     if ((p = strchr(cmd,'>')) != NULL) {
-      h = CreateFile (WCMD_parameter (++p, 0, NULL), GENERIC_WRITE, 0, &sa, CREATE_ALWAYS,
+      *p++ = '\0';
+      if ('>' == *p) {
+        creationDisposition = OPEN_ALWAYS;
+        p++;
+      }
+      else {
+        creationDisposition = CREATE_ALWAYS;
+      }
+      h = CreateFile (WCMD_parameter (p, 0, NULL), GENERIC_WRITE, 0, &sa, creationDisposition,
 		FILE_ATTRIBUTE_NORMAL, NULL);
       if (h == INVALID_HANDLE_VALUE) {
 	WCMD_print_error ();
         HeapFree( GetProcessHeap(), 0, cmd );
 	return;
       }
+      if (SetFilePointer (h, 0, NULL, FILE_END) ==
+          INVALID_SET_FILE_POINTER) {
+        WCMD_print_error ();
+      }
       old_stdout = GetStdHandle (STD_OUTPUT_HANDLE);
       SetStdHandle (STD_OUTPUT_HANDLE, h);
-      *--p = '\0';
     }
     if ((p = strchr(cmd,'<')) != NULL) *p = '\0';
 



More information about the wine-patches mailing list