if (sd_json_variant_elements(parameters) > 0)
return varlink_error_invalid_parameter(link, parameters);
+ if (!FLAGS_SET(flags, VARLINK_METHOD_MORE))
+ return varlink_error(link, VARLINK_ERROR_EXPECTED_MORE, NULL);
+
r = acquire_esp(/* unprivileged_mode= */ false,
/* graceful= */ false,
/* ret_part= */ NULL,
return r;
}
- return varlink_replybo(link, SD_JSON_BUILD_PAIR_CONDITION(!!previous, "entry", SD_JSON_BUILD_VARIANT(previous)));
+ if (!previous)
+ return varlink_error(link, "io.systemd.BootControl.NoSuchBootEntry", NULL);
+
+ return varlink_replybo(link, SD_JSON_BUILD_PAIR_VARIANT("entry", previous));
}
static VARLINK_DEFINE_ERROR(
RebootToFirmwareNotSupported);
+static VARLINK_DEFINE_ERROR(
+ NoSuchBootEntry);
+
VARLINK_DEFINE_INTERFACE(
io_systemd_BootControl,
"io.systemd.BootControl",
&vl_method_ListBootEntries,
&vl_method_SetRebootToFirmware,
&vl_method_GetRebootToFirmware,
- &vl_error_RebootToFirmwareNotSupported);
+ &vl_error_RebootToFirmwareNotSupported,
+ &vl_error_NoSuchBootEntry);
}
testcase_bootctl_varlink() {
- varlinkctl call --collect /run/systemd/io.systemd.BootControl io.systemd.BootControl.ListBootEntries '{}'
+ (varlinkctl call --collect /run/systemd/io.systemd.BootControl io.systemd.BootControl.ListBootEntries '{}' ||:)
# We may have UEFI in the test environment.
# If we don't have UEFI then we can test whether bootctl's varlink API fails cleanly.