Patch for command line parsing for VMS from Hartmut Becker.
authorPaul Smith <psmith@gnu.org>
Fri, 12 Nov 2004 21:30:20 +0000 (21:30 +0000)
committerPaul Smith <psmith@gnu.org>
Fri, 12 Nov 2004 21:30:20 +0000 (21:30 +0000)
ChangeLog
job.c

index 37df6bb..4620aa2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-12  Paul D. Smith  <psmith@gnu.org>
+
+       * job.c (child_execute_job) [VMS]: Don't treat "#" as a comment on
+       the command line if it's inside a string.
+       Patch by: Hartmut Becker <Hartmut.Becker@hp.com>
+
 2004-10-21  Boris Kolpackov  <boris@kolpackov.net>
 
        * function.c (func_lastword): New function: return last word
@@ -64,7 +70,7 @@
        idea behind Savannah Patch #3144 from david.baird@homemail.com.
        If SHELL is set to CMD.EXE then assume it's batch-mode and
        non-unixy.  I wrote the code differently from the patch, though,
-       to make it safer.
+       to make it safer.  This also resolves bug #9174.
 
 2004-09-20  Paul D. Smith  <psmith@gnu.org>
 
diff --git a/job.c b/job.c
index f198fc5..28d1e6b 100644 (file)
--- a/job.c
+++ b/job.c
@@ -2088,6 +2088,7 @@ child_execute_job (char *argv, struct child *child)
   char ifile[256], ofile[256], efile[256];
   char *comname = 0;
   char procname[100];
+  int in_string;
 
   /* Parse IO redirection.  */
 
@@ -2109,9 +2110,17 @@ child_execute_job (char *argv, struct child *child)
   pnamedsc.dsc$b_dtype = DSC$K_DTYPE_T;
   pnamedsc.dsc$b_class = DSC$K_CLASS_S;
 
+  in_string = 0;
   /* Handle comments and redirection. */
   for (p = argv, q = cmd; *p; p++, q++)
     {
+      if (*p == '"')
+        in_string = !in_string;
+      if (in_string)
+        {
+          *q = *p;
+          continue;
+        }
       switch (*p)
        {
          case '#':
@@ -2167,6 +2176,8 @@ child_execute_job (char *argv, struct child *child)
        }
     }
   *q = *p;
+  while (isspace ((unsigned char)*--q))
+    *q = '\0';
 
   if (strncmp (cmd, "builtin_", 8) == 0)
     {