]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pid1: split out helper func for two similar code paths
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 16 Jul 2019 10:54:05 +0000 (12:54 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 16 Jul 2019 12:29:04 +0000 (14:29 +0200)
src/core/dbus-timer.c

index 807ca8022a7a601bfcbd791c8b2a01fc6e2bf974..f2981591be294cf27ec77b09bdc32ae9e7f53b9e 100644 (file)
@@ -137,6 +137,42 @@ const sd_bus_vtable bus_timer_vtable[] = {
         SD_BUS_VTABLE_END
 };
 
+static int timer_add_one_calendar_spec(
+                Timer *t,
+                const char *name,
+                TimerBase base,
+                UnitWriteFlags flags,
+                const char *str,
+                sd_bus_error *error) {
+
+        _cleanup_(calendar_spec_freep) CalendarSpec *c = NULL;
+        int r;
+
+        r = calendar_spec_from_string(str, &c);
+        if (r == -EINVAL)
+                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid calendar spec");
+        if (r < 0)
+                return r;
+
+        if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                unit_write_settingf(UNIT(t), flags|UNIT_ESCAPE_SPECIFIERS, name,
+                                    "%s=%s", timer_base_to_string(base), str);
+
+                TimerValue *v = new(TimerValue, 1);
+                if (!v)
+                        return -ENOMEM;
+
+                *v = (TimerValue) {
+                        .base = base,
+                        .calendar_spec = c,
+                };
+
+                LIST_PREPEND(value, t->values, v);
+        }
+
+        return 1;
+};
+
 static int bus_timer_set_transient_property(
                 Timer *t,
                 const char *name,
@@ -239,36 +275,17 @@ static int bus_timer_set_transient_property(
                         return r;
 
                 while ((r = sd_bus_message_read(message, "(ss)", &base_name, &str)) > 0) {
-                        _cleanup_(calendar_spec_freep) CalendarSpec *c = NULL;
                         TimerBase b;
 
                         b = timer_base_from_string(base_name);
                         if (b != TIMER_CALENDAR)
-                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid timer base: %s", base_name);
+                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
+                                                         "Invalid timer base: %s", base_name);
 
-                        r = calendar_spec_from_string(str, &c);
-                        if (r == -EINVAL)
-                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid calendar spec: %s", str);
+                        r = timer_add_one_calendar_spec(t, name, b, flags, str, error);
                         if (r < 0)
                                 return r;
 
-                        if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                                TimerValue *v;
-
-                                unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "%s=%s", base_name, str);
-
-                                v = new(TimerValue, 1);
-                                if (!v)
-                                        return -ENOMEM;
-
-                                *v = (TimerValue) {
-                                        .base = b,
-                                        .calendar_spec = TAKE_PTR(c),
-                                };
-
-                                LIST_PREPEND(value, t->values, v);
-                        }
-
                         empty = false;
                 }
                 if (r < 0)
@@ -328,8 +345,6 @@ static int bus_timer_set_transient_property(
 
         } else if (streq(name, "OnCalendar")) {
 
-                TimerValue *v;
-                _cleanup_(calendar_spec_freep) CalendarSpec *c = NULL;
                 const char *str;
 
                 log_notice("Client is using obsolete %s= transient property, please use TimersCalendar= instead.", name);
@@ -338,28 +353,7 @@ static int bus_timer_set_transient_property(
                 if (r < 0)
                         return r;
 
-                if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
-                        r = calendar_spec_from_string(str, &c);
-                        if (r == -EINVAL)
-                                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid calendar spec");
-                        if (r < 0)
-                                return r;
-
-                        unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, "%s=%s", name, str);
-
-                        v = new(TimerValue, 1);
-                        if (!v)
-                                return -ENOMEM;
-
-                        *v = (TimerValue) {
-                                .base = TIMER_CALENDAR,
-                                .calendar_spec = TAKE_PTR(c),
-                        };
-
-                        LIST_PREPEND(value, t->values, v);
-                }
-
-                return 1;
+                return timer_add_one_calendar_spec(t, name, TIMER_CALENDAR, flags, str, error);
         }
 
         return 0;