From d3b6d0c21ea5a0d15ec6dbd8b8d179138b7463bc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sat, 13 Apr 2013 20:22:53 -0400 Subject: [PATCH] fileio: in envfiles, do not skip lines following empty lines https://bugs.freedesktop.org/show_bug.cgi?id=63477 --- src/binfmt/binfmt.c | 2 +- src/journal/catalog.c | 2 +- src/modules-load/modules-load.c | 2 +- src/shared/conf-parser.c | 2 +- src/shared/install.c | 2 +- src/shared/util.h | 2 +- src/sysctl/sysctl.c | 2 +- src/test/test-unit-file.c | 31 +++++++++++++++++++++++++++++++ 8 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c index 9ca1e604c..5a42b3dbe 100644 --- a/src/binfmt/binfmt.c +++ b/src/binfmt/binfmt.c @@ -110,7 +110,7 @@ static int apply_file(const char *path, bool ignore_enoent) { p = strstrip(l); if (!*p) continue; - if (strchr(COMMENTS, *p)) + if (strchr(COMMENTS "\n", *p)) continue; k = apply_rule(p); diff --git a/src/journal/catalog.c b/src/journal/catalog.c index ebf062260..7681af662 100644 --- a/src/journal/catalog.c +++ b/src/journal/catalog.c @@ -180,7 +180,7 @@ int catalog_import_file(Hashmap *h, struct strbuf *sb, const char *path) { continue; } - if (strchr(COMMENTS, line[0])) + if (strchr(COMMENTS "\n", line[0])) continue; if (empty_line && diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c index 9ee260302..b3f7af0ef 100644 --- a/src/modules-load/modules-load.c +++ b/src/modules-load/modules-load.c @@ -206,7 +206,7 @@ static int apply_file(struct kmod_ctx *ctx, const char *path, bool ignore_enoent l = strstrip(line); if (!*l) continue; - if (strchr(COMMENTS, *l)) + if (strchr(COMMENTS "\n", *l)) continue; k = load_module(ctx, l); diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index fbacf986a..fea2e5624 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -174,7 +174,7 @@ static int parse_line( if (!*l) return 0; - if (strchr(COMMENTS, *l)) + if (strchr(COMMENTS "\n", *l)) return 0; if (startswith(l, ".include ")) { diff --git a/src/shared/install.c b/src/shared/install.c index f9d223eee..71e04335e 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -1699,7 +1699,7 @@ int unit_file_query_preset(UnitFileScope scope, const char *name) { if (!*l) continue; - if (strchr(COMMENTS, *l)) + if (strchr(COMMENTS "\n", *l)) continue; if (first_word(l, "enable")) { diff --git a/src/shared/util.h b/src/shared/util.h index 99ec0a39b..ad9753655 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -52,7 +52,7 @@ union dirent_storage { #define WHITESPACE " \t\n\r" #define NEWLINE "\n\r" #define QUOTES "\"\'" -#define COMMENTS "#;\n" +#define COMMENTS "#;" #define FORMAT_BYTES_MAX 8 diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c index e0ba78a2f..db18dd9f6 100644 --- a/src/sysctl/sysctl.c +++ b/src/sysctl/sysctl.c @@ -149,7 +149,7 @@ static int parse_file(Hashmap *sysctl_options, const char *path, bool ignore_eno if (!*p) continue; - if (strchr(COMMENTS, *p)) + if (strchr(COMMENTS "\n", *p)) continue; value = strchr(p, '='); diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c index 3cf84637e..1bf11e66a 100644 --- a/src/test/test-unit-file.c +++ b/src/test/test-unit-file.c @@ -199,6 +199,17 @@ static void test_config_parse_exec(void) { "#--nouser-config \\\n" \ "normal=line" +#define env_file_4 \ + "# Generated\n" \ + "\n" \ + "HWMON_MODULES=\"coretemp f71882fg\"\n" \ + "\n" \ + "# For compatibility reasons\n" \ + "\n" \ + "MODULE_0=coretemp\n" \ + "MODULE_1=f71882fg" + + static void test_load_env_file_1(void) { char _cleanup_strv_free_ **data = NULL; int r; @@ -251,6 +262,25 @@ static void test_load_env_file_3(void) { unlink(name); } +static void test_load_env_file_4(void) { + char _cleanup_strv_free_ **data = NULL; + int r; + + char name[] = "/tmp/test-load-env-file.XXXXXX"; + int _cleanup_close_ fd = mkstemp(name); + assert(fd >= 0); + assert_se(write(fd, env_file_4, sizeof(env_file_4)) == sizeof(env_file_4)); + + r = load_env_file(name, NULL, &data); + assert(r == 0); + assert(streq(data[0], "HWMON_MODULES=coretemp f71882fg")); + assert(streq(data[1], "MODULE_0=coretemp")); + assert(streq(data[2], "MODULE_1=f71882fg")); + assert(data[3] == NULL); + unlink(name); +} + + #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wnonnull" @@ -327,6 +357,7 @@ int main(int argc, char *argv[]) { test_load_env_file_1(); test_load_env_file_2(); test_load_env_file_3(); + test_load_env_file_4(); test_install_printf(); return 0; -- 2.30.2