com_{ede,edx}: Move argv creation into generic_edit().
authorAndre Noll <maan@tuebingen.mpg.de>
Tue, 15 May 2018 18:57:00 +0000 (20:57 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Tue, 21 May 2019 10:04:39 +0000 (12:04 +0200)
This is a preparatory patch for the locate command which will be
introduced in a subsequent commit.

tfortune.c

index 751334d..186b2cc 100644 (file)
@@ -445,12 +445,9 @@ static char *get_editor(void)
        return xstrdup("vi");
 }
 
-static void open_editor(const char *dir)
+static void open_editor(char **argv)
 {
-       char *editor;
-       char **argv;
        pid_t pid;
-       unsigned n, num_inputs = lls_num_inputs(sublpr);
 
        if ((pid = fork()) < 0) {
                EMERG_LOG("fork error: %s\n", strerror(errno));
@@ -460,13 +457,8 @@ static void open_editor(const char *dir)
                wait(NULL);
                return;
        }
-       editor = get_editor();
-       argv = xmalloc((num_inputs + 2) * sizeof(*argv));
-       argv[0] = editor;
-       for (n = 0; n < num_inputs; n++)
-               xasprintf(&argv[n + 1], "%s/%s", dir, lls_input(n, sublpr));
-       argv[num_inputs + 1] = NULL;
-       execvp(editor, argv);
+       argv[0] = get_editor();
+       execvp(argv[0], argv);
        EMERG_LOG("execvp error: %s\n", strerror(errno));
        _exit(EXIT_FAILURE);
 }
@@ -502,6 +494,8 @@ static int generic_edit(const char *dir)
        char *errctx;
        int ret;
        bool basedir_given = OPT_GIVEN(TFORTUNE, BASEDIR);
+       char **argv;
+       unsigned n, num_inputs = lls_num_inputs(sublpr);
 
        ret = lls_check_arg_count(sublpr, 1, INT_MAX, &errctx);
        if (ret < 0) {
@@ -516,9 +510,12 @@ static int generic_edit(const char *dir)
                if (ret < 0)
                        return ret;
        }
-       open_editor(dir);
-       ret = 1;
-       return ret;
+       argv = xmalloc((num_inputs + 2) * sizeof(*argv));
+       for (n = 0; n < num_inputs; n++)
+               xasprintf(&argv[n + 1], "%s/%s", dir, lls_input(n, sublpr));
+       argv[num_inputs + 1] = NULL;
+       open_editor(argv);
+       return 1;
 }
 
 static int com_ede(void)