summaryrefslogtreecommitdiff
path: root/src/systemctl/systemctl-set-environment.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemctl/systemctl-set-environment.c')
-rw-r--r--src/systemctl/systemctl-set-environment.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/systemctl/systemctl-set-environment.c b/src/systemctl/systemctl-set-environment.c
index aab0fe5fd0..9d6a37b206 100644
--- a/src/systemctl/systemctl-set-environment.c
+++ b/src/systemctl/systemctl-set-environment.c
@@ -10,36 +10,36 @@
static int json_transform_message(sd_bus_message *m, JsonVariant **ret) {
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
- char *text;
+ const char *text;
int r;
assert(m);
assert(ret);
while ((r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &text)) > 0) {
- _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+ _cleanup_free_ char *n = NULL;
+ const char *sep;
- char *sep = strchr(text, '=');
+ sep = strchr(text, '=');
if (!sep)
return log_error_errno(SYNTHETIC_ERRNO(EUCLEAN),
"Invalid environment block");
- *sep++ = '\0';
+ n = strndup(text, sep - text);
+ if (!n)
+ return log_oom();
- r = json_build(&w, JSON_BUILD_OBJECT(JSON_BUILD_PAIR(text, JSON_BUILD_STRING(sep))));
- if (r < 0)
- return r;
+ sep++;
- r = json_variant_merge(&v, w);
+ r = json_variant_set_field_string(&v, n, sep);
if (r < 0)
- return r;
+ return log_error_errno(r, "Failed to set JSON field '%s' to '%s': %m", n, sep);
}
if (r < 0)
return bus_log_parse_error(r);
*ret = TAKE_PTR(v);
-
- return r;
+ return 0;
}
static int print_variable(const char *s) {
@@ -82,13 +82,12 @@ int show_environment(int argc, char *argv[], void *userdata) {
if (OUTPUT_MODE_IS_JSON(arg_output)) {
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
- JsonFormatFlags flags = output_mode_to_json_format_flags(arg_output);
r = json_transform_message(reply, &v);
if (r < 0)
return r;
- json_variant_dump(v, flags, stdout, NULL);
+ json_variant_dump(v, output_mode_to_json_format_flags(arg_output), stdout, NULL);
} else {
while ((r = sd_bus_message_read_basic(reply, SD_BUS_TYPE_STRING, &text)) > 0) {
r = print_variable(text);