diff --git a/src/basic/path-util.c b/src/basic/path-util.c index 979c6f2c9d..94527eff4c 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 2f55b3abb1..553aa4fb58 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 66e0c01c23..b81db4617b 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 db6cedfb16..2ad175c248 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 ac626495bc..03ac92daaf 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 32525e6200..fc2c6288ae 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 118ab6c7d0..b6ac17c75e 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 aeea0a02d5..6c105e7fd2 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 4333c9a0a9..8f1f3b40a9 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 0000000000..5ebe366265 --- /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 0000000000..8b1d33498c --- /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 a9fceed601..e5bbbadc16 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"