From: Lennart Poettering Date: Thu, 25 Feb 2021 12:16:36 +0000 (+0100) Subject: env-util: fix parameter handling of parse_env_extension_hierarchies() + getenv_path_l... X-Git-Tag: v248-rc3~110^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=33d31c0e60502a926e68b653055a4744166c5e3d;p=thirdparty%2Fsystemd.git env-util: fix parameter handling of parse_env_extension_hierarchies() + getenv_path_list() Our coding style dictates we should not clobber return parameters on failure, and always initialize them on success. Do so here. This changes getenv_path_list() to return ENXIO if the env var is not set, which is similar to how we handle this in getenv_bool(). This drops debug logging from parse_env_extension_hierarchies(), since it's done anyway in getenv_path_list() Follow-up for: #18018 --- diff --git a/src/basic/env-util.c b/src/basic/env-util.c index 7fa598a3b53..c110a750a55 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -813,11 +813,9 @@ int getenv_path_list(const char *name, char ***ret_paths) { assert(name); assert(ret_paths); - *ret_paths = NULL; - e = secure_getenv(name); if (!e) - return 0; + return -ENXIO; r = strv_split_full(&l, e, ":", EXTRACT_DONT_COALESCE_SEPARATORS); if (r < 0) @@ -842,5 +840,5 @@ int getenv_path_list(const char *name, char ***ret_paths) { "No paths specified, refusing."); *ret_paths = TAKE_PTR(l); - return 0; + return 1; } diff --git a/src/shared/extension-release.c b/src/shared/extension-release.c index 5676e2c0630..29cbecbf57d 100644 --- a/src/shared/extension-release.c +++ b/src/shared/extension-release.c @@ -79,16 +79,18 @@ int extension_release_validate( } int parse_env_extension_hierarchies(char ***ret_hierarchies) { + _cleanup_free_ char **l = NULL; int r; - r = getenv_path_list("SYSTEMD_SYSEXT_HIERARCHIES", ret_hierarchies); - if (r < 0) - return log_debug_errno(r, "Failed to parse SYSTEMD_SYSEXT_HIERARCHIES environment variable : %m"); - if (!*ret_hierarchies) { - *ret_hierarchies = strv_new("/usr", "/opt"); - if (!*ret_hierarchies) + r = getenv_path_list("SYSTEMD_SYSEXT_HIERARCHIES", &l); + if (r == -ENXIO) { + /* Default when unset */ + l = strv_new("/usr", "/opt"); + if (!l) return -ENOMEM; - } + } else if (r < 0) + return r; + *ret_hierarchies = TAKE_PTR(l); return 0; }