From 22b261575fdcafe31f62eff470ce9a9748a53beb Mon Sep 17 00:00:00 2001 From: Allan Nathanson <42244061+Allan-N@users.noreply.github.com> Date: Wed, 30 Oct 2024 16:52:41 -0400 Subject: [PATCH] config.c: retain leading whitespace before comments Configurations loaded with the ast_config_load2() API and later written out with ast_config_text_file_save2() will have any leading whitespace stripped away. The APIs should make reasonable efforts to maintain the content and formatting of the configuration files. This change retains any leading whitespace from comment lines that start with a ";". Resolves: https://github.com/asterisk/asterisk/issues/970 --- main/config.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main/config.c b/main/config.c index 251c33be19..7f5503d111 100644 --- a/main/config.c +++ b/main/config.c @@ -2483,6 +2483,18 @@ static struct ast_config *config_text_file_load(const char *database, const char if (!comment) { /* If ; is found, and we are not nested in a comment, we immediately stop all comment processing */ + while ((comment_p > new_buf) && isspace(*(comment_p - 1))) { + /* To preserve comment formatting we want to include any + whitespace before the ";" */ + comment_p--; + } + if ((comment_p != new_buf) && (*comment_p == ' ') && (*(comment_p + 1) == ' ')) { + /* If the comment (w/whitespace) does not start in column 1 + then, when written out, the preceeding variable/value will + be separated from the comment by two spaces. To preserve + comment formatting we should also take this into account. */ + comment_p += 2; + } if (ast_test_flag(&flags, CONFIG_FLAG_WITHCOMMENTS)) { CB_ADD(&lline_buffer, comment_p); } -- 2.47.2