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