From: Zbigniew Jędrzejewski-Szmek Date: Thu, 7 Apr 2022 11:43:18 +0000 (+0200) Subject: Move path_simplify_and_warn() to new shared/parse-helpers.c X-Git-Tag: v251-rc2~162^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c3eaba2d3d0d5c3efab9d9618a5e58d35ceaada3;p=thirdparty%2Fsystemd.git Move path_simplify_and_warn() to new shared/parse-helpers.c This is a high-level function, and it belongs in libsystemd-shared. This way we don't end up linking a separate copy into various binaries. It would even end up in libsystemd, where it is not needed. (Maybe it'd be removed in some optimization phase, but it's better to not rely on that.) $ grep -l -r -a 'path is not absolute%s' build/ build/libnss_systemd.so.2 build/pam_systemd_home.so build/test-dlopen build/src/basic/libbasic.a.p/path-util.c.o build/src/basic/libbasic.a build/src/shared/libsystemd-shared-249.so build/test-bus-error build/libnss_mymachines.so.2 build/pam_systemd.so build/libnss_resolve.so.2 build/libnss_myhostname.so.2 build/libsystemd.so.0.32.0 build/libudev.so.1.7.2 $ grep -l -r -a 'path is not absolute%s' build/ build/src/shared/libsystemd-shared-251.a.p/parse-helpers.c.o build/src/shared/libsystemd-shared-251.a build/src/shared/libsystemd-shared-251.so No functional change. --- diff --git a/src/basic/path-util.c b/src/basic/path-util.c index 979c6f2c9df..94527eff4ca 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -24,7 +24,6 @@ #include "string-util.h" #include "strv.h" #include "time-util.h" -#include "utf8.h" int path_split_and_make_absolute(const char *p, char ***ret) { char **l; @@ -373,52 +372,6 @@ char *path_simplify(char *path) { return path; } -int path_simplify_and_warn( - char *path, - unsigned flag, - const char *unit, - const char *filename, - unsigned line, - const char *lvalue) { - - bool fatal = flag & PATH_CHECK_FATAL; - - assert(!FLAGS_SET(flag, PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)); - - if (!utf8_is_valid(path)) - return log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, path); - - if (flag & (PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)) { - bool absolute; - - absolute = path_is_absolute(path); - - if (!absolute && (flag & PATH_CHECK_ABSOLUTE)) - return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), - "%s= path is not absolute%s: %s", - lvalue, fatal ? "" : ", ignoring", path); - - if (absolute && (flag & PATH_CHECK_RELATIVE)) - return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), - "%s= path is absolute%s: %s", - lvalue, fatal ? "" : ", ignoring", path); - } - - path_simplify(path); - - if (!path_is_valid(path)) - return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), - "%s= path has invalid length (%zu bytes)%s.", - lvalue, strlen(path), fatal ? "" : ", ignoring"); - - if (!path_is_normalized(path)) - return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), - "%s= path is not normalized%s: %s", - lvalue, fatal ? "" : ", ignoring", path); - - return 0; -} - char *path_startswith_full(const char *path, const char *prefix, bool accept_dot_dot) { assert(path); assert(prefix); diff --git a/src/basic/path-util.h b/src/basic/path-util.h index 2f55b3abb16..553aa4fb586 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -77,14 +77,6 @@ char* path_extend_internal(char **x, ...); char* path_simplify(char *path); -enum { - PATH_CHECK_FATAL = 1 << 0, /* If not set, then error message is appended with 'ignoring'. */ - PATH_CHECK_ABSOLUTE = 1 << 1, - PATH_CHECK_RELATIVE = 1 << 2, -}; - -int path_simplify_and_warn(char *path, unsigned flag, const char *unit, const char *filename, unsigned line, const char *lvalue); - static inline bool path_equal_ptr(const char *a, const char *b) { return !!a == !!b && (!a || path_equal(a, b)); } diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 66e0c01c232..b81db4617ba 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -50,6 +50,7 @@ #include "mountpoint-util.h" #include "nulstr-util.h" #include "parse-socket-bind-item.h" +#include "parse-helpers.h" #include "parse-util.h" #include "path-util.h" #include "percent-util.h" diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index db6cedfb163..2ad175c2483 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -23,8 +23,7 @@ #include "main-func.h" #include "mkdir.h" #include "parse-argument.h" -#include "parse-util.h" -#include "path-util.h" +#include "parse-helpers.h" #include "pretty-print.h" #include "process-util.h" #include "rlimit-util.h" diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c index ac626495bc1..03ac92daaf1 100644 --- a/src/network/netdev/macsec.c +++ b/src/network/netdev/macsec.c @@ -14,7 +14,7 @@ #include "memory-util.h" #include "netlink-util.h" #include "networkd-manager.h" -#include "path-util.h" +#include "parse-helpers.h" #include "socket-util.h" #include "string-table.h" #include "string-util.h" diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c index 32525e6200c..fc2c6288ae9 100644 --- a/src/network/netdev/wireguard.c +++ b/src/network/netdev/wireguard.c @@ -23,8 +23,8 @@ #include "networkd-route-util.h" #include "networkd-route.h" #include "networkd-util.h" +#include "parse-helpers.h" #include "parse-util.h" -#include "path-util.h" #include "random-util.h" #include "resolve-private.h" #include "string-util.h" diff --git a/src/partition/repart.c b/src/partition/repart.c index 118ab6c7d08..b6ac17c75e5 100644 --- a/src/partition/repart.c +++ b/src/partition/repart.c @@ -46,8 +46,7 @@ #include "mount-util.h" #include "mountpoint-util.h" #include "parse-argument.h" -#include "parse-util.h" -#include "path-util.h" +#include "parse-helpers.h" #include "pretty-print.h" #include "proc-cmdline.h" #include "process-util.h" diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c index aeea0a02d52..6c105e7fd27 100644 --- a/src/shared/conf-parser.c +++ b/src/shared/conf-parser.c @@ -24,6 +24,7 @@ #include "macro.h" #include "missing_network.h" #include "nulstr-util.h" +#include "parse-helpers.h" #include "parse-util.h" #include "path-util.h" #include "percent-util.h" diff --git a/src/shared/meson.build b/src/shared/meson.build index 4333c9a0a90..8f1f3b40a9b 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -245,6 +245,8 @@ shared_sources = files( 'pager.h', 'parse-argument.c', 'parse-argument.h', + 'parse-helpers.c', + 'parse-helpers.h', 'parse-socket-bind-item.c', 'parse-socket-bind-item.h', 'pcre2-dlopen.c', diff --git a/src/shared/parse-helpers.c b/src/shared/parse-helpers.c new file mode 100644 index 00000000000..5ebe366265a --- /dev/null +++ b/src/shared/parse-helpers.c @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "log.h" +#include "parse-helpers.h" +#include "path-util.h" +#include "utf8.h" + +int path_simplify_and_warn( + char *path, + unsigned flag, + const char *unit, + const char *filename, + unsigned line, + const char *lvalue) { + + bool fatal = flag & PATH_CHECK_FATAL; + + assert(!FLAGS_SET(flag, PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)); + + if (!utf8_is_valid(path)) + return log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, path); + + if (flag & (PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)) { + bool absolute; + + absolute = path_is_absolute(path); + + if (!absolute && (flag & PATH_CHECK_ABSOLUTE)) + return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), + "%s= path is not absolute%s: %s", + lvalue, fatal ? "" : ", ignoring", path); + + if (absolute && (flag & PATH_CHECK_RELATIVE)) + return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), + "%s= path is absolute%s: %s", + lvalue, fatal ? "" : ", ignoring", path); + } + + path_simplify(path); + + if (!path_is_valid(path)) + return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), + "%s= path has invalid length (%zu bytes)%s.", + lvalue, strlen(path), fatal ? "" : ", ignoring"); + + if (!path_is_normalized(path)) + return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), + "%s= path is not normalized%s: %s", + lvalue, fatal ? "" : ", ignoring", path); + + return 0; +} diff --git a/src/shared/parse-helpers.h b/src/shared/parse-helpers.h new file mode 100644 index 00000000000..8b1d33498c3 --- /dev/null +++ b/src/shared/parse-helpers.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +enum { + PATH_CHECK_FATAL = 1 << 0, /* If not set, then error message is appended with 'ignoring'. */ + PATH_CHECK_ABSOLUTE = 1 << 1, + PATH_CHECK_RELATIVE = 1 << 2, +}; + +int path_simplify_and_warn( + char *path, + unsigned flag, + const char *unit, + const char *filename, + unsigned line, + const char *lvalue); diff --git a/src/sysupdate/sysupdate-transfer.c b/src/sysupdate/sysupdate-transfer.c index a9fceed6011..e5bbbadc162 100644 --- a/src/sysupdate/sysupdate-transfer.c +++ b/src/sysupdate/sysupdate-transfer.c @@ -12,8 +12,8 @@ #include "gpt.h" #include "hexdecoct.h" #include "install-file.h" +#include "parse-helpers.h" #include "parse-util.h" -#include "path-util.h" #include "process-util.h" #include "rm-rf.h" #include "specifier.h"