www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2001/07/14/09:42:59

Date: Sat, 14 Jul 2001 16:42:11 +0300
From: "Eli Zaretskii" <eliz AT is DOT elta DOT co DOT il>
Sender: halo1 AT zahav DOT net DOT il
To: djgpp-workers AT delorie DOT com
Message-Id: <3995-Sat14Jul2001164210+0300-eliz@is.elta.co.il>
X-Mailer: Emacs 20.6 (via feedmail 8.3.emacs20_6 I) and Blat ver 1.8.9
Subject: Support for long command lines in GDB
Reply-To: djgpp-workers AT delorie DOT com

If someone wants to use in GDB the new support for long command lines
in v2loadimage, here's the patch to do that (soon in GDB CVS
repository near you):

2001-07-14  Eli Zaretskii  <eliz AT is DOT elta DOT co DOT il>

	* go32-nat.c (go32_create_inferior): Support command lines longer
	than 126 characters.

--- gdb/go32-nat.c~4	Sat Jul 14 12:04:50 2001
+++ gdb/go32-nat.c	Sat Jul 14 15:32:28 2001
@@ -585,6 +585,7 @@ go32_create_inferior (char *exec_file, c
   jmp_buf start_state;
   char *cmdline;
   char **env_save = environ;
+  size_t cmdlen;
 
   /* If no exec file handed to us, get it from the exec-file command -- with
      a good, common error message if none is specified.  */
@@ -619,10 +620,24 @@ go32_create_inferior (char *exec_file, c
   else
     child_cmd.command = xstrdup (args);
 
-  cmdline = (char *) alloca (strlen (args) + 4);
-  cmdline[0] = strlen (args);
+  cmdlen = strlen (args);
+  /* v2loadimage passes command lines via DOS memory, so it cannot
+     possibly handle commands longer than 1MB.  */
+  if (cmdlen > 1024*1024)
+    error ("Command line too long.");
+
+  cmdline = xmalloc (cmdlen + 4);
   strcpy (cmdline + 1, args);
-  cmdline[strlen (args) + 1] = 13;
+  /* If the command-line length fits into DOS 126-char limits, use the
+     DOS command tail format; otherwise, tell v2loadimage to pass it
+     through a buffer in conventional memory.  */
+  if (cmdlen < 127)
+    {
+      cmdline[0] = strlen (args);
+      cmdline[cmdlen + 1] = 13;
+    }
+  else
+    cmdline[0] = 0xff;	/* signal v2loadimage it's a long command */
 
   environ = env;
 
@@ -633,6 +648,7 @@ go32_create_inferior (char *exec_file, c
       exit (1);
     }
   environ = env_save;
+  free (cmdline);
 
   edi_init (start_state);
 #if __DJGPP_MINOR__ < 3

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019