chiark / gitweb /
core: fix handling of AccuracyUSec and RandomDelayUSec bus properties
authorLennart Poettering <lennart@poettering.net>
Mon, 1 Feb 2016 20:27:33 +0000 (21:27 +0100)
committerSven Eden <yamakuzure@gmx.net>
Wed, 17 May 2017 13:22:15 +0000 (15:22 +0200)
Clear up some confusion regarding the USec and Sec suffixes we use. In configuration files we usually use the Sec
suffix, to indicate the implied time unit if none is specified. The respective bus properties however use the USec
property, since they expose 64bit unsigned integers containing time in µs.

Before this patch timer units exposed a bus property AccuracyUSec (which hence is the correct name) but when parsing
transient property data would look for AccuracySec instead (which is incorrect). This patch ensures we look for
AccuracySec correctly, but keeps the code for AccuracyUSec in place for compatibility, but adds a warning to ensure
that apps are updated to use the right property.

src/shared/bus-util.c

index c12795d1f397402611d3f21e66326140db3dc992..5b7b48baf4b0f45df61f000ed1bc81f093dc5ead 100644 (file)
@@ -1454,18 +1454,22 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
 
                 return 0;
 
-        } else if (streq(field, "RandomizedDelaySec")) {
+        } else if (STR_IN_SET(field, "AccuracySec", "RandomizedDelaySec")) {
+                char *n;
                 usec_t t;
-
+                size_t l;
                 r = parse_sec(eq, &t);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to parse RandomizedDelaySec= parameter: %s", eq);
+                        return log_error_errno(r, "Failed to parse %s= parameter: %s", field, eq);
 
-                r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, "RandomizedDelayUSec");
-                if (r < 0)
-                        return bus_log_create_error(r);
+                l = strlen(field);
+                n = newa(char, l + 2);
+                if (!n)
+                        return log_oom();
 
-                r = sd_bus_message_append(m, "v", "t", t);
+                /* Change suffix Sec → USec */
+                strcpy(mempcpy(n, field, l - 3), "USec");
+                r = sd_bus_message_append(m, "sv", n, "t", t);
                 if (r < 0)
                         return bus_log_create_error(r);
 
@@ -1741,16 +1745,6 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
 
                 r = sd_bus_message_append(m, "v", "i", sig);
 
-        } else if (streq(field, "AccuracySec")) {
-                usec_t u;
-
-                r = parse_sec(eq, &u);
-                if (r < 0) {
-                        log_error("Failed to parse %s value %s", field, eq);
-                        return -EINVAL;
-                }
-
-                r = sd_bus_message_append(m, "v", "t", u);
         } else if (streq(field, "TimerSlackNSec")) {
                 nsec_t n;