1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 #include "parse-util.h"
7 #include "unit-printf.h"
11 int bus_property_get_triggered_unit(
14 const char *interface
,
16 sd_bus_message
*reply
,
18 sd_bus_error
*error
) {
20 Unit
*u
= userdata
, *trigger
;
26 trigger
= UNIT_TRIGGER(u
);
28 return sd_bus_message_append(reply
, "s", trigger
? trigger
->id
: NULL
);
31 BUS_DEFINE_SET_TRANSIENT(mode_t
, "u", uint32_t, mode_t
, "%040o");
32 BUS_DEFINE_SET_TRANSIENT(unsigned, "u", uint32_t, unsigned, "%" PRIu32
);
33 BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(user_compat
, valid_user_group_name_or_id_compat
);
34 BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(path
, path_is_absolute
);
36 int bus_set_transient_string(
40 sd_bus_message
*message
,
42 sd_bus_error
*error
) {
49 r
= sd_bus_message_read(message
, "s", &v
);
53 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
54 r
= free_and_strdup(p
, empty_to_null(v
));
58 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
,
59 "%s=%s", name
, strempty(v
));
65 int bus_set_transient_bool(
69 sd_bus_message
*message
,
71 sd_bus_error
*error
) {
77 r
= sd_bus_message_read(message
, "b", &v
);
81 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
83 unit_write_settingf(u
, flags
, name
, "%s=%s", name
, yes_no(v
));
89 int bus_set_transient_usec_internal(
94 sd_bus_message
*message
,
96 sd_bus_error
*error
) {
103 r
= sd_bus_message_read(message
, "t", &v
);
107 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
108 char *n
, ts
[FORMAT_TIMESPAN_MAX
];
111 *p
= v
!= 0 ? v
: USEC_INFINITY
;
115 n
= strndupa(name
, strlen(name
) - 4);
116 unit_write_settingf(u
, flags
, name
, "%sSec=%s", n
,
117 format_timespan(ts
, sizeof(ts
), v
, USEC_PER_MSEC
));