]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
setterm: add init_terminal() to make main() shorter
authorSami Kerola <kerolasa@iki.fi>
Sun, 18 May 2014 08:54:12 +0000 (09:54 +0100)
committerSami Kerola <kerolasa@iki.fi>
Mon, 19 May 2014 21:45:38 +0000 (22:45 +0100)
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
term-utils/setterm.c

index 83cfbd55cb616a40f39824981618bc8e3f1914e1..bf56198418848168a37d5e492c1883a57cb6467d 100644 (file)
@@ -1051,45 +1051,47 @@ static void perform_sequence(struct setterm_control *ctl)
 
 }
 
-int main(int argc, char **argv)
+static void init_terminal(struct setterm_control *ctl)
 {
-       struct setterm_control ctl = { 0 };
        int term_errno;
 
-       setlocale(LC_ALL, "");
-       bindtextdomain(PACKAGE, LOCALEDIR);
-       textdomain(PACKAGE);
-       atexit(close_stdout);
-
-       if (argc < 2)
-               usage(stderr);
-
-       /* Parse arguments. */
-       parse_option(&ctl, argc, argv);
-
-       /* Find out terminal name. */
-       if (!ctl.opt_te_terminal_name) {
-               ctl.opt_te_terminal_name = getenv("TERM");
-               if (ctl.opt_te_terminal_name == NULL)
+       if (!ctl->opt_te_terminal_name) {
+               ctl->opt_te_terminal_name = getenv("TERM");
+               if (ctl->opt_te_terminal_name == NULL)
                        errx(EXIT_FAILURE, _("$TERM is not defined."));
        }
 
        /* Find terminfo entry. */
-       if (setupterm(ctl.opt_te_terminal_name, 1, &term_errno))
-               switch(term_errno) {
+       if (setupterm(ctl->opt_te_terminal_name, STDOUT_FILENO, &term_errno))
+               switch (term_errno) {
                case -1:
                        errx(EXIT_FAILURE, _("terminfo database cannot be found"));
                case 0:
-                       errx(EXIT_FAILURE, _("%s: unknown terminal type"), ctl.opt_te_terminal_name);
+                       errx(EXIT_FAILURE, _("%s: unknown terminal type"), ctl->opt_te_terminal_name);
                case 1:
                        errx(EXIT_FAILURE, _("terminal is hardcopy"));
                }
 
        /* See if the terminal is a virtual console terminal. */
-       ctl.vcterm = (!strncmp(ctl.opt_te_terminal_name, "con", 3) ||
-                     !strncmp(ctl.opt_te_terminal_name, "linux", 5));
+       ctl->vcterm = (!strncmp(ctl->opt_te_terminal_name, "con", 3) ||
+                      !strncmp(ctl->opt_te_terminal_name, "linux", 5));
+}
+
 
-       /* Perform the selected options. */
+int main(int argc, char **argv)
+{
+       struct setterm_control ctl = { 0 };
+
+       setlocale(LC_ALL, "");
+       bindtextdomain(PACKAGE, LOCALEDIR);
+       textdomain(PACKAGE);
+       atexit(close_stdout);
+
+       if (argc < 2)
+               usage(stderr);
+
+       parse_option(&ctl, argc, argv);
+       init_terminal(&ctl);
        perform_sequence(&ctl);
 
        return EXIT_SUCCESS;