support for a continuations lines escaped by backslash (\). All lines ends on \ will be appended with a next one(s).
fixes https://bugs.freedesktop.org/show_bug.cgi?id=58083 --- src/shared/util.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/shared/util.c b/src/shared/util.c index 49b5844..f7270c4 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -778,6 +778,8 @@ int load_env_file( char ***rl) { FILE *f; + char *b = NULL; + char *c = NULL; char **m = NULL; int r; @@ -807,6 +809,31 @@ int load_env_file( if (strchr(COMMENTS, *p)) continue; + if (endswith(p, "\\")) { + *(p+strlen(p)-1) = '\0'; + + if (!(c = strappend(b, p))) { + r = log_oom(); + goto finish; + } + + free(b); + b = c; + continue; + } + + if (b) { + + if (!(c = strappend(b, p))) { + r = log_oom(); + goto finish; + } + + free(b); + b = NULL; + p = c; + } + if (!(u = normalize_env_assignment(p))) { r = log_oom(); goto finish; @@ -814,6 +841,7 @@ int load_env_file( t = strv_append(m, u); free(u); + free(c); if (!t) { r = log_oom(); @@ -833,6 +861,12 @@ finish: if (f) fclose(f); + if (b) { + free(b); + log_error("Failed to parse environment file %s: premature end of file.", fname); + r = 0; + } + strv_free(m); return r; -- 1.7.10.4 _______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
