/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <stdlib.h>
-#if HAVE_VALGRIND_VALGRIND_H
-# include <valgrind/valgrind.h>
-#endif
#include "sd-daemon.h"
#include "argv-util.h"
#include "ask-password-agent.h"
-#include "hashmap.h"
#include "main-func.h"
#include "pager.h"
#include "polkit-agent.h"
#include "selinux-util.h"
-#include "signal-util.h"
#include "string-util.h"
void main_prepare(int argc, char *argv[]) {
mac_selinux_finish();
}
-int raise_or_exit_status(int ret) {
- if (ret < 0)
- return EXIT_FAILURE;
- if (ret == 0)
- return EXIT_SUCCESS;
- if (!SIGNAL_VALID(ret))
- return EXIT_FAILURE;
-
-#if HAVE_VALGRIND_VALGRIND_H
- /* If raise() below succeeds, the destructor cleanup_pools() in hashmap.c will never called. */
- if (RUNNING_ON_VALGRIND)
- hashmap_trim_pools();
-#endif
-
- (void) raise(ret);
- /* exit with failure if raise() does not immediately abort the program. */
- return EXIT_FAILURE;
-}
-
int exit_failure_if_negative(int result) {
return result < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
void main_finalize(int r, int exit_status);
-#define _DEFINE_MAIN_FUNCTION(intro, impl, result_to_exit_status, result_to_return_value) \
+#define _DEFINE_MAIN_FUNCTION(intro, impl, result_to_exit_status) \
int main(int argc, char *argv[]) { \
- int r; \
+ int r, s; \
main_prepare(argc, argv); \
intro; \
r = impl; \
- main_finalize(r, result_to_exit_status(r)); \
+ s = result_to_exit_status(r); \
+ main_finalize(r, s); \
static_destruct(); \
- return result_to_return_value(r); \
+ return s; \
}
int exit_failure_if_negative(int result) _const_;
/* Negative return values from impl are mapped to EXIT_FAILURE, and
* everything else means success! */
#define DEFINE_MAIN_FUNCTION(impl) \
- _DEFINE_MAIN_FUNCTION(,impl(argc, argv), exit_failure_if_negative, exit_failure_if_negative)
+ _DEFINE_MAIN_FUNCTION(, impl(argc, argv), exit_failure_if_negative)
int exit_failure_if_nonzero(int result) _const_;
* and positive values are propagated.
* Note: "true" means failure! */
#define DEFINE_MAIN_FUNCTION_WITH_POSITIVE_FAILURE(impl) \
- _DEFINE_MAIN_FUNCTION(,impl(argc, argv), exit_failure_if_nonzero, exit_failure_if_nonzero)
-
-int raise_or_exit_status(int ret);
-
-/* Negative return values from impl are mapped to EXIT_FAILURE, zero is mapped to EXIT_SUCCESS,
- * and raise if a positive signal is returned from impl. */
-#define DEFINE_MAIN_FUNCTION_WITH_POSITIVE_SIGNAL(impl) \
- _DEFINE_MAIN_FUNCTION(,impl(argc, argv), exit_failure_if_negative, raise_or_exit_status)
+ _DEFINE_MAIN_FUNCTION(, impl(argc, argv), exit_failure_if_nonzero)