]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/dbus-util.h
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, \
136 #define BUS_DEFINE_SET_TRANSIENT_PARSE(function, type, parse) \
137 int bus_set_transient_##function( \
141 sd_bus_message *message, \
142 UnitWriteFlags flags, \
143 sd_bus_error *error) { \
151 r = sd_bus_message_read(message, "s", &s); \
157 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
158 "Invalid %s setting: %s", name, s); \
160 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
162 unit_write_settingf(u, flags, name, \
169 #define BUS_DEFINE_SET_TRANSIENT_PARSE_PTR(function, type, parse) \
170 int bus_set_transient_##function( \
174 sd_bus_message *message, \
175 UnitWriteFlags flags, \
176 sd_bus_error *error) { \
184 r = sd_bus_message_read(message, "s", &s); \
190 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
191 "Invalid %s setting: %s", name, s); \
193 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
195 unit_write_settingf(u, flags, name, \
196 "%s=%s", name, strempty(s)); \
202 #define BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(function, check) \
203 int bus_set_transient_##function( \
207 sd_bus_message *message, \
208 UnitWriteFlags flags, \
209 sd_bus_error *error) { \
216 r = sd_bus_message_read(message, "s", &v); \
220 if (!isempty(v) && !check(v)) \
221 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
222 "Invalid %s setting: %s", name, v); \
224 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
225 r = free_and_strdup(p, empty_to_null(v)); \
229 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, \
230 "%s=%s", name, strempty(v)); \
236 int bus_set_transient_mode_t(Unit
*u
, const char *name
, mode_t
*p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
237 int bus_set_transient_unsigned(Unit
*u
, const char *name
, unsigned *p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
238 int bus_set_transient_user(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
239 int bus_set_transient_path(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
240 int bus_set_transient_string(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
241 int bus_set_transient_bool(Unit
*u
, const char *name
, bool *p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
242 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
);
243 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
) {
244 return bus_set_transient_usec_internal(u
, name
, p
, false, message
, flags
, error
);
246 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
) {
247 return bus_set_transient_usec_internal(u
, name
, p
, true, message
, flags
, error
);