summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-06-28 16:43:29 +0200
committerLennart Poettering <lennart@poettering.net>2020-06-30 15:10:17 +0200
commit40af3d020f461520ace2309834c4bdf4c5ddf97a (patch)
tree116240a7b0cc01ccf298e1e95217f056438e8086
parent9176326ba2f2167076269acf7573a4a99da82a2d (diff)
downloadsystemd-40af3d020f461520ace2309834c4bdf4c5ddf97a.tar.gz
shared: split out property get helpers
No code changes, just some refactoring.
-rw-r--r--src/core/dbus-automount.c2
-rw-r--r--src/core/dbus-cgroup.c2
-rw-r--r--src/core/dbus-execute.c2
-rw-r--r--src/core/dbus-job.c1
-rw-r--r--src/core/dbus-kill.c2
-rw-r--r--src/core/dbus-manager.c2
-rw-r--r--src/core/dbus-mount.c2
-rw-r--r--src/core/dbus-path.c2
-rw-r--r--src/core/dbus-scope.c2
-rw-r--r--src/core/dbus-service.c2
-rw-r--r--src/core/dbus-socket.c2
-rw-r--r--src/core/dbus-swap.c2
-rw-r--r--src/core/dbus-timer.c2
-rw-r--r--src/core/dbus-unit.c2
-rw-r--r--src/import/importd.c4
-rw-r--r--src/login/logind-dbus.c1
-rw-r--r--src/login/logind-seat-dbus.c1
-rw-r--r--src/login/logind-session-dbus.c1
-rw-r--r--src/login/logind-user-dbus.c1
-rw-r--r--src/machine/image-dbus.c2
-rw-r--r--src/machine/machine-dbus.c1
-rw-r--r--src/machine/machined-dbus.c1
-rw-r--r--src/network/networkd-link-bus.c2
-rw-r--r--src/portable/portabled-image-bus.c1
-rw-r--r--src/resolve/resolved-bus.c2
-rw-r--r--src/resolve/resolved-link-bus.c2
-rw-r--r--src/shared/bus-get-properties.c149
-rw-r--r--src/shared/bus-get-properties.h103
-rw-r--r--src/shared/bus-log-control-api.c1
-rw-r--r--src/shared/bus-util.c149
-rw-r--r--src/shared/bus-util.h95
-rw-r--r--src/shared/meson.build2
-rw-r--r--src/timedate/timedated.c1
-rw-r--r--src/timesync/timesyncd-bus.c1
34 files changed, 286 insertions, 261 deletions
diff --git a/src/core/dbus-automount.c b/src/core/dbus-automount.c
index bd6e6a9dde..70b85d8023 100644
--- a/src/core/dbus-automount.c
+++ b/src/core/dbus-automount.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "automount.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-automount.h"
#include "dbus-util.h"
#include "string-util.h"
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index 080f6fb1ae..b7d2e32639 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -5,7 +5,7 @@
#include "af-list.h"
#include "alloc-util.h"
#include "bpf-firewall.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "cgroup-util.h"
#include "cgroup.h"
#include "dbus-cgroup.h"
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
index 41d64e8004..50f7ada8ce 100644
--- a/src/core/dbus-execute.c
+++ b/src/core/dbus-execute.c
@@ -9,7 +9,7 @@
#include "af-list.h"
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "cap-list.h"
#include "capability-util.h"
#include "cpu-set-util.h"
diff --git a/src/core/dbus-job.c b/src/core/dbus-job.c
index 404984f664..33e4128909 100644
--- a/src/core/dbus-job.c
+++ b/src/core/dbus-job.c
@@ -3,6 +3,7 @@
#include "sd-bus.h"
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-util.h"
#include "dbus-job.h"
#include "dbus-unit.h"
diff --git a/src/core/dbus-kill.c b/src/core/dbus-kill.c
index 30597e86f0..eda3410375 100644
--- a/src/core/dbus-kill.c
+++ b/src/core/dbus-kill.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-kill.h"
#include "dbus-util.h"
#include "kill.h"
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index 5cb06867cb..07e139c5ad 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -9,8 +9,8 @@
#include "architecture.h"
#include "build.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
-#include "bus-util.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-job.h"
diff --git a/src/core/dbus-mount.c b/src/core/dbus-mount.c
index 3ab5ecc425..bab12cc4ff 100644
--- a/src/core/dbus-mount.c
+++ b/src/core/dbus-mount.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
diff --git a/src/core/dbus-path.c b/src/core/dbus-path.c
index 1a97d62486..76cd9d3260 100644
--- a/src/core/dbus-path.c
+++ b/src/core/dbus-path.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-path.h"
#include "dbus-util.h"
#include "list.h"
diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
index 2d877a8c55..aecfda6535 100644
--- a/src/core/dbus-scope.c
+++ b/src/core/dbus-scope.c
@@ -2,7 +2,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-kill.h"
#include "dbus-scope.h"
diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
index 5d4f4ef506..3cc453dff5 100644
--- a/src/core/dbus-service.c
+++ b/src/core/dbus-service.c
@@ -4,7 +4,7 @@
#include "alloc-util.h"
#include "async.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
index 73e6a74914..f01489e29a 100644
--- a/src/core/dbus-socket.c
+++ b/src/core/dbus-socket.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
diff --git a/src/core/dbus-swap.c b/src/core/dbus-swap.c
index 57c8c42091..cb4824b6bd 100644
--- a/src/core/dbus-swap.c
+++ b/src/core/dbus-swap.c
@@ -3,7 +3,7 @@
Copyright © 2010 Maarten Lankhorst
***/
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-swap.h"
diff --git a/src/core/dbus-timer.c b/src/core/dbus-timer.c
index 439c276fac..da35fa8678 100644
--- a/src/core/dbus-timer.c
+++ b/src/core/dbus-timer.c
@@ -1,7 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-timer.h"
#include "dbus-util.h"
#include "strv.h"
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 320e830728..9e9d3b101e 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -5,8 +5,8 @@
#include "alloc-util.h"
#include "bpf-firewall.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "cgroup-util.h"
#include "condition.h"
#include "dbus-job.h"
diff --git a/src/import/importd.c b/src/import/importd.c
index d799a10f94..038dd3a6c6 100644
--- a/src/import/importd.c
+++ b/src/import/importd.c
@@ -7,8 +7,8 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
-#include "bus-util.h"
#include "bus-polkit.h"
#include "def.h"
#include "fd-util.h"
@@ -22,8 +22,8 @@
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
-#include "signal-util.h"
#include "service-util.h"
+#include "signal-util.h"
#include "socket-util.h"
#include "stat-util.h"
#include "string-table.h"
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index 98e0a6cff7..1b6304b57f 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -12,6 +12,7 @@
#include "bootspec.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-get-properties.h"
#include "bus-locator.h"
#include "bus-polkit.h"
#include "bus-unit-util.h"
diff --git a/src/login/logind-seat-dbus.c b/src/login/logind-seat-dbus.c
index e72f265185..a91765205c 100644
--- a/src/login/logind-seat-dbus.c
+++ b/src/login/logind-seat-dbus.c
@@ -4,6 +4,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
#include "bus-util.h"
diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c
index 3857f4ab7d..5ed20ebd26 100644
--- a/src/login/logind-session-dbus.c
+++ b/src/login/logind-session-dbus.c
@@ -4,6 +4,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
#include "bus-util.h"
diff --git a/src/login/logind-user-dbus.c b/src/login/logind-user-dbus.c
index 63c77cab39..237723729e 100644
--- a/src/login/logind-user-dbus.c
+++ b/src/login/logind-user-dbus.c
@@ -3,6 +3,7 @@
#include <errno.h>
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
#include "bus-util.h"
#include "format-util.h"
diff --git a/src/machine/image-dbus.c b/src/machine/image-dbus.c
index 4305f49152..7a15bcc49a 100644
--- a/src/machine/image-dbus.c
+++ b/src/machine/image-dbus.c
@@ -4,9 +4,9 @@
#include <sys/mount.h>
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "copy.h"
#include "dissect-image.h"
#include "fd-util.h"
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c
index a8f9d28a87..73ef5949bf 100644
--- a/src/machine/machine-dbus.c
+++ b/src/machine/machine-dbus.c
@@ -12,6 +12,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-internal.h"
#include "bus-label.h"
#include "bus-locator.h"
diff --git a/src/machine/machined-dbus.c b/src/machine/machined-dbus.c
index 9fb8433592..2d9c180aa4 100644
--- a/src/machine/machined-dbus.c
+++ b/src/machine/machined-dbus.c
@@ -8,6 +8,7 @@
#include "alloc-util.h"
#include "btrfs-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-locator.h"
#include "bus-polkit.h"
#include "cgroup-util.h"
diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c
index 76daee69e8..38b005fb63 100644
--- a/src/network/networkd-link-bus.c
+++ b/src/network/networkd-link-bus.c
@@ -6,8 +6,8 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "dns-domain.h"
#include "networkd-link-bus.h"
#include "networkd-link.h"
diff --git a/src/portable/portabled-image-bus.c b/src/portable/portabled-image-bus.c
index 5988a21037..9646601491 100644
--- a/src/portable/portabled-image-bus.c
+++ b/src/portable/portabled-image-bus.c
@@ -7,6 +7,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
#include "bus-util.h"
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c
index 38d2483c24..2ecfcf498b 100644
--- a/src/resolve/resolved-bus.c
+++ b/src/resolve/resolved-bus.c
@@ -2,9 +2,9 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "dns-domain.h"
#include "memory-util.h"
#include "missing_capability.h"
diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c
index a2ca5cb8f6..0fa62208c3 100644
--- a/src/resolve/resolved-link-bus.c
+++ b/src/resolve/resolved-link-bus.c
@@ -6,8 +6,8 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "parse-util.h"
#include "resolve-util.h"
#include "resolved-bus.h"
diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c
new file mode 100644
index 0000000000..8ad4694046
--- /dev/null
+++ b/src/shared/bus-get-properties.c
@@ -0,0 +1,149 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "bus-get-properties.h"
+#include "rlimit-util.h"
+#include "string-util.h"
+
+int bus_property_get_bool(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ int b = *(bool*) userdata;
+
+ return sd_bus_message_append_basic(reply, 'b', &b);
+}
+
+int bus_property_set_bool(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *value,
+ void *userdata,
+ sd_bus_error *error) {
+
+ int b, r;
+
+ r = sd_bus_message_read(value, "b", &b);
+ if (r < 0)
+ return r;
+
+ *(bool*) userdata = b;
+ return 0;
+}
+
+int bus_property_get_id128(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ sd_id128_t *id = userdata;
+
+ if (sd_id128_is_null(*id)) /* Add an empty array if the ID is zero */
+ return sd_bus_message_append(reply, "ay", 0);
+ else
+ return sd_bus_message_append_array(reply, 'y', id->bytes, 16);
+}
+
+#if __SIZEOF_SIZE_T__ != 8
+int bus_property_get_size(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ uint64_t sz = *(size_t*) userdata;
+
+ return sd_bus_message_append_basic(reply, 't', &sz);
+}
+#endif
+
+#if __SIZEOF_LONG__ != 8
+int bus_property_get_long(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ int64_t l = *(long*) userdata;
+
+ return sd_bus_message_append_basic(reply, 'x', &l);
+}
+
+int bus_property_get_ulong(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ uint64_t ul = *(unsigned long*) userdata;
+
+ return sd_bus_message_append_basic(reply, 't', &ul);
+}
+#endif
+
+int bus_property_get_rlimit(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ const char *is_soft;
+ struct rlimit *rl;
+ uint64_t u;
+ rlim_t x;
+
+ assert(bus);
+ assert(reply);
+ assert(userdata);
+
+ is_soft = endswith(property, "Soft");
+
+ rl = *(struct rlimit**) userdata;
+ if (rl)
+ x = is_soft ? rl->rlim_cur : rl->rlim_max;
+ else {
+ struct rlimit buf = {};
+ const char *s, *p;
+ int z;
+
+ /* Chop off "Soft" suffix */
+ s = is_soft ? strndupa(property, is_soft - property) : property;
+
+ /* Skip over any prefix, such as "Default" */
+ assert_se(p = strstr(s, "Limit"));
+
+ z = rlimit_from_string(p + 5);
+ assert(z >= 0);
+
+ (void) getrlimit(z, &buf);
+ x = is_soft ? buf.rlim_cur : buf.rlim_max;
+ }
+
+ /* rlim_t might have different sizes, let's map RLIMIT_INFINITY to (uint64_t) -1, so that it is the same on all
+ * archs */
+ u = x == RLIM_INFINITY ? (uint64_t) -1 : (uint64_t) x;
+
+ return sd_bus_message_append(reply, "t", u);
+}
diff --git a/src/shared/bus-get-properties.h b/src/shared/bus-get-properties.h
new file mode 100644
index 0000000000..d853b79d8d
--- /dev/null
+++ b/src/shared/bus-get-properties.h
@@ -0,0 +1,103 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include "sd-bus.h"
+
+#include "sd-bus.h"
+
+#include "macro.h"
+
+int bus_property_get_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+int bus_property_set_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *value, void *userdata, sd_bus_error *error);
+int bus_property_get_id128(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+
+#define bus_property_get_usec ((sd_bus_property_get_t) NULL)
+#define bus_property_set_usec ((sd_bus_property_set_t) NULL)
+
+assert_cc(sizeof(int) == sizeof(int32_t));
+#define bus_property_get_int ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(unsigned) == sizeof(uint32_t));
+#define bus_property_get_unsigned ((sd_bus_property_get_t) NULL)
+
+/* On 64bit machines we can use the default serializer for size_t and
+ * friends, otherwise we need to cast this manually */
+#if __SIZEOF_SIZE_T__ == 8
+#define bus_property_get_size ((sd_bus_property_get_t) NULL)
+#else
+int bus_property_get_size(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+#endif
+
+#if __SIZEOF_LONG__ == 8
+#define bus_property_get_long ((sd_bus_property_get_t) NULL)
+#define bus_property_get_ulong ((sd_bus_property_get_t) NULL)
+#else
+int bus_property_get_long(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+int bus_property_get_ulong(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+#endif
+
+/* uid_t and friends on Linux 32 bit. This means we can just use the
+ * default serializer for 32bit unsigned, for serializing it, and map
+ * it to NULL here */
+assert_cc(sizeof(uid_t) == sizeof(uint32_t));
+#define bus_property_get_uid ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(gid_t) == sizeof(uint32_t));
+#define bus_property_get_gid ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(pid_t) == sizeof(uint32_t));
+#define bus_property_get_pid ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(mode_t) == sizeof(uint32_t));
+#define bus_property_get_mode ((sd_bus_property_get_t) NULL)
+
+int bus_property_get_rlimit(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+
+#define BUS_DEFINE_PROPERTY_GET_GLOBAL(function, bus_type, val) \
+ int function(sd_bus *bus, \
+ const char *path, \
+ const char *interface, \
+ const char *property, \
+ sd_bus_message *reply, \
+ void *userdata, \
+ sd_bus_error *error) { \
+ \
+ assert(bus); \
+ assert(reply); \
+ \
+ return sd_bus_message_append(reply, bus_type, val); \
+ }
+
+#define BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, get2) \
+ int function(sd_bus *bus, \
+ const char *path, \
+ const char *interface, \
+ const char *property, \
+ sd_bus_message *reply, \
+ void *userdata, \
+ sd_bus_error *error) { \
+ \
+ data_type *data = userdata; \
+ \
+ assert(bus); \
+ assert(reply); \
+ assert(data); \
+ \
+ return sd_bus_message_append(reply, bus_type, \
+ get2(get1(data))); \
+ }
+
+#define ident(x) (x)
+#define BUS_DEFINE_PROPERTY_GET(function, bus_type, data_type, get1) \
+ BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, ident)
+
+#define ref(x) (*(x))
+#define BUS_DEFINE_PROPERTY_GET_REF(function, bus_type, data_type, get) \
+ BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, ref, get)
+
+#define BUS_DEFINE_PROPERTY_GET_ENUM(function, name, type) \
+ BUS_DEFINE_PROPERTY_GET_REF(function, "s", type, name##_to_string)
+
+#define BUS_PROPERTY_DUAL_TIMESTAMP(name, offset, flags) \
+ SD_BUS_PROPERTY(name, "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, realtime), (flags)), \
+ SD_BUS_PROPERTY(name "Monotonic", "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, monotonic), (flags))
diff --git a/src/shared/bus-log-control-api.c b/src/shared/bus-log-control-api.c
index a1d0d17291..7c487ada9f 100644
--- a/src/shared/bus-log-control-api.c
+++ b/src/shared/bus-log-control-api.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
#include "bus-util.h"
#include "log.h"
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 85b5bedbc0..77c1c62182 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -14,15 +14,14 @@
#include "sd-event.h"
#include "sd-id128.h"
-#include "alloc-util.h"
+/* #include "alloc-util.h" */
#include "bus-internal.h"
#include "bus-label.h"
#include "bus-util.h"
#include "path-util.h"
-#include "rlimit-util.h"
#include "socket-util.h"
#include "stdio-util.h"
-#include "string-util.h"
+/* #include "string-util.h" */
static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
sd_event *e = userdata;
@@ -333,102 +332,6 @@ int bus_connect_transport_systemd(BusTransport transport, const char *host, bool
return r;
}
-int bus_property_get_bool(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- int b = *(bool*) userdata;
-
- return sd_bus_message_append_basic(reply, 'b', &b);
-}
-
-int bus_property_set_bool(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *value,
- void *userdata,
- sd_bus_error *error) {
-
- int b, r;
-
- r = sd_bus_message_read(value, "b", &b);
- if (r < 0)
- return r;
-
- *(bool*) userdata = b;
- return 0;
-}
-
-int bus_property_get_id128(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- sd_id128_t *id = userdata;
-
- if (sd_id128_is_null(*id)) /* Add an empty array if the ID is zero */
- return sd_bus_message_append(reply, "ay", 0);
- else
- return sd_bus_message_append_array(reply, 'y', id->bytes, 16);
-}
-
-#if __SIZEOF_SIZE_T__ != 8
-int bus_property_get_size(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- uint64_t sz = *(size_t*) userdata;
-
- return sd_bus_message_append_basic(reply, 't', &sz);
-}
-#endif
-
-#if __SIZEOF_LONG__ != 8
-int bus_property_get_long(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- int64_t l = *(long*) userdata;
-
- return sd_bus_message_append_basic(reply, 'x', &l);
-}
-
-int bus_property_get_ulong(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- uint64_t ul = *(unsigned long*) userdata;
-
- return sd_bus_message_append_basic(reply, 't', &ul);
-}
-#endif
-
/**
* bus_path_encode_unique() - encode unique object path
* @b: bus connection or NULL
@@ -556,54 +459,6 @@ int bus_path_decode_unique(const char *path, const char *prefix, char **ret_send
return 1;
}
-int bus_property_get_rlimit(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- const char *is_soft;
- struct rlimit *rl;
- uint64_t u;
- rlim_t x;
-
- assert(bus);
- assert(reply);
- assert(userdata);
-
- is_soft = endswith(property, "Soft");
-
- rl = *(struct rlimit**) userdata;
- if (rl)
- x = is_soft ? rl->rlim_cur : rl->rlim_max;
- else {
- struct rlimit buf = {};
- const char *s, *p;
- int z;
-
- /* Chop off "Soft" suffix */
- s = is_soft ? strndupa(property, is_soft - property) : property;
-
- /* Skip over any prefix, such as "Default" */
- assert_se(p = strstr(s, "Limit"));
-
- z = rlimit_from_string(p + 5);
- assert(z >= 0);
-
- (void) getrlimit(z, &buf);
- x = is_soft ? buf.rlim_cur : buf.rlim_max;
- }
-
- /* rlim_t might have different sizes, let's map RLIMIT_INFINITY to (uint64_t) -1, so that it is the same on all
- * archs */
- u = x == RLIM_INFINITY ? (uint64_t) -1 : (uint64_t) x;
-
- return sd_bus_message_append(reply, "t", u);
-}
-
int bus_track_add_name_many(sd_bus_track *t, char **l) {
int r = 0;
char **i;
diff --git a/src/shared/bus-util.h b/src/shared/bus-util.h
index 4dbf74fdf7..fd88314c1f 100644
--- a/src/shared/bus-util.h
+++ b/src/shared/bus-util.h
@@ -37,110 +37,15 @@ int bus_connect_user_systemd(sd_bus **_bus);
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **bus);
int bus_connect_transport_systemd(BusTransport transport, const char *host, bool user, sd_bus **bus);
-int bus_property_get_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-int bus_property_set_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *value, void *userdata, sd_bus_error *error);
-int bus_property_get_id128(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-
-#define bus_property_get_usec ((sd_bus_property_get_t) NULL)
-#define bus_property_set_usec ((sd_bus_property_set_t) NULL)
-
-assert_cc(sizeof(int) == sizeof(int32_t));
-#define bus_property_get_int ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(unsigned) == sizeof(uint32_t));
-#define bus_property_get_unsigned ((sd_bus_property_get_t) NULL)
-
-/* On 64bit machines we can use the default serializer for size_t and
- * friends, otherwise we need to cast this manually */
-#if __SIZEOF_SIZE_T__ == 8
-#define bus_property_get_size ((sd_bus_property_get_t) NULL)
-#else
-int bus_property_get_size(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-#endif
-
-#if __SIZEOF_LONG__ == 8
-#define bus_property_get_long ((sd_bus_property_get_t) NULL)
-#define bus_property_get_ulong ((sd_bus_property_get_t) NULL)
-#else
-int bus_property_get_long(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-int bus_property_get_ulong(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-#endif
-
-/* uid_t and friends on Linux 32 bit. This means we can just use the
- * default serializer for 32bit unsigned, for serializing it, and map
- * it to NULL here */
-assert_cc(sizeof(uid_t) == sizeof(uint32_t));
-#define bus_property_get_uid ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(gid_t) == sizeof(uint32_t));
-#define bus_property_get_gid ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(pid_t) == sizeof(uint32_t));
-#define bus_property_get_pid ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(mode_t) == sizeof(uint32_t));
-#define bus_property_get_mode ((sd_bus_property_get_t) NULL)
-
#define bus_log_parse_error(r) \
log_error_errno(r, "Failed to parse bus message: %m")
#define bus_log_create_error(r) \
log_error_errno(r, "Failed to create bus message: %m")
-#define BUS_DEFINE_PROPERTY_GET_GLOBAL(function, bus_type, val) \
- int function(sd_bus *bus, \
- const char *path, \
- const char *interface, \
- const char *property, \
- sd_bus_message *reply, \
- void *userdata, \
- sd_bus_error *error) { \
- \
- assert(bus); \
- assert(reply); \
- \
- return sd_bus_message_append(reply, bus_type, val); \
- }
-
-#define BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, get2) \
- int function(sd_bus *bus, \
- const char *path, \
- const char *interface, \
- const char *property, \
- sd_bus_message *reply, \
- void *userdata, \
- sd_bus_error *error) { \
- \
- data_type *data = userdata; \
- \
- assert(bus); \
- assert(reply); \
- assert(data); \
- \
- return sd_bus_message_append(reply, bus_type, \
- get2(get1(data))); \
- }
-
-#define ident(x) (x)
-#define BUS_DEFINE_PROPERTY_GET(function, bus_type, data_type, get1) \
- BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, ident)
-
-#define ref(x) (*(x))
-#define BUS_DEFINE_PROPERTY_GET_REF(function, bus_type, data_type, get) \
- BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, ref, get)
-
-#define BUS_DEFINE_PROPERTY_GET_ENUM(function, name, type) \
- BUS_DEFINE_PROPERTY_GET_REF(function, "s", type, name##_to_string)
-
-#define BUS_PROPERTY_DUAL_TIMESTAMP(name, offset, flags) \
- SD_BUS_PROPERTY(name, "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, realtime), (flags)), \
- SD_BUS_PROPERTY(name "Monotonic", "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, monotonic), (flags))
-
int bus_path_encode_unique(sd_bus *b, const char *prefix, const char *sender_id, const char *external_id, char **ret_path);
int bus_path_decode_unique(const char *path, const char *prefix, char **ret_sender, char **ret_external);
-int bus_property_get_rlimit(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-
int bus_track_add_name_many(sd_bus_track *t, char **l);
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description);
diff --git a/src/shared/meson.build b/src/shared/meson.build
index 3bd680295c..1868e8aede 100644
--- a/src/shared/meson.build
+++ b/src/shared/meson.build
@@ -27,6 +27,8 @@ shared_sources = files('''
bpf-program.h
bridge-util.c
bridge-util.h
+ bus-get-properties.c
+ bus-get-properties.h
bus-locator.c
bus-locator.h
bus-log-control-api.c
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index d7d9305711..c467b85477 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -12,6 +12,7 @@
#include "alloc-util.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-get-properties.h"
#include "bus-locator.h"
#include "bus-log-control-api.h"
#include "bus-map-properties.h"
diff --git a/src/timesync/timesyncd-bus.c b/src/timesync/timesyncd-bus.c
index 006800709d..6effdfc325 100644
--- a/src/timesync/timesyncd-bus.c
+++ b/src/timesync/timesyncd-bus.c
@@ -3,6 +3,7 @@
#include "sd-bus.h"
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-internal.h"
#include "bus-log-control-api.h"
#include "bus-protocol.h"