X-Git-Url: https://git.toastfreeware.priv.at/gregoa/bti.git/blobdiff_plain/0b6b14f8523b6d14af373ce66e610093b2297dc8..7bd46ac1510e64b3011ed7e1d4482b29cbced5f9:/config.c diff --git a/config.c b/config.c index 346fed8..e06f480 100644 --- a/config.c +++ b/config.c @@ -327,6 +327,7 @@ void bti_parse_configfile(struct session *session) char *line = NULL; char *key = NULL; char *value = NULL; + char *hashmarker; size_t len = 0; ssize_t n; char *c; @@ -344,8 +345,29 @@ void bti_parse_configfile(struct session *session) if (line[n - 1] == '\n') line[n - 1] = '\0'; - /* '#' is comment markers, like bash style */ - *strchrnul(line, '#') = '\0'; + /* + * '#' is comment markers, like bash style but it is a valid + * character in some fields, so only treat it as a comment + * marker if it occurs at the beginning of the line, or after + * whitespace + */ + hashmarker = strchrnul(line, '#'); + if (line == hashmarker) + line[0] = '\0'; + else { + while (hashmarker[0] != '\0') { + --hashmarker; + if (isblank(hashmarker[0])) + hashmarker[0] = '\0'; + else { + /* + * false positive; '#' occured + * within a string + */ + hashmarker = strchrnul(hashmarker+2, '#'); + } + } + } c = line; while (isspace(*c)) c++;