X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fexit-status.c;h=208d329c1e27348b7c9221f7da2164ec2310a082;hb=d9c67ea112724e271c39553d966eae612e272e34;hp=0dc82b2e130e51e49ae14cd8dabeab12fbafca2e;hpb=8351ceaea9480d9c2979aa2ff0f4982cfdfef58d;p=elogind.git diff --git a/src/shared/exit-status.c b/src/shared/exit-status.c index 0dc82b2e1..208d329c1 100644 --- a/src/shared/exit-status.c +++ b/src/shared/exit-status.c @@ -23,6 +23,8 @@ #include #include "exit-status.h" +#include "set.h" +#include "macro.h" const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { @@ -111,9 +113,6 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { case EXIT_STDERR: return "STDERR"; - case EXIT_TCPWRAP: - return "TCPWRAP"; - case EXIT_PAM: return "PAM"; @@ -128,6 +127,21 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { case EXIT_SECCOMP: return "SECCOMP"; + + case EXIT_SELINUX_CONTEXT: + return "SELINUX_CONTEXT"; + + case EXIT_PERSONALITY: + return "PERSONALITY"; + + case EXIT_APPARMOR_PROFILE: + return "APPARMOR"; + + case EXIT_ADDRESS_FAMILIES: + return "ADDRESS_FAMILIES"; + + case EXIT_RUNTIME_DIRECTORY: + return "RUNTIME_DIRECTORY"; } } @@ -158,10 +172,12 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { } -bool is_clean_exit(int code, int status) { +bool is_clean_exit(int code, int status, ExitStatusSet *success_status) { if (code == CLD_EXITED) - return status == 0; + return status == 0 || + (success_status && + set_contains(success_status->code, INT_TO_PTR(status))); /* If a daemon does not implement handlers for some of the * signals that's not considered an unclean shutdown */ @@ -170,14 +186,16 @@ bool is_clean_exit(int code, int status) { status == SIGHUP || status == SIGINT || status == SIGTERM || - status == SIGPIPE; + status == SIGPIPE || + (success_status && + set_contains(success_status->signal, INT_TO_PTR(status))); return false; } -bool is_clean_exit_lsb(int code, int status) { +bool is_clean_exit_lsb(int code, int status, ExitStatusSet *success_status) { - if (is_clean_exit(code, status)) + if (is_clean_exit(code, status, success_status)) return true; return