wcmd: increase maximum length of commands

Rein Klazes wijn at wanadoo.nl
Mon Dec 19 02:55:53 CST 2005


Hi,

fix for bug #4094

Changelog:
programs/wcmd		: batch.c
Increase maximum length of commands to 8192 bytes as on Windows XP.
Add needed braces to a multi line "if" statement.

Rein.
-------------- next part --------------
--- wine/programs/wcmd/batch.c	2005-12-08 17:56:29.000000000 +0100
+++ mywine/programs/wcmd/batch.c	2005-12-18 11:56:06.000000000 +0100
@@ -27,7 +27,8 @@ extern char quals[MAX_PATH], param1[MAX_
 extern BATCH_CONTEXT *context;
 extern DWORD errorlevel;
 
-#define MAXSTRING 1024
+/* msdn specified max for Win XP */
+#define MAXSTRING 8192
 
 /****************************************************************************
  * WCMD_batch
@@ -93,13 +94,14 @@ BATCH_CONTEXT *prev_context;
  */
 
   while (WCMD_fgets (string, sizeof(string), h)) {
-    if (strlen(string) == MAXSTRING -1)
-      WCMD_output_asis( "Line in Batch processing possible truncated. Using:\n");
-      WCMD_output_asis( string);
-      WCMD_output_asis( "\n");
-    if (string[0] != ':') {                      /* Skip over labels */
-      WCMD_batch_command (string);
-    }
+      if (strlen(string) == MAXSTRING -1) {
+          WCMD_output_asis( "Line in Batch processing possibly truncated. Using:\n");
+          WCMD_output_asis( string);
+          WCMD_output_asis( "\n");
+      }
+      if (string[0] != ':') {                      /* Skip over labels */
+          WCMD_batch_command (string);
+      }
   }
   CloseHandle (h);
 
@@ -128,10 +130,23 @@ BATCH_CONTEXT *prev_context;
 void WCMD_batch_command (char *line) {
 
 DWORD status;
-char cmd1[MAXSTRING],cmd2[MAXSTRING];
+char *cmd1, *cmd2;
 char *p, *s, *t;
 int i;
 
+  cmd2 = HeapAlloc( GetProcessHeap(), 0, MAXSTRING );
+  if( !cmd2) {
+      WCMD_print_error ();
+      return;
+  }
+  cmd1 = HeapAlloc( GetProcessHeap(), 0, MAXSTRING );
+  if( !cmd1) {
+      WCMD_print_error ();
+      HeapFree( GetProcessHeap(), 0, cmd2 );
+      return;
+  }
+ 
+
   /* Get working version of command line */
   strcpy(cmd1, line);
 
@@ -158,11 +173,14 @@ int i;
   }
 
   /* Now replace environment variables */
-  status = ExpandEnvironmentStrings(cmd1, cmd2, sizeof(cmd2));
+  status = ExpandEnvironmentStrings(cmd1, cmd2, MAXSTRING);
   if (!status) {
-    WCMD_print_error ();
-    return;
+      WCMD_print_error ();
+      HeapFree( GetProcessHeap(), 0, cmd1 );
+      HeapFree( GetProcessHeap(), 0, cmd2 );
+      return;
   }
+  HeapFree( GetProcessHeap(), 0, cmd1 );
 
   /* In a batch program, unknown variables are replace by nothing */
   /* so remove any remaining %var%                                */
@@ -186,6 +204,7 @@ int i;
   }
 
   WCMD_process_command (cmd2);
+  HeapFree( GetProcessHeap(), 0, cmd2 );
 }
 
 /*******************************************************************


More information about the wine-patches mailing list