chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
service: make the fsck pass no configurable
[elogind.git]
/
src
/
login
/
logind-inhibit.c
diff --git
a/src/login/logind-inhibit.c
b/src/login/logind-inhibit.c
index 78afee3139e13dcd76645f44adae74dbddae4bdb..512fc0716bb4f1ad9ad3b6833ec7907f8a016331 100644
(file)
--- a/
src/login/logind-inhibit.c
+++ b/
src/login/logind-inhibit.c
@@
-28,7
+28,7
@@
#include "util.h"
#include "mkdir.h"
#include "util.h"
#include "mkdir.h"
-
+#include "path-util.h"
#include "logind-inhibit.h"
Inhibitor* inhibitor_new(Manager *m, const char* id) {
#include "logind-inhibit.h"
Inhibitor* inhibitor_new(Manager *m, const char* id) {
@@
-46,7
+46,7
@@
Inhibitor* inhibitor_new(Manager *m, const char* id) {
return NULL;
}
return NULL;
}
- i->id =
file_name_from_path
(i->state_file);
+ i->id =
path_get_file_name
(i->state_file);
if (hashmap_put(m->inhibitors, i->id, i) < 0) {
free(i->state_file);
if (hashmap_put(m->inhibitors, i->id, i) < 0) {
free(i->state_file);
@@
-97,9
+97,11
@@
int inhibitor_save(Inhibitor *i) {
fprintf(f,
"# This is private data. Do not parse.\n"
"WHAT=%s\n"
fprintf(f,
"# This is private data. Do not parse.\n"
"WHAT=%s\n"
+ "MODE=%s\n"
"UID=%lu\n"
"PID=%lu\n",
inhibit_what_to_string(i->what),
"UID=%lu\n"
"PID=%lu\n",
inhibit_what_to_string(i->what),
+ inhibit_mode_to_string(i->mode),
(unsigned long) i->uid,
(unsigned long) i->pid);
(unsigned long) i->uid,
(unsigned long) i->pid);
@@
-152,15
+154,16
@@
int inhibitor_start(Inhibitor *i) {
dual_timestamp_get(&i->since);
dual_timestamp_get(&i->since);
- log_debug("Inhibitor %s (%s) pid=%lu uid=%lu started.",
+ log_debug("Inhibitor %s (%s) pid=%lu uid=%lu
mode=%s
started.",
strna(i->who), strna(i->why),
strna(i->who), strna(i->why),
- (unsigned long) i->pid, (unsigned long) i->uid);
+ (unsigned long) i->pid, (unsigned long) i->uid,
+ inhibit_mode_to_string(i->mode));
inhibitor_save(i);
i->started = true;
inhibitor_save(i);
i->started = true;
- manager_send_changed(i->manager,
"
Inhibited\0");
+ manager_send_changed(i->manager,
i->mode == INHIBIT_BLOCK ? "BlockInhibited\0" : "Delay
Inhibited\0");
return 0;
}
return 0;
}
@@
-169,29
+172,32
@@
int inhibitor_stop(Inhibitor *i) {
assert(i);
if (i->started)
assert(i);
if (i->started)
- log_debug("Inhibitor %s (%s) pid=%lu uid=%lu stopped.",
+ log_debug("Inhibitor %s (%s) pid=%lu uid=%lu
mode=%s
stopped.",
strna(i->who), strna(i->why),
strna(i->who), strna(i->why),
- (unsigned long) i->pid, (unsigned long) i->uid);
+ (unsigned long) i->pid, (unsigned long) i->uid,
+ inhibit_mode_to_string(i->mode));
if (i->state_file)
unlink(i->state_file);
i->started = false;
if (i->state_file)
unlink(i->state_file);
i->started = false;
- manager_send_changed(i->manager,
"
Inhibited\0");
+ manager_send_changed(i->manager,
i->mode == INHIBIT_BLOCK ? "BlockInhibited\0" : "Delay
Inhibited\0");
return 0;
}
int inhibitor_load(Inhibitor *i) {
InhibitWhat w;
return 0;
}
int inhibitor_load(Inhibitor *i) {
InhibitWhat w;
+ InhibitMode mm;
int r;
char *cc,
*what = NULL,
*uid = NULL,
*pid = NULL,
*who = NULL,
int r;
char *cc,
*what = NULL,
*uid = NULL,
*pid = NULL,
*who = NULL,
- *why = NULL;
+ *why = NULL,
+ *mode = NULL;
r = parse_env_file(i->state_file, NEWLINE,
"WHAT", &what,
r = parse_env_file(i->state_file, NEWLINE,
"WHAT", &what,
@@
-199,17
+205,25
@@
int inhibitor_load(Inhibitor *i) {
"PID", &pid,
"WHO", &who,
"WHY", &why,
"PID", &pid,
"WHO", &who,
"WHY", &why,
+ "MODE", &mode,
"FIFO", &i->fifo_path,
NULL);
if (r < 0)
goto finish;
"FIFO", &i->fifo_path,
NULL);
if (r < 0)
goto finish;
- w =
inhibit_what_from_string(what)
;
+ w =
what ? inhibit_what_from_string(what) : 0
;
if (w >= 0)
i->what = w;
if (w >= 0)
i->what = w;
- parse_uid(uid, &i->uid);
- parse_pid(pid, &i->pid);
+ mm = mode ? inhibit_mode_from_string(mode) : INHIBIT_BLOCK;
+ if (mm >= 0)
+ i->mode = mm;
+
+ if (uid)
+ parse_uid(uid, &i->uid);
+
+ if (pid)
+ parse_pid(pid, &i->pid);
if (who) {
cc = cunescape(who);
if (who) {
cc = cunescape(who);
@@
-314,7
+328,7
@@
void inhibitor_remove_fifo(Inhibitor *i) {
}
}
}
}
-InhibitWhat manager_inhibit_what(Manager *m) {
+InhibitWhat manager_inhibit_what(Manager *m
, InhibitMode mm
) {
Inhibitor *i;
Iterator j;
InhibitWhat what = 0;
Inhibitor *i;
Iterator j;
InhibitWhat what = 0;
@@
-322,12
+336,13
@@
InhibitWhat manager_inhibit_what(Manager *m) {
assert(m);
HASHMAP_FOREACH(i, m->inhibitor_fds, j)
assert(m);
HASHMAP_FOREACH(i, m->inhibitor_fds, j)
- what |= i->what;
+ if (i->mode == mm)
+ what |= i->what;
return what;
}
return what;
}
-bool manager_is_inhibited(Manager *m, InhibitWhat w, dual_timestamp *since) {
+bool manager_is_inhibited(Manager *m, InhibitWhat w,
InhibitMode mm,
dual_timestamp *since) {
Inhibitor *i;
Iterator j;
struct dual_timestamp ts = { 0, 0 };
Inhibitor *i;
Iterator j;
struct dual_timestamp ts = { 0, 0 };
@@
-340,6
+355,9
@@
bool manager_is_inhibited(Manager *m, InhibitWhat w, dual_timestamp *since) {
if (!(i->what & w))
continue;
if (!(i->what & w))
continue;
+ if (i->mode != mm)
+ continue;
+
if (!inhibited ||
i->since.monotonic < ts.monotonic)
ts = i->since;
if (!inhibited ||
i->since.monotonic < ts.monotonic)
ts = i->since;
@@
-358,12
+376,12
@@
const char *inhibit_what_to_string(InhibitWhat w) {
static const char* const table[_INHIBIT_WHAT_MAX] = {
[0] = "",
[INHIBIT_SHUTDOWN] = "shutdown",
static const char* const table[_INHIBIT_WHAT_MAX] = {
[0] = "",
[INHIBIT_SHUTDOWN] = "shutdown",
- [INHIBIT_S
USPEND] = "suspend
",
+ [INHIBIT_S
LEEP] = "sleep
",
[INHIBIT_IDLE] = "idle",
[INHIBIT_IDLE] = "idle",
- [INHIBIT_SHUTDOWN|INHIBIT_S
USPEND] = "shutdown:suspend
",
+ [INHIBIT_SHUTDOWN|INHIBIT_S
LEEP] = "shutdown:sleep
",
[INHIBIT_SHUTDOWN|INHIBIT_IDLE] = "shutdown:idle",
[INHIBIT_SHUTDOWN|INHIBIT_IDLE] = "shutdown:idle",
- [INHIBIT_SHUTDOWN|INHIBIT_S
USPEND|INHIBIT_IDLE] = "shutdown:suspend
:idle",
- [INHIBIT_S
USPEND|INHIBIT_IDLE] = "suspend
:idle"
+ [INHIBIT_SHUTDOWN|INHIBIT_S
LEEP|INHIBIT_IDLE] = "shutdown:sleep
:idle",
+ [INHIBIT_S
LEEP|INHIBIT_IDLE] = "sleep
:idle"
};
if (w < 0 || w >= _INHIBIT_WHAT_MAX)
};
if (w < 0 || w >= _INHIBIT_WHAT_MAX)
@@
-380,8
+398,8
@@
InhibitWhat inhibit_what_from_string(const char *s) {
FOREACH_WORD_SEPARATOR(w, l, s, ":", state) {
if (l == 8 && strncmp(w, "shutdown", l) == 0)
what |= INHIBIT_SHUTDOWN;
FOREACH_WORD_SEPARATOR(w, l, s, ":", state) {
if (l == 8 && strncmp(w, "shutdown", l) == 0)
what |= INHIBIT_SHUTDOWN;
- else if (l ==
7 && strncmp(w, "suspend
", l) == 0)
- what |= INHIBIT_S
USPEND
;
+ else if (l ==
5 && strncmp(w, "sleep
", l) == 0)
+ what |= INHIBIT_S
LEEP
;
else if (l == 4 && strncmp(w, "idle", l) == 0)
what |= INHIBIT_IDLE;
else
else if (l == 4 && strncmp(w, "idle", l) == 0)
what |= INHIBIT_IDLE;
else
@@
-391,3
+409,10
@@
InhibitWhat inhibit_what_from_string(const char *s) {
return what;
}
return what;
}
+
+static const char* const inhibit_mode_table[_INHIBIT_MODE_MAX] = {
+ [INHIBIT_BLOCK] = "block",
+ [INHIBIT_DELAY] = "delay"
+};
+
+DEFINE_STRING_TABLE_LOOKUP(inhibit_mode, InhibitMode);