]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
exec-util: modernize exec_command_flags_{to,from}_strv
authorMike Yuan <me@yhndnzj.com>
Wed, 10 Jul 2024 20:23:37 +0000 (22:23 +0200)
committerMike Yuan <me@yhndnzj.com>
Sat, 20 Jul 2024 07:37:07 +0000 (09:37 +0200)
- Rename ret params following our coding style
- Use assertion where appropriate
- Use BIT_FOREACH()

src/shared/exec-util.c
src/shared/exec-util.h
src/test/test-exec-util.c

index 996edbf997a60f92deb82f9390430e35228d3aff..5408be5328b2e21155b7a02cf8454bf605daca9a 100644 (file)
@@ -8,6 +8,7 @@
 #include <stdio.h>
 
 #include "alloc-util.h"
+#include "bitfield.h"
 #include "conf-files.h"
 #include "env-file.h"
 #include "env-util.h"
@@ -425,46 +426,42 @@ static int gather_environment_consume(int fd, void *arg) {
         return r;
 }
 
-int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags) {
-        ExecCommandFlags ex_flag, ret_flags = 0;
+int exec_command_flags_from_strv(char * const *ex_opts, ExecCommandFlags *ret) {
+        ExecCommandFlags flags = 0;
 
-        assert(flags);
+        assert(ret);
 
         STRV_FOREACH(opt, ex_opts) {
-                ex_flag = exec_command_flags_from_string(*opt);
-                if (ex_flag < 0)
-                        return ex_flag;
-                ret_flags |= ex_flag;
+                ExecCommandFlags fl = exec_command_flags_from_string(*opt);
+                if (fl < 0)
+                        return fl;
+
+                flags |= fl;
         }
 
-        *flags = ret_flags;
+        *ret = flags;
 
         return 0;
 }
 
-int exec_command_flags_to_strv(ExecCommandFlags flags, char ***ex_opts) {
-        _cleanup_strv_free_ char **ret_opts = NULL;
-        ExecCommandFlags it = flags;
-        const char *str;
+int exec_command_flags_to_strv(ExecCommandFlags flags, char ***ret) {
+        _cleanup_strv_free_ char **opts = NULL;
         int r;
 
-        assert(ex_opts);
-
-        if (flags < 0)
-                return flags;
+        assert(flags >= 0);
+        assert(ret);
 
-        for (unsigned i = 0; it != 0; it &= ~(1 << i), i++)
-                if (FLAGS_SET(flags, (1 << i))) {
-                        str = exec_command_flags_to_string(1 << i);
-                        if (!str)
-                                return -EINVAL;
+        BIT_FOREACH(i, flags) {
+                const char *s = exec_command_flags_to_string(1 << i);
+                if (!s)
+                        return -EINVAL;
 
-                        r = strv_extend(&ret_opts, str);
-                        if (r < 0)
-                                return r;
-                }
+                r = strv_extend(&opts, s);
+                if (r < 0)
+                        return r;
+        }
 
-        *ex_opts = TAKE_PTR(ret_opts);
+        *ret = TAKE_PTR(opts);
 
         return 0;
 }
index b99336ee3be40398909a25b988a36a869d8b0082..6c2d6b19cdebad2682e14370811de45d12a4f590 100644 (file)
@@ -51,8 +51,8 @@ int execute_directories(
                 char *envp[],
                 ExecDirFlags flags);
 
-int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags);
-int exec_command_flags_to_strv(ExecCommandFlags flags, char ***ex_opts);
+int exec_command_flags_from_strv(char * const *ex_opts, ExecCommandFlags *ret);
+int exec_command_flags_to_strv(ExecCommandFlags flags, char ***ret);
 
 extern const gather_stdout_callback_t gather_environment[_STDOUT_CONSUME_MAX];
 
index 533c988a4720f4d6183f8c5430e5df0279790e03..301e02db0b84d9f85baea3fc6565e099f6e96e6c 100644 (file)
@@ -429,27 +429,19 @@ TEST(exec_command_flags_from_strv) {
 }
 
 TEST(exec_command_flags_to_strv) {
-        _cleanup_strv_free_ char **opts = NULL, **empty_opts = NULL, **invalid_opts = NULL;
-        ExecCommandFlags flags = 0;
-        int r;
-
-        flags |= (EXEC_COMMAND_AMBIENT_MAGIC|EXEC_COMMAND_NO_ENV_EXPAND|EXEC_COMMAND_IGNORE_FAILURE);
-
-        r = exec_command_flags_to_strv(flags, &opts);
+        _cleanup_strv_free_ char **opts = NULL;
 
-        assert_se(r == 0);
+        ASSERT_OK(exec_command_flags_to_strv(EXEC_COMMAND_AMBIENT_MAGIC|EXEC_COMMAND_NO_ENV_EXPAND|EXEC_COMMAND_IGNORE_FAILURE, &opts));
         assert_se(strv_equal(opts, STRV_MAKE("ignore-failure", "ambient", "no-env-expand")));
 
-        r = exec_command_flags_to_strv(0, &empty_opts);
-
-        assert_se(r == 0);
-        assert_se(strv_equal(empty_opts, STRV_MAKE_EMPTY));
+        opts = strv_free(opts);
 
-        flags = _EXEC_COMMAND_FLAGS_INVALID;
+        ASSERT_OK(exec_command_flags_to_strv(0, &opts));
+        assert_se(strv_isempty(opts));
 
-        r = exec_command_flags_to_strv(flags, &invalid_opts);
+        opts = strv_free(opts);
 
-        assert_se(r == -EINVAL);
+        ASSERT_ERROR(exec_command_flags_to_strv(1U << 20, &opts), EINVAL);
 }
 
 DEFINE_TEST_MAIN(LOG_DEBUG);