1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2010 Lennart Poettering
10 #include "parse-util.h"
11 #include "path-util.h"
12 #include "unit-printf.h"
13 #include "user-util.h"
16 BUS_DEFINE_SET_TRANSIENT(mode_t
, "u", uint32_t, mode_t
, "%040o");
17 BUS_DEFINE_SET_TRANSIENT(unsigned, "u", uint32_t, unsigned, "%" PRIu32
);
18 BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(user
, valid_user_group_name_or_id
);
19 BUS_DEFINE_SET_TRANSIENT_STRING_WITH_CHECK(path
, path_is_absolute
);
21 int bus_set_transient_string(
25 sd_bus_message
*message
,
27 sd_bus_error
*error
) {
34 r
= sd_bus_message_read(message
, "s", &v
);
38 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
39 r
= free_and_strdup(p
, empty_to_null(v
));
43 unit_write_settingf(u
, flags
|UNIT_ESCAPE_SPECIFIERS
, name
,
44 "%s=%s", name
, strempty(v
));
50 int bus_set_transient_bool(
54 sd_bus_message
*message
,
56 sd_bus_error
*error
) {
62 r
= sd_bus_message_read(message
, "b", &v
);
66 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
68 unit_write_settingf(u
, flags
, name
, "%s=%s", name
, yes_no(v
));
74 int bus_set_transient_usec_internal(
79 sd_bus_message
*message
,
81 sd_bus_error
*error
) {
88 r
= sd_bus_message_read(message
, "t", &v
);
92 if (!UNIT_WRITE_FLAGS_NOOP(flags
)) {
93 char *n
, ts
[FORMAT_TIMESPAN_MAX
];
96 *p
= v
!= 0 ? v
: USEC_INFINITY
;
100 n
= strndupa(name
, strlen(name
) - 4);
101 unit_write_settingf(u
, flags
, name
, "%sSec=%s", n
,
102 format_timespan(ts
, sizeof(ts
), v
, USEC_PER_MSEC
));