return r;
}
-static int do_sleep(const char *arg_verb, const char **modes, const char **states) {
+static int do_sleep(const char *arg_verb) {
+ _cleanup_strv_free_ char **modes = NULL, **states = NULL;
char *arguments[] = {
NULL,
(char*) "pre",
int r;
_cleanup_fclose_ FILE *f = NULL;
+ r = parse_sleep_config(arg_verb, &modes, &states);
+ if (r < 0)
+ return r;
+
/* This file is opened first, so that if we hit an error,
* we can abort before modifying any state. */
f = fopen("/sys/power/state", "we");
return r;
}
-int shutdown_or_sleep(Manager *m, HandleAction action) {
+int shutdown_or_sleep(HandleAction action) {
switch (action) {
case HANDLE_POWEROFF:
return run_helper(HALT);
case HANDLE_KEXEC:
return run_helper(KEXEC);
case HANDLE_SUSPEND:
- return do_sleep("suspend", m->suspend_mode, m->suspend_state);
+ return do_sleep("suspend");
case HANDLE_HIBERNATE:
- return do_sleep("hibernate", m->hibernate_mode, m->hibernate_state);
+ return do_sleep("hibernate");
case HANDLE_HYBRID_SLEEP:
- return do_sleep("hybrid-sleep", m->hybrid_sleep_mode, m->hybrid_sleep_state);
+ return do_sleep("hybrid-sleep");
default:
return -EINVAL;
}
InhibitWhat w,
HandleAction action,
sd_bus_error *error) {
-
- _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
- const char *p;
- char *c;
int r;
assert(m);
/* FIXME: here do the thing. */
- r = sd_bus_call_method(
- m->bus,
- "org.freedesktop.systemd1",
- "/org/freedesktop/systemd1",
- "org.freedesktop.systemd1.Manager",
- "StartUnit",
- error,
- &reply,
- "ss", NULL, "replace-irreversibly");
- if (r < 0)
- return r;
-
- r = sd_bus_message_read(reply, "o", &p);
+ r = shutdown_or_sleep(action);
if (r < 0)
return r;
- c = strdup(p);
- if (!c)
- return -ENOMEM;
-
/* Make sure the lid switch is ignored for a while (?) */
manager_set_lid_switch_ignore(m, now(CLOCK_MONOTONIC) + m->holdoff_timeout_usec);
extern const sd_bus_vtable manager_vtable[];
int bus_manager_shutdown_or_sleep_now_or_later(Manager *m, HandleAction action, InhibitWhat w, sd_bus_error *error);
+int shutdown_or_sleep(HandleAction action);
int manager_send_changed(Manager *manager, const char *property, ...) _sentinel_;