#include "bootspec.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-get-properties.h"
+#include "bus-locator.h"
#include "bus-polkit.h"
#include "bus-unit-util.h"
#include "bus-util.h"
const char *unit_name) {
int r;
- usec_t timeout_val;
assert(m);
assert(w >= 0);
assert(w < _INHIBIT_WHAT_MAX);
assert(unit_name);
- timeout_val = now(CLOCK_MONOTONIC) + m->inhibit_delay_max;
-
if (m->inhibit_timeout_source) {
- r = sd_event_source_set_time(m->inhibit_timeout_source, timeout_val);
+ r = sd_event_source_set_time_relative(m->inhibit_timeout_source, m->inhibit_delay_max);
if (r < 0)
- return log_error_errno(r, "sd_event_source_set_time() failed: %m");
+ return log_error_errno(r, "sd_event_source_set_time_relative() failed: %m");
r = sd_event_source_set_enabled(m->inhibit_timeout_source, SD_EVENT_ONESHOT);
if (r < 0)
return log_error_errno(r, "sd_event_source_set_enabled() failed: %m");
} else {
- r = sd_event_add_time(m->event, &m->inhibit_timeout_source, CLOCK_MONOTONIC,
- timeout_val, 0, manager_inhibit_timeout_handler, m);
+ r = sd_event_add_time_relative(
+ m->event,
+ &m->inhibit_timeout_source,
+ CLOCK_MONOTONIC, m->inhibit_delay_max, 0,
+ manager_inhibit_timeout_handler, m);
if (r < 0)
return r;
}
r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU");
if (r == -ENXIO) {
- _cleanup_free_ char *v = NULL;
-
/* EFI case: returns the current value of LoaderConfigTimeoutOneShot. Three cases are distuingished:
*
* 1. Variable not set, boot into boot loader menu is not enabled (we return UINT64_MAX to the user)
* 3. Variable set to numeric value formatted in ASCII, boot into boot loader menu with the specified timeout in seconds
*/
- r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderConfigTimeoutOneShot", &v);
+ r = efi_loader_get_config_timeout_one_shot(&x);
if (r < 0) {
if (r != -ENOENT)
- log_warning_errno(r, "Failed to read LoaderConfigTimeoutOneShot variable: %m");
- } else {
- uint64_t sec;
-
- r = safe_atou64(v, &sec);
- if (r < 0)
- log_warning_errno(r, "Failed to parse LoaderConfigTimeoutOneShot value '%s': %m", v);
- else if (sec > (USEC_INFINITY / USEC_PER_SEC))
- log_warning("LoaderConfigTimeoutOneShot too large, ignoring: %m");
- else
- x = sec * USEC_PER_SEC; /* return in µs */
+ log_warning_errno(r, "Failed to read LoaderConfigTimeoutOneShot variable, ignoring: %m");
}
} else if (r < 0)
return r;
} else {
if (x == UINT64_MAX) {
- if (unlink("/run/systemd/reboot-to-loader-menu") < 0 && errno != ENOENT)
+ if (unlink("/run/systemd/reboot-to-boot-loader-menu") < 0 && errno != ENOENT)
return -errno;
} else {
char buf[DECIMAL_STR_MAX(uint64_t) + 1];
xsprintf(buf, "%" PRIu64, x); /* µs granularity */
- r = write_string_file_atomic_label("/run/systemd/reboot-to-loader-menu", buf);
+ r = write_string_file_atomic_label("/run/systemd/reboot-to-boot-loader-menu", buf);
if (r < 0)
return r;
}
sd_bus_error *error) {
_cleanup_free_ char *v = NULL;
+ Manager *m = userdata;
+ const char *x = NULL;
int r;
assert(bus);
assert(reply);
- assert(userdata);
+ assert(m);
r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY");
if (r == -ENXIO) {
/* EFI case: let's read the LoaderEntryOneShot variable */
- r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderEntryOneShot", &v);
+ r = efi_loader_update_entry_one_shot_cache(&m->efi_loader_entry_one_shot, &m->efi_loader_entry_one_shot_stat);
if (r < 0) {
if (r != -ENOENT)
- log_warning_errno(r, "Failed to read LoaderEntryOneShot variable: %m");
- } else if (!efi_loader_entry_name_valid(v)) {
- log_warning("LoaderEntryOneShot contains invalid entry name '%s', ignoring.", v);
- v = mfree(v);
- }
+ log_warning_errno(r, "Failed to read LoaderEntryOneShot variable, ignoring: %m");
+ } else
+ x = m->efi_loader_entry_one_shot;
+
} else if (r < 0)
log_warning_errno(r, "Failed to parse $SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY: %m");
else if (r > 0) {
r = read_one_line_file("/run/systemd/reboot-to-boot-loader-entry", &v);
if (r < 0) {
if (r != -ENOENT)
- log_warning_errno(r, "Failed to read /run/systemd/reboot-to-boot-loader-entry: %m");
- } else if (!efi_loader_entry_name_valid(v)) {
+ log_warning_errno(r, "Failed to read /run/systemd/reboot-to-boot-loader-entry, ignoring: %m");
+ } else if (!efi_loader_entry_name_valid(v))
log_warning("/run/systemd/reboot-to-boot-loader-entry is not valid, ignoring.");
- v = mfree(v);
- }
+ else
+ x = v;
}
- return sd_bus_message_append(reply, "s", v);
+ return sd_bus_message_append(reply, "s", x);
}
static int boot_loader_entry_exists(Manager *m, const char *id) {