diff --git a/coccinelle/empty-or-dash.cocci b/coccinelle/empty-or-dash.cocci new file mode 100644 index 0000000000..bebaead2ff --- /dev/null +++ b/coccinelle/empty-or-dash.cocci @@ -0,0 +1,5 @@ +@@ +expression s; +@@ +- (isempty(s) || streq(s, "-")) ++ empty_or_dash(s) diff --git a/src/basic/string-util.h b/src/basic/string-util.h index 9cf11198b1..b23f4c8341 100644 --- a/src/basic/string-util.h +++ b/src/basic/string-util.h @@ -57,6 +57,16 @@ static inline const char *empty_to_dash(const char *str) { return isempty(str) ? "-" : str; } +static inline bool empty_or_dash(const char *str) { + return !str || + str[0] == 0 || + (str[0] == '-' && str[1] == 0); +} + +static inline const char *empty_or_dash_to_null(const char *p) { + return empty_or_dash(p) ? NULL : p; +} + static inline char *startswith(const char *s, const char *prefix) { size_t l; diff --git a/src/import/export.c b/src/import/export.c index 4566a66a15..77d24b8635 100644 --- a/src/import/export.c +++ b/src/import/export.c @@ -78,8 +78,7 @@ static int export_tar(int argc, char *argv[], void *userdata) { if (argc >= 3) path = argv[2]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); determine_compression_from_filename(path); @@ -155,8 +154,7 @@ static int export_raw(int argc, char *argv[], void *userdata) { if (argc >= 3) path = argv[2]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); determine_compression_from_filename(path); diff --git a/src/import/import-fs.c b/src/import/import-fs.c index 974c0f5536..04344492c8 100644 --- a/src/import/import-fs.c +++ b/src/import/import-fs.c @@ -117,15 +117,13 @@ static int import_fs(int argc, char *argv[], void *userdata) { if (argc >= 2) path = argv[1]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); if (argc >= 3) local = argv[2]; else if (path) local = basename(path); - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { if (!machine_name_is_valid(local)) { diff --git a/src/import/import.c b/src/import/import.c index e3a1ae8a8b..cc28557459 100644 --- a/src/import/import.c +++ b/src/import/import.c @@ -49,15 +49,13 @@ static int import_tar(int argc, char *argv[], void *userdata) { if (argc >= 2) path = argv[1]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); if (argc >= 3) local = argv[2]; else if (path) local = basename(path); - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { r = tar_strip_suffixes(local, &ll); @@ -145,15 +143,13 @@ static int import_raw(int argc, char *argv[], void *userdata) { if (argc >= 2) path = argv[1]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); if (argc >= 3) local = argv[2]; else if (path) local = basename(path); - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { r = raw_strip_suffixes(local, &ll); diff --git a/src/import/pull.c b/src/import/pull.c index 68b1221b72..7e8712493f 100644 --- a/src/import/pull.c +++ b/src/import/pull.c @@ -64,8 +64,7 @@ static int pull_tar(int argc, char *argv[], void *userdata) { local = l; } - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { r = tar_strip_suffixes(local, &ll); @@ -151,8 +150,7 @@ static int pull_raw(int argc, char *argv[], void *userdata) { local = l; } - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { r = raw_strip_suffixes(local, &ll); diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c index 17540089ba..b8bd181c16 100644 --- a/src/locale/keymap-util.c +++ b/src/locale/keymap-util.c @@ -32,10 +32,6 @@ static bool startswith_comma(const char *s, const char *prefix) { return IN_SET(*s, ',', '\0'); } -static const char* strnulldash(const char *s) { - return isempty(s) || streq(s, "-") ? NULL : s; -} - static const char* systemd_kbd_model_map(void) { const char* s; @@ -551,15 +547,15 @@ int vconsole_convert_to_x11(Context *c) { if (!streq(c->vc_keymap, a[0])) continue; - if (!streq_ptr(c->x11_layout, strnulldash(a[1])) || - !streq_ptr(c->x11_model, strnulldash(a[2])) || - !streq_ptr(c->x11_variant, strnulldash(a[3])) || - !streq_ptr(c->x11_options, strnulldash(a[4]))) { + if (!streq_ptr(c->x11_layout, empty_or_dash_to_null(a[1])) || + !streq_ptr(c->x11_model, empty_or_dash_to_null(a[2])) || + !streq_ptr(c->x11_variant, empty_or_dash_to_null(a[3])) || + !streq_ptr(c->x11_options, empty_or_dash_to_null(a[4]))) { - if (free_and_strdup(&c->x11_layout, strnulldash(a[1])) < 0 || - free_and_strdup(&c->x11_model, strnulldash(a[2])) < 0 || - free_and_strdup(&c->x11_variant, strnulldash(a[3])) < 0 || - free_and_strdup(&c->x11_options, strnulldash(a[4])) < 0) + if (free_and_strdup(&c->x11_layout, empty_or_dash_to_null(a[1])) < 0 || + free_and_strdup(&c->x11_model, empty_or_dash_to_null(a[2])) < 0 || + free_and_strdup(&c->x11_variant, empty_or_dash_to_null(a[3])) < 0 || + free_and_strdup(&c->x11_options, empty_or_dash_to_null(a[4])) < 0) return -ENOMEM; modified = true; diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index c8607bcec3..d98027a0ca 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -1993,16 +1993,6 @@ static int transfer_image_common(sd_bus *bus, sd_bus_message *m) { return -r; } -static const char *nullify_dash(const char *p) { - if (isempty(p)) - return NULL; - - if (streq(p, "-")) - return NULL; - - return p; -} - static int import_tar(int argc, char *argv[], void *userdata) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; _cleanup_free_ char *ll = NULL, *fn = NULL; @@ -2014,10 +2004,10 @@ static int import_tar(int argc, char *argv[], void *userdata) { assert(bus); if (argc >= 2) - path = nullify_dash(argv[1]); + path = empty_or_dash_to_null(argv[1]); if (argc >= 3) - local = nullify_dash(argv[2]); + local = empty_or_dash_to_null(argv[2]); else if (path) { r = path_extract_filename(path, &fn); if (r < 0) @@ -2081,10 +2071,10 @@ static int import_raw(int argc, char *argv[], void *userdata) { assert(bus); if (argc >= 2) - path = nullify_dash(argv[1]); + path = empty_or_dash_to_null(argv[1]); if (argc >= 3) - local = nullify_dash(argv[2]); + local = empty_or_dash_to_null(argv[2]); else if (path) { r = path_extract_filename(path, &fn); if (r < 0) @@ -2148,10 +2138,10 @@ static int import_fs(int argc, char *argv[], void *userdata) { assert(bus); if (argc >= 2) - path = nullify_dash(argv[1]); + path = empty_or_dash_to_null(argv[1]); if (argc >= 3) - local = nullify_dash(argv[2]); + local = empty_or_dash_to_null(argv[2]); else if (path) { r = path_extract_filename(path, &fn); if (r < 0) @@ -2230,8 +2220,7 @@ static int export_tar(int argc, char *argv[], void *userdata) { if (argc >= 3) path = argv[2]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); if (path) { determine_compression_from_filename(path); @@ -2280,8 +2269,7 @@ static int export_raw(int argc, char *argv[], void *userdata) { if (argc >= 3) path = argv[2]; - if (isempty(path) || streq(path, "-")) - path = NULL; + path = empty_or_dash_to_null(path); if (path) { determine_compression_from_filename(path); @@ -2338,8 +2326,7 @@ static int pull_tar(int argc, char *argv[], void *userdata) { local = l; } - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { r = tar_strip_suffixes(local, &ll); @@ -2402,8 +2389,7 @@ static int pull_raw(int argc, char *argv[], void *userdata) { local = l; } - if (isempty(local) || streq(local, "-")) - local = NULL; + local = empty_or_dash_to_null(local); if (local) { r = raw_strip_suffixes(local, &ll); diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c index 9a85a20be3..843c3837d1 100644 --- a/src/sysusers/sysusers.c +++ b/src/sysusers/sysusers.c @@ -1411,7 +1411,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { "[%s:%u] Unknown command type '%c'.", fname, line, action[0]); /* Verify name */ - if (isempty(name) || streq(name, "-")) + if (empty_or_dash(name)) name = mfree(name); if (name) { @@ -1426,7 +1426,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { } /* Verify id */ - if (isempty(id) || streq(id, "-")) + if (empty_or_dash(id)) id = mfree(id); if (id) { @@ -1437,7 +1437,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { } /* Verify description */ - if (isempty(description) || streq(description, "-")) + if (empty_or_dash(description)) description = mfree(description); if (description) { @@ -1453,7 +1453,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { } /* Verify home */ - if (isempty(home) || streq(home, "-")) + if (empty_or_dash(home)) home = mfree(home); if (home) { @@ -1469,7 +1469,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer) { } /* Verify shell */ - if (isempty(shell) || streq(shell, "-")) + if (empty_or_dash(shell)) shell = mfree(shell); if (shell) { diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index 84e104f9b5..d9d1cc1c1a 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -2507,7 +2507,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool return -EIO; } - if (!isempty(buffer) && !streq(buffer, "-")) { + if (!empty_or_dash(buffer)) { i.argument = strdup(buffer); if (!i.argument) return log_oom(); @@ -2704,7 +2704,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool free_and_replace(i.path, p); } - if (!isempty(user) && !streq(user, "-")) { + if (!empty_or_dash(user)) { const char *u = user; r = get_user_creds(&u, &i.uid, NULL, NULL, NULL, USER_CREDS_ALLOW_MISSING); @@ -2716,7 +2716,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool i.uid_set = true; } - if (!isempty(group) && !streq(group, "-")) { + if (!empty_or_dash(group)) { const char *g = group; r = get_group_creds(&g, &i.gid, USER_CREDS_ALLOW_MISSING); @@ -2729,7 +2729,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool i.gid_set = true; } - if (!isempty(mode) && !streq(mode, "-")) { + if (!empty_or_dash(mode)) { const char *mm = mode; unsigned m; @@ -2749,7 +2749,7 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, bool } else i.mode = IN_SET(i.type, CREATE_DIRECTORY, TRUNCATE_DIRECTORY, CREATE_SUBVOLUME, CREATE_SUBVOLUME_INHERIT_QUOTA, CREATE_SUBVOLUME_NEW_QUOTA) ? 0755 : 0644; - if (!isempty(age) && !streq(age, "-")) { + if (!empty_or_dash(age)) { const char *a = age; if (*a == '~') {