]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/dbus-util.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 This file is part of systemd.
7 Copyright 2010 Lennart Poettering
14 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
);
16 #define BUS_DEFINE_SET_TRANSIENT(function, bus_type, type, cast_type, fmt) \
17 int bus_set_transient_##function( \
21 sd_bus_message *message, \
22 UnitWriteFlags flags, \
23 sd_bus_error *error) { \
30 r = sd_bus_message_read(message, bus_type, &v); \
34 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
36 unit_write_settingf(u, flags, name, \
37 "%s=" fmt, name, v); \
43 #define BUS_DEFINE_SET_TRANSIENT_IS_VALID(function, bus_type, type, cast_type, fmt, check) \
44 int bus_set_transient_##function( \
48 sd_bus_message *message, \
49 UnitWriteFlags flags, \
50 sd_bus_error *error) { \
57 r = sd_bus_message_read(message, bus_type, &v); \
62 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
63 "Invalid %s setting: " fmt, name, v); \
65 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
67 unit_write_settingf(u, flags, name, \
68 "%s=" fmt, name, v); \
74 #define BUS_DEFINE_SET_TRANSIENT_TO_STRING(function, bus_type, type, cast_type, fmt, to_string) \
75 int bus_set_transient_##function( \
79 sd_bus_message *message, \
80 UnitWriteFlags flags, \
81 sd_bus_error *error) { \
89 r = sd_bus_message_read(message, bus_type, &v); \
95 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
96 "Invalid %s setting: " fmt, name, v); \
98 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
100 unit_write_settingf(u, flags, name, \
107 #define BUS_DEFINE_SET_TRANSIENT_TO_STRING_ALLOC(function, bus_type, type, cast_type, fmt, to_string) \
108 int bus_set_transient_##function( \
112 sd_bus_message *message, \
113 UnitWriteFlags flags, \
114 sd_bus_error *error) { \
116 _cleanup_free_ char *s = NULL; \
122 r = sd_bus_message_read(message, bus_type, &v); \
126 r = to_string(v, &s); \
128 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
129 "Invalid %s setting: " fmt, name, v); \
133 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
134 *p = (cast_type) v; \
135 unit_write_settingf(u, flags, name, \
142 #define BUS_DEFINE_SET_TRANSIENT_PARSE(function, type, parse) \
143 int bus_set_transient_##function( \
147 sd_bus_message *message, \
148 UnitWriteFlags flags, \
149 sd_bus_error *error) { \
157 r = sd_bus_message_read(message, "s", &s); \
163 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
164 "Invalid %s setting: %s", name, s); \
166 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
168 unit_write_settingf(u, flags, name, \
175 #define BUS_DEFINE_SET_TRANSIENT_PARSE_PTR(function, type, parse) \
176 int bus_set_transient_##function( \
180 sd_bus_message *message, \
181 UnitWriteFlags flags, \
182 sd_bus_error *error) { \
190 r = sd_bus_message_read(message, "s", &s); \
196 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
197 "Invalid %s setting: %s", name, s); \
199 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
201 unit_write_settingf(u, flags, name, \
202 "%s=%s", name, strempty(s)); \
208 #define BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(function, check) \
209 int bus_set_transient_##function( \
213 sd_bus_message *message, \
214 UnitWriteFlags flags, \
215 sd_bus_error *error) { \
222 r = sd_bus_message_read(message, "s", &v); \
226 if (!isempty(v) && !check(v)) \
227 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
228 "Invalid %s setting: %s", name, v); \
230 if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
231 r = free_and_strdup(p, empty_to_null(v)); \
235 unit_write_settingf(u, flags|UNIT_ESCAPE_SPECIFIERS, name, \
236 "%s=%s", name, strempty(v)); \
242 int bus_set_transient_mode_t(Unit
*u
, const char *name
, mode_t
*p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
243 int bus_set_transient_unsigned(Unit
*u
, const char *name
, unsigned *p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
244 int bus_set_transient_user(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
245 int bus_set_transient_path(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
246 int bus_set_transient_string(Unit
*u
, const char *name
, char **p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
247 int bus_set_transient_bool(Unit
*u
, const char *name
, bool *p
, sd_bus_message
*message
, UnitWriteFlags flags
, sd_bus_error
*error
);
248 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
);
249 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
) {
250 return bus_set_transient_usec_internal(u
, name
, p
, false, message
, flags
, error
);
252 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
) {
253 return bus_set_transient_usec_internal(u
, name
, p
, true, message
, flags
, error
);