[exim-cvs] Config lines are immutable during -bP config du…

Páxina inicial
Borrar esta mensaxe
Responder a esta mensaxe
Autor: Exim Git Commits Mailing List
Data:  
Para: exim-cvs
Asunto: [exim-cvs] Config lines are immutable during -bP config dump
Gitweb: https://git.exim.org/exim.git/commitdiff/d21db862df4dff3a73fb4bb4adb9d3e2bfa5c57e
Commit:     d21db862df4dff3a73fb4bb4adb9d3e2bfa5c57e
Parent:     421ca3fabe03ef9b76cfbd72491b8cc98effa83e
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Sun May 16 12:52:36 2021 +0100
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Mon Jun 28 00:30:02 2021 +0100


    Config lines are immutable during  -bP config  dump
---
 src/src/readconf.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)


diff --git a/src/src/readconf.c b/src/src/readconf.c
index 5d14be8..01e85a3 100644
--- a/src/src/readconf.c
+++ b/src/src/readconf.c
@@ -4419,25 +4419,28 @@ print_config(BOOL admin, BOOL terse)
{
const int TS = terse ? 0 : 2;
int indent = 0;
+rmark r = NULL;

-for (config_line_item * i = config_lines; i; i = i->next)
+for (const config_line_item * i = config_lines; i; i = i->next)
{
- uschar *current;
- uschar *p;
+ uschar * current, * p;
+
+ if (r) store_reset(r);
+ r = store_mark();

   /* skip over to the first non-space */
-  for (current = i->line; *current && isspace(*current); ++current)
+  for (current = string_copy(i->line); *current && isspace(*current); ++current)
     ;


-  if (*current == '\0')
+  if (!*current)
     continue;


   /* Collapse runs of spaces. We stop this if we encounter one of the
-   * following characters: "'$, as this may indicate careful formatting */
-  for (p = current; *p; ++p)
+  following characters: "'$, as this may indicate careful formatting */
+
+  for (p = current; *p; p++) if (isspace(*p))
     {
     uschar *next;
-    if (!isspace(*p)) continue;
     if (*p != ' ') *p = ' ';


     for (next = p; isspace(*next); ++next)
@@ -4491,6 +4494,7 @@ for (config_line_item * i = config_lines; i; i = i->next)
     /* rest is public */
     printf("%*s%s\n", indent, "", current);
   }
+if (r) store_reset(r);
 }


 #endif    /*!MACRO_PREDEF*/