From a34c79d0067b79cc27748f70092861ddd942a039 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 20 Nov 2018 14:03:46 +0100 Subject: [PATCH] basic/main-func: also close the pager automatically We generally want to close the pager last. This patch closes the pager last, after the static destuctor calls. This means that they can do logging and such like during normal program runtime. --- src/basic/main-func.h | 2 ++ src/login/inhibit.c | 8 +++----- src/sysctl/sysctl.c | 22 +++++++--------------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/basic/main-func.h b/src/basic/main-func.h index 9dfcea9296f..6417cc822aa 100644 --- a/src/basic/main-func.h +++ b/src/basic/main-func.h @@ -3,6 +3,7 @@ #include +#include "pager.h" #include "static-destruct.h" #define _DEFINE_MAIN_FUNCTION(impl, ret) \ @@ -10,6 +11,7 @@ int r; \ r = impl(argc, argv); \ static_destruct(); \ + pager_close(); \ return ret; \ } diff --git a/src/login/inhibit.c b/src/login/inhibit.c index 5c0637c8613..7a63eb6efcb 100644 --- a/src/login/inhibit.c +++ b/src/login/inhibit.c @@ -282,12 +282,10 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to connect to bus: %m"); - if (arg_action == ACTION_LIST) { - r = print_inhibitors(bus); - pager_close(); - return r; + if (arg_action == ACTION_LIST) + return print_inhibitors(bus); - } else { + else { _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; _cleanup_close_ int fd = -1; _cleanup_free_ char *w = NULL; diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c index f9d282d1cb8..d04a2cff155 100644 --- a/src/sysctl/sysctl.c +++ b/src/sysctl/sysctl.c @@ -266,21 +266,19 @@ static int parse_argv(int argc, char *argv[]) { static int run(int argc, char *argv[]) { _cleanup_(ordered_hashmap_free_free_freep) OrderedHashmap *sysctl_options = NULL; - int r = 0, k; + int r, k; r = parse_argv(argc, argv); if (r <= 0) - goto finish; + return r; log_setup_service(); umask(0022); sysctl_options = ordered_hashmap_new(&path_hash_ops); - if (!sysctl_options) { - r = log_oom(); - goto finish; - } + if (!sysctl_options) + return log_oom(); r = 0; @@ -297,16 +295,13 @@ static int run(int argc, char *argv[]) { char **f; r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("sysctl.d")); - if (r < 0) { - log_error_errno(r, "Failed to enumerate sysctl.d files: %m"); - goto finish; - } + if (r < 0) + return log_error_errno(r, "Failed to enumerate sysctl.d files: %m"); if (arg_cat_config) { (void) pager_open(arg_pager_flags); - r = cat_files(NULL, files, 0); - goto finish; + return cat_files(NULL, files, 0); } STRV_FOREACH(f, files) { @@ -320,9 +315,6 @@ static int run(int argc, char *argv[]) { if (k < 0 && r == 0) r = k; -finish: - pager_close(); - return r; } -- 2.47.3