]> git.tuebingen.mpg.de Git - paraslash.git/commitdiff
gui: Combine exit functions.
authorAndre Noll <maan@systemlinux.org>
Tue, 7 Jan 2014 17:35:08 +0000 (17:35 +0000)
committerAndre Noll <maan@systemlinux.org>
Sun, 4 May 2014 13:48:54 +0000 (15:48 +0200)
Currently we have kill_pg_and_die(), finish(), msg_n_exit(), which
is kind of excessive. This patch replaces these three functions by
the single die() which does the right thing in all cases.

gui.c

diff --git a/gui.c b/gui.c
index 6e3c3e1edf36549917a17bd58511692d8bed7d8b..8ec009cc53506ba976d9c60f4c489935259d494e 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -543,39 +543,25 @@ static void setup_signal_handling(void)
        para_install_sighandler(SIGUSR1);
 }
 
-/* kill every process in the process group and exit */
-__noreturn static void kill_pg_and_die(int ret)
-{
-       para_sigaction(SIGTERM, SIG_IGN);
-       kill(0, SIGTERM);
-       exit(ret);
-}
-
 static void shutdown_curses(void)
 {
        def_prog_mode();
        endwin();
 }
 
-__noreturn static void finish(int ret)
-{
-       shutdown_curses();
-       kill_pg_and_die(ret);
-}
-
-/*
- * exit curses and print given message to stdout/stderr
- */
-__noreturn __printf_2_3 static void msg_n_exit(int ret, const char* fmt, ...)
+/* disable curses, print a message, kill running processes and exit */
+__noreturn __printf_2_3 static void die(int exit_code, const char* fmt, ...)
 {
        va_list argp;
-       FILE *outfd = ret? stderr: stdout;
 
        shutdown_curses();
        va_start(argp, fmt);
-       vfprintf(outfd, fmt, argp);
+       vfprintf(stderr, fmt, argp);
        va_end(argp);
-       kill_pg_and_die(ret);
+       /* kill every process in the process group and exit */
+       para_sigaction(SIGTERM, SIG_IGN);
+       kill(0, SIGTERM);
+       exit(exit_code);
 }
 
 /*
@@ -615,7 +601,7 @@ static void init_wins(int top_lines)
                sb.win = newwin(sb.lines, sb.cols, sb_y, 0);
                in.win = newwin(in.lines, in.cols, in_y, 0);
                if (!top.win || !bot.win || !sb.win || !in.win || !sep.win)
-                       msg_n_exit(1, "Error: Cannot create curses windows\n");
+                       die(EXIT_FAILURE, "Error: Cannot create curses windows\n");
                wclear(bot.win);
                wclear(sb.win);
                wclear(in.win);
@@ -754,7 +740,7 @@ static void clear_all_items(void)
 static void init_pair_or_die(short pair, short f, short b)
 {
        if (init_pair(pair, f, b) == ERR)
-               msg_n_exit(EXIT_FAILURE, "fatal: init_pair() failed\n");
+               die(EXIT_FAILURE, "fatal: init_pair() failed\n");
 }
 
 static void init_colors_or_die(void)
@@ -762,9 +748,9 @@ static void init_colors_or_die(void)
        int i;
 
        if (!has_colors())
-               msg_n_exit(EXIT_FAILURE, "fatal: No color term\n");
+               die(EXIT_FAILURE, "fatal: No color term\n");
        if (start_color() == ERR)
-               msg_n_exit(EXIT_FAILURE, "fatal: failed to start colors\n");
+               die(EXIT_FAILURE, "fatal: failed to start colors\n");
        FOR_EACH_STATUS_ITEM(i)
                if (theme.data[i].len)
                        init_pair_or_die(i + 1, theme.data[i].fg,
@@ -785,19 +771,19 @@ static void init_curses(void)
        if (curses_active())
                return;
        if (top.win && refresh() == ERR) /* refresh is really needed */
-               msg_n_exit(EXIT_FAILURE, "refresh() failed\n");
+               die(EXIT_FAILURE, "refresh() failed\n");
        if (LINES < theme.lines_min || COLS < theme.cols_min)
-               msg_n_exit(EXIT_FAILURE, "Error: Terminal (%dx%d) too small"
+               die(EXIT_FAILURE, "Terminal (%dx%d) too small"
                        " (need at least %dx%d)\n", COLS, LINES,
                        theme.cols_min, theme.lines_min);
        curs_set(0); /* make cursor invisible, ignore errors */
        nonl(); /* do not NL->CR/NL on output, always returns OK */
        /* don't echo input */
        if (noecho() == ERR)
-               msg_n_exit(EXIT_FAILURE, "fatal: noecho() failed\n");
+               die(EXIT_FAILURE, "fatal: noecho() failed\n");
        /* take input chars one at a time, no wait for \n */
        if (cbreak() == ERR)
-               msg_n_exit(EXIT_FAILURE, "fatal: cbreak() failed\n");
+               die(EXIT_FAILURE, "fatal: cbreak() failed\n");
        init_colors_or_die();
        clear(); /* ignore non-fatal errors */
        init_wins(theme.top_lines_default);
@@ -877,8 +863,7 @@ static void handle_signal(int sig)
 {
        switch (sig) {
        case SIGTERM:
-               msg_n_exit(EXIT_FAILURE,
-                       "only the good die young (caught SIGTERM))\n");
+               die(EXIT_FAILURE, "only the good die young (caught SIGTERM)\n");
                return;
        case SIGWINCH:
                if (curses_active()) {
@@ -1302,7 +1287,7 @@ static void com_reread_conf(void)
        init_curses();
        PARA_NOTICE_LOG("config file reloaded\n");
        if (check_key_map_args() < 0)
-               finish(EXIT_FAILURE);
+               die(EXIT_FAILURE, "invalid key map\n");
 }
 
 static void com_help(void)
@@ -1371,7 +1356,7 @@ static void com_version(void)
 
 __noreturn static void com_quit(void)
 {
-       finish(0);
+       die(EXIT_SUCCESS, "%s", "");
 }
 
 static void com_refresh(void)
@@ -1455,7 +1440,7 @@ int main(int argc, char *argv[])
                print_help_and_die();
        cf = configfile_exists();
        if (!cf && conf.config_file_given)
-               msg_n_exit(EXIT_FAILURE, "can not read config file %s\n",
+               die(EXIT_FAILURE, "can not read config file %s\n",
                        conf.config_file_arg);
        if (cf) {
                struct gui_cmdline_parser_params params = {
@@ -1469,7 +1454,7 @@ int main(int argc, char *argv[])
                loglevel = get_loglevel_by_name(conf.loglevel_arg);
        }
        if (check_key_map_args() < 0)
-               msg_n_exit(EXIT_FAILURE, "invalid key map\n");
+               die(EXIT_FAILURE, "invalid key map\n");
        theme_init(conf.theme_arg, &theme);
        setup_signal_handling();
        bot_win_rb = ringbuffer_new(RINGBUFFER_SIZE);