[PATCH 07/17] setterm: add init_terminal() to make main() shorter

Sami Kerola
2014-05-18T14:06:10Z

term-utils/setterm.c | 50 ++++++++++++++++++++++++++------------------------
1 file changed, 26 insertions(+), 24 deletions(-)

diff --git a/term-utils/setterm.c b/term-utils/setterm.c
index 63c912b..05ea387 100644
--- a/term-utils/setterm.c
+++ b/term-utils/setterm.c
@@ -1060,46 +1060,48 @@ 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;
int term_errno;

- memset(&ctl, 0, sizeof (ctl));
- 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;
+
+ memset(&ctl, 0, sizeof (ctl));
+ 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;
--
1.9.2