]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: fix how we decode types and states
authorLennart Poettering <lennart@poettering.net>
Thu, 1 Oct 2015 12:27:20 +0000 (14:27 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 1 Oct 2015 12:27:20 +0000 (14:27 +0200)
There was a bad memory access among other smaller issues.

src/systemctl/systemctl.c

index 0615dd6aa5fe4c8fbf078da7f40a92690bb76927..420a246be15ffcc278861d6930180e9d73e326ff 100644 (file)
@@ -6648,7 +6648,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                                 }
 
                                 if (unit_type_from_string(type) >= 0) {
-                                        if (strv_push(&arg_types, type))
+                                        if (strv_push(&arg_types, type) < 0)
                                                 return log_oom();
                                         type = NULL;
                                         continue;
@@ -6658,7 +6658,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                                  * load states, but let's support this
                                  * in --types= too for compatibility
                                  * with old versions */
-                                if (unit_load_state_from_string(optarg) >= 0) {
+                                if (unit_load_state_from_string(type) >= 0) {
                                         if (strv_push(&arg_states, type) < 0)
                                                 return log_oom();
                                         type = NULL;
@@ -6871,8 +6871,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                                         return 0;
                                 }
 
-                                if (strv_consume(&arg_states, s) < 0)
+                                if (strv_push(&arg_states, s) < 0)
                                         return log_oom();
+
+                                s = NULL;
                         }
                         break;
                 }