tweaks: rename a function and add a parameter, so it becomes more general

Also adjust the comments and rename three variables.
master
Benno Schulenberg 2019-10-09 15:24:21 +02:00
parent 222e67300e
commit ad451933c6
1 changed files with 20 additions and 21 deletions

View File

@ -2533,43 +2533,42 @@ const char *do_int_speller(const char *tempfile_name)
exit(1); exit(1);
} }
/* External (alternate) spell checking. Return NULL for normal /* Execute the given program, with the given temp file as last argument. */
* termination, and the error string otherwise. */ const char *treat(char *tempfile_name, char *theprogram)
const char *do_alt_speller(char *tempfile_name)
{ {
ssize_t lineno_save = openfile->current->lineno; ssize_t lineno_save = openfile->current->lineno;
size_t current_x_save = openfile->current_x; size_t current_x_save = openfile->current_x;
size_t pww_save = openfile->placewewant; size_t pww_save = openfile->placewewant;
bool was_at_eol = (openfile->current->data[openfile->current_x] == '\0'); bool was_at_eol = (openfile->current->data[openfile->current_x] == '\0');
struct stat spellfileinfo; struct stat fileinfo;
time_t timestamp; time_t timestamp;
static char **spellargs = NULL; static char **arguments = NULL;
pid_t pid_spell; pid_t thepid;
int program_status; int program_status;
/* Get the timestamp and the size of the temporary file. */ /* Get the timestamp and the size of the temporary file. */
stat(tempfile_name, &spellfileinfo); stat(tempfile_name, &fileinfo);
timestamp = spellfileinfo.st_mtime; timestamp = fileinfo.st_mtime;
/* If the number of bytes to check is zero, get out. */ /* If the number of bytes to check is zero, get out. */
if (spellfileinfo.st_size == 0) if (fileinfo.st_size == 0)
return NULL; return NULL;
/* Exit from curses mode. */ /* Exit from curses mode. */
endwin(); endwin();
construct_argument_list(&spellargs, alt_speller, tempfile_name); construct_argument_list(&arguments, theprogram, tempfile_name);
/* Fork a child process and run the alternate spell program in it. */ /* Fork a child process and run the given program in it. */
if ((pid_spell = fork()) == 0) { if ((thepid = fork()) == 0) {
execvp(spellargs[0], spellargs); execvp(arguments[0], arguments);
/* Terminate the child process if no alternate speller is found. */ /* Terminate the child if the program is not found. */
exit(1); exit(1);
} else if (pid_spell < 0) } else if (thepid < 0)
return _("Could not fork"); return _("Could not fork");
/* Block SIGWINCHes while waiting for the alternate spell checker's end, /* Block SIGWINCHes while waiting for the program to end,
* so nano doesn't get pushed past the wait(). */ * so nano doesn't get pushed past the wait(). */
block_sigwinch(TRUE); block_sigwinch(TRUE);
wait(&program_status); wait(&program_status);
@ -2580,13 +2579,13 @@ const char *do_alt_speller(char *tempfile_name)
doupdate(); doupdate();
if (!WIFEXITED(program_status) || WEXITSTATUS(program_status) != 0) if (!WIFEXITED(program_status) || WEXITSTATUS(program_status) != 0)
return invocation_error(alt_speller); return invocation_error(theprogram);
/* Stat the temporary file again. */ /* Stat the temporary file again. */
stat(tempfile_name, &spellfileinfo); stat(tempfile_name, &fileinfo);
/* Use the spell-checked file only when it changed. */ /* Read in the temporary file only when it changed. */
if (spellfileinfo.st_mtime != timestamp) { if (fileinfo.st_mtime != timestamp) {
bool replaced = FALSE; bool replaced = FALSE;
#ifndef NANO_TINY #ifndef NANO_TINY
/* Replace the marked text (or entire text) with the corrected text. */ /* Replace the marked text (or entire text) with the corrected text. */
@ -2668,7 +2667,7 @@ void do_spell(void)
blank_bottombars(); blank_bottombars();
result_msg = (alt_speller ? do_alt_speller(temp) : do_int_speller(temp)); result_msg = (alt_speller ? treat(temp, alt_speller) : do_int_speller(temp));
unlink(temp); unlink(temp);
free(temp); free(temp);