X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fexit-status.c;h=c09efdd2cb79c1643aed2c8042e3f90f361d8f07;hb=ce5792dac67c5ae5656f1f9665b777d44af4cb35;hp=ce1f1bde655798947412a65adf8d81d3a1433a99;hpb=a4152e3fe28b53b8919cc404dd7eca7ead1bf9bd;p=elogind.git diff --git a/src/shared/exit-status.c b/src/shared/exit-status.c index ce1f1bde6..c09efdd2c 100644 --- a/src/shared/exit-status.c +++ b/src/shared/exit-status.c @@ -20,7 +20,6 @@ ***/ #include -#include #include "exit-status.h" #include "set.h" @@ -148,6 +147,9 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { case EXIT_MAKE_STARTER: return "MAKE_STARTER"; + + case EXIT_BUS_ENDPOINT: + return "BUS_ENDPOINT"; } } @@ -164,7 +166,7 @@ const char* exit_status_to_string(ExitStatus status, ExitStatusLevel level) { return "NOPERMISSION"; case EXIT_NOTINSTALLED: - return "NOTINSSTALLED"; + return "NOTINSTALLED"; case EXIT_NOTCONFIGURED: return "NOTCONFIGURED"; @@ -183,7 +185,7 @@ bool is_clean_exit(int code, int status, ExitStatusSet *success_status) { if (code == CLD_EXITED) return status == 0 || (success_status && - set_contains(success_status->code, INT_TO_PTR(status))); + set_contains(success_status->status, INT_TO_PTR(status))); /* If a daemon does not implement handlers for some of the * signals that's not considered an unclean shutdown */ @@ -208,3 +210,32 @@ bool is_clean_exit_lsb(int code, int status, ExitStatusSet *success_status) { code == CLD_EXITED && (status == EXIT_NOTINSTALLED || status == EXIT_NOTCONFIGURED); } + +void exit_status_set_free(ExitStatusSet *x) { + assert(x); + + set_free(x->status); + set_free(x->signal); + x->status = x->signal = NULL; +} + +bool exit_status_set_is_empty(ExitStatusSet *x) { + if (!x) + return true; + + return set_isempty(x->status) && set_isempty(x->signal); +} + +bool exit_status_set_test(ExitStatusSet *x, int code, int status) { + + if (exit_status_set_is_empty(x)) + return false; + + if (code == CLD_EXITED && set_contains(x->status, INT_TO_PTR(status))) + return true; + + if (IN_SET(code, CLD_KILLED, CLD_DUMPED) && set_contains(x->signal, INT_TO_PTR(status))) + return true; + + return false; +}