X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fexit-status.c;h=9b7c027b43b002714d6614c71a73e017623813dd;hp=4fed3c70a4f43391a4d9e4a83297e4a7088701f0;hb=6f79c579ec9c188173dde41395bbfb86c547fdd3;hpb=1afbdcb06b2333c1f5852c049bd5e73b729aa6f0 diff --git a/src/exit-status.c b/src/exit-status.c index 4fed3c70a..9b7c027b4 100644 --- a/src/exit-status.c +++ b/src/exit-status.c @@ -20,6 +20,7 @@ ***/ #include +#include #include "exit-status.h" @@ -143,3 +144,31 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { return NULL; } + + +bool is_clean_exit(int code, int status) { + + if (code == CLD_EXITED) + return status == 0; + + /* If a daemon does not implement handlers for some of the + * signals that's not considered an unclean shutdown */ + if (code == CLD_KILLED) + return + status == SIGHUP || + status == SIGINT || + status == SIGTERM || + status == SIGPIPE; + + return false; +} + +bool is_clean_exit_lsb(int code, int status) { + + if (is_clean_exit(code, status)) + return true; + + return + code == CLD_EXITED && + (status == EXIT_NOTINSTALLED || status == EXIT_NOTCONFIGURED); +}