]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
Bash-5.2 patch 3: preserve newlines while parsing command substitutions
authorChet Ramey <chet.ramey@case.edu>
Mon, 7 Nov 2022 16:39:47 +0000 (11:39 -0500)
committerChet Ramey <chet.ramey@case.edu>
Mon, 7 Nov 2022 16:39:47 +0000 (11:39 -0500)
patchlevel.h
print_cmd.c

index d465c2443c964c80fa2bbeb5b3192e49a6f7c038..40f26f7b395cc0c89e4bf0c7d05006b771bb333b 100644 (file)
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 2
+#define PATCHLEVEL 3
 
 #endif /* _PATCHLEVEL_H_ */
index eef9bb6a051798480205770662074cfce789cb71..b815494714ce1943f98db74c511e762afd7b3874 100644 (file)
@@ -297,10 +297,12 @@ make_command_string_internal (command)
            case '\n':                          /* special case this */
              {
                char c = command->value.Connection->connector;
+               int was_newline;
 
                s[0] = printing_comsub ? c : ';';
                s[1] = '\0';
 
+               was_newline = deferred_heredocs == 0 && was_heredoc == 0 && c == '\n';
                if (deferred_heredocs == 0)
                  {
                    if (was_heredoc == 0)
@@ -314,6 +316,8 @@ make_command_string_internal (command)
 
                if (inside_function_def)
                  cprintf ("\n");
+               else if (printing_comsub && c == '\n' && was_newline == 0)
+                 cprintf ("\n");       /* preserve newlines in comsubs but don't double them */
                else
                  {
                    if (c == ';')
@@ -1365,7 +1369,11 @@ print_function_def (func)
       cmdcopy->redirects = func_redirects;
     }
   else
-    newline ("}");
+    {
+      /* { */
+      newline ("}");
+      was_heredoc = 0;         /* not printing any here-documents now */
+    }
 
   dispose_command (cmdcopy);
 }
@@ -1442,7 +1450,10 @@ named_function_string (name, command, flags)
       cmdcopy->redirects = func_redirects;
     }
   else
-    newline ("}");
+    {  /* { */
+      newline ("}");
+      was_heredoc = 0;
+    }
 
   result = the_printed_command;