]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/dbus-util.h
654ceb527950600a6adbdfe2bd572909d3b57571
1 /* SPDX-License-Identifier: LGPL-2.1+ */
8 int bus_property_get_triggered_unit(sd_bus
*bus
, const char *path
, const char *interface
, const char *property
, sd_bus_message
*reply
, void *userdata
, sd_bus_error
*error
);
10 #define BUS_DEFINE_SET_TRANSIENT(function, bus_type, type, cast_type, fmt) \
11 int bus_set_transient_##function( \
15 sd_bus_message *message, \
16 UnitWriteFlags flags, \
17 sd_bus_error *error) { \
24 r = sd_bus_message_read(message, bus_type, &v); \
28 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
30 unit_write_settingf(u, flags, name, \
31 "%s=" fmt, name, v); \
37 #define BUS_DEFINE_SET_TRANSIENT_IS_VALID(function, bus_type, type, cast_type, fmt, check) \
38 int bus_set_transient_##function( \
42 sd_bus_message *message, \
43 UnitWriteFlags flags, \
44 sd_bus_error *error) { \
51 r = sd_bus_message_read(message, bus_type, &v); \
56 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
57 "Invalid %s setting: " fmt, name, v); \
59 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
61 unit_write_settingf(u, flags, name, \
62 "%s=" fmt, name, v); \
68 #define BUS_DEFINE_SET_TRANSIENT_TO_STRING(function, bus_type, type, cast_type, fmt, to_string) \
69 int bus_set_transient_##function( \
73 sd_bus_message *message, \
74 UnitWriteFlags flags, \
75 sd_bus_error *error) { \
83 r = sd_bus_message_read(message, bus_type, &v); \
89 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
90 "Invalid %s setting: " fmt, name, v); \
92 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
94 unit_write_settingf(u, flags, name, \
101 #define BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(function, bus_type, type, cast_type, fmt, to_string) \
102 int bus_set_transient_##function( \
106 sd_bus_message *message, \
107 UnitWriteFlags flags, \
108 sd_bus_error *error) { \
110 _cleanup_free_ char *s = NULL; \
116 r = sd_bus_message_read(message, bus_type, &v); \
120 r = to_string(v, &s); \
122 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
123 "Invalid %s setting: " fmt, name, v); \
127 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
128 *p = (cast_type) v; \
129 unit_write_settingf(u, flags, name, \
131 name, strempty(s)); \
137 #define BUS_DEFINE_SET_TRANSIENT_PARSE(function, type, parse) \
138 int bus_set_transient_##function( \
142 sd_bus_message *message, \
143 UnitWriteFlags flags, \
144 sd_bus_error *error) { \
152 r = sd_bus_message_read(message, "s", &s); \
158 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
159 "Invalid %s setting: %s", name, s); \
161 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
163 unit_write_settingf(u, flags, name, \
170 #define BUS_DEFINE_SET_TRANSIENT_PARSE_PTR(function, type, parse) \
171 int bus_set_transient_##function( \
175 sd_bus_message *message, \
176 UnitWriteFlags flags, \
177 sd_bus_error *error) { \
185 r = sd_bus_message_read(message, "s", &s); \
191 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
192 "Invalid %s setting: %s", name, s); \
194 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
196 unit_write_settingf(u, flags, name, \
197 "%s=%s", name, strempty(s)); \
203 #define BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(function, check) \
204 int bus_set_transient_##function( \
208 sd_bus_message *message, \
209 UnitWriteFlags flags, \
210 sd_bus_error *error) { \
217 r = sd_bus_message_read(message, "s", &v); \
221 if (!isempty(v) && !check(v)) \
222 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
223 "Invalid %s setting: %s", name, v); \
225 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
226 r = free_and_strdup(p, empty_to_null(v)); \
230 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, \
231 "%s=%s", name, strempty(v)); \
237 int bus_set_transient_mode_t(Unit
*u
, const char *name
, mode_t
*p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
238 int bus_set_transient_unsigned(Unit
*u
, const char *name
, unsigned *p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
239 int bus_set_transient_user_relaxed(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
240 int bus_set_transient_path(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
241 int bus_set_transient_string(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
242 int bus_set_transient_bool(Unit
*u
, const char *name
, bool *p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
243 int bus_set_transient_usec_internal(Unit
*u
, const char *name
, usec_t
*p
, bool fix_0
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
244 static inline int bus_set_transient_usec(Unit
*u
, const char *name
, usec_t
*p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
) {
245 return bus_set_transient_usec_internal(u
, name
, p
, false, message
, flags
, error
);
247 static inline int bus_set_transient_usec_fix_0(Unit
*u
, const char *name
, usec_t
*p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
) {
248 return bus_set_transient_usec_internal(u
, name
, p
, true, message
, flags
, error
);