summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch')
-rw-r--r--app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch342
1 files changed, 342 insertions, 0 deletions
diff --git a/app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch b/app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch
new file mode 100644
index 000000000000..978e24de805d
--- /dev/null
+++ b/app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch
@@ -0,0 +1,342 @@
+From 4b7f7a30c9ec593d68186b1dfef44d4e2bda735b Mon Sep 17 00:00:00 2001
+From: Benno Schulenberg <bensberg@telfort.nl>
+Date: Mon, 22 Jun 2020 08:39:59 +0200
+Subject: [PATCH] build: fix compilation when configured with
+ --disable-speller
+
+Move two functions that are used by the formatter too
+to between the proper #ifdef.
+
+Problem existed since commit 8089f5ad from a month ago.
+
+Backported to v4.9.3
+Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
+---
+ src/text.c | 302 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 151 insertions(+), 151 deletions(-)
+
+diff --git a/src/text.c b/src/text.c
+index 93ad3704..c7690fd0 100644
+--- a/src/text.c
++++ b/src/text.c
+@@ -2011,8 +2011,159 @@ void construct_argument_list(char ***arguments, char *command, char *filename)
+ (*arguments)[count - 2] = filename;
+ (*arguments)[count - 1] = NULL;
+ }
++
++/* Open the specified file, and if that succeeds, remove the text of the marked
++ * region or of the entire buffer and read the file contents into its place. */
++bool replace_buffer(const char *filename, undo_type action, const char *operation)
++{
++ linestruct *was_cutbuffer = cutbuffer;
++ int descriptor;
++ FILE *stream;
++
++ descriptor = open_file(filename, FALSE, &stream);
++
++ if (descriptor < 0)
++ return FALSE;
++
++ cutbuffer = NULL;
++
++#ifndef NANO_TINY
++ add_undo(COUPLE_BEGIN, operation);
++
++ /* Cut either the marked region or the whole buffer. */
++ add_undo(action, NULL);
++#endif
++ do_snip(FALSE, openfile->mark, openfile->mark == NULL, FALSE);
++#ifndef NANO_TINY
++ update_undo(action);
+ #endif
+
++ /* Discard what was cut. */
++ free_lines(cutbuffer);
++ cutbuffer = was_cutbuffer;
++
++ /* Insert the spell-checked file into the cleared area. */
++ read_file(stream, descriptor, filename, TRUE);
++
++#ifndef NANO_TINY
++ add_undo(COUPLE_END, operation);
++#endif
++ return TRUE;
++}
++
++/* Execute the given program, with the given temp file as last argument. */
++const char *treat(char *tempfile_name, char *theprogram, bool spelling)
++{
++ ssize_t lineno_save = openfile->current->lineno;
++ size_t current_x_save = openfile->current_x;
++ size_t pww_save = openfile->placewewant;
++ bool was_at_eol = (openfile->current->data[openfile->current_x] == '\0');
++ struct stat fileinfo;
++ long timestamp_sec, timestamp_nsec;
++ static char **arguments = NULL;
++ pid_t thepid;
++ int program_status;
++ bool replaced = FALSE;
++
++ /* Get the timestamp and the size of the temporary file. */
++ stat(tempfile_name, &fileinfo);
++ timestamp_sec = (long)fileinfo.st_mtim.tv_sec;
++ timestamp_nsec = (long)fileinfo.st_mtim.tv_nsec;
++
++ /* If the number of bytes to check is zero, get out. */
++ if (fileinfo.st_size == 0)
++ return NULL;
++
++ /* Exit from curses mode to give the program control of the terminal. */
++ endwin();
++
++ construct_argument_list(&arguments, theprogram, tempfile_name);
++
++ /* Fork a child process and run the given program in it. */
++ if ((thepid = fork()) == 0) {
++ execvp(arguments[0], arguments);
++
++ /* Terminate the child if the program is not found. */
++ exit(9);
++ } else if (thepid < 0)
++ return _("Could not fork");
++
++ /* Block SIGWINCHes while waiting for the program to end,
++ * so nano doesn't get pushed past the wait(). */
++ block_sigwinch(TRUE);
++ wait(&program_status);
++ block_sigwinch(FALSE);
++
++ /* Restore the terminal state and reenter curses mode. */
++ terminal_init();
++ doupdate();
++
++ if (!WIFEXITED(program_status) || WEXITSTATUS(program_status) > 2) {
++ statusline(ALERT, _("Error invoking '%s'"), arguments[0]);
++ return NULL;
++ } else if (WEXITSTATUS(program_status) != 0)
++ statusline(ALERT, _("Program '%s' complained"), arguments[0]);
++
++ /* Stat the temporary file again. */
++ stat(tempfile_name, &fileinfo);
++
++ /* When the temporary file wasn't touched, say so and leave. */
++ if ((long)fileinfo.st_mtim.tv_sec == timestamp_sec &&
++ (long)fileinfo.st_mtim.tv_nsec == timestamp_nsec) {
++ statusbar(_("Nothing changed"));
++ return NULL;
++ }
++
++#ifndef NANO_TINY
++ /* Replace the marked text (or entire text) with the corrected text. */
++ if (spelling && openfile->mark) {
++ ssize_t was_mark_lineno = openfile->mark->lineno;
++ bool upright = mark_is_before_cursor();
++
++ replaced = replace_buffer(tempfile_name, CUT, "spelling correction");
++
++ /* Adjust the end point of the marked region for any change in
++ * length of the region's last line. */
++ if (upright)
++ current_x_save = openfile->current_x;
++ else
++ openfile->mark_x = openfile->current_x;
++
++ /* Restore the mark. */
++ openfile->mark = line_from_number(was_mark_lineno);
++ } else
++#endif
++ {
++ openfile->current = openfile->filetop;
++ openfile->current_x = 0;
++
++ replaced = replace_buffer(tempfile_name, CUT_TO_EOF,
++ /* TRANSLATORS: The next two go with Undid/Redid messages. */
++ (spelling ? N_("spelling correction") : N_("formatting")));
++ }
++
++ /* Go back to the old position. */
++ goto_line_posx(lineno_save, current_x_save);
++ if (was_at_eol || openfile->current_x > strlen(openfile->current->data))
++ openfile->current_x = strlen(openfile->current->data);
++
++#ifndef NANO_TINY
++ if (replaced)
++ update_undo(COUPLE_END);
++#endif
++
++ openfile->placewewant = pww_save;
++ adjust_viewport(STATIONARY);
++
++ if (spelling)
++ statusbar(_("Finished checking spelling"));
++ else
++ statusbar(_("Buffer has been processed"));
++
++ return NULL;
++}
++#endif /* ENABLE_SPELLER || ENABLE_COLOR */
++
+ #ifdef ENABLE_SPELLER
+ /* Let the user edit the misspelled word. Return FALSE if the user cancels. */
+ bool fix_spello(const char *word)
+@@ -2307,157 +2458,6 @@ const char *do_int_speller(const char *tempfile_name)
+ return NULL;
+ }
+
+-/* Open the specified file, and if that succeeds, remove the text of the marked
+- * region or of the entire buffer and read the file contents into its place. */
+-bool replace_buffer(const char *filename, undo_type action, const char *operation)
+-{
+- linestruct *was_cutbuffer = cutbuffer;
+- int descriptor;
+- FILE *stream;
+-
+- descriptor = open_file(filename, FALSE, &stream);
+-
+- if (descriptor < 0)
+- return FALSE;
+-
+- cutbuffer = NULL;
+-
+-#ifndef NANO_TINY
+- add_undo(COUPLE_BEGIN, operation);
+-
+- /* Cut either the marked region or the whole buffer. */
+- add_undo(action, NULL);
+-#endif
+- do_snip(FALSE, openfile->mark, openfile->mark == NULL, FALSE);
+-#ifndef NANO_TINY
+- update_undo(action);
+-#endif
+-
+- /* Discard what was cut. */
+- free_lines(cutbuffer);
+- cutbuffer = was_cutbuffer;
+-
+- /* Insert the spell-checked file into the cleared area. */
+- read_file(stream, descriptor, filename, TRUE);
+-
+-#ifndef NANO_TINY
+- add_undo(COUPLE_END, operation);
+-#endif
+- return TRUE;
+-}
+-
+-/* Execute the given program, with the given temp file as last argument. */
+-const char *treat(char *tempfile_name, char *theprogram, bool spelling)
+-{
+- ssize_t lineno_save = openfile->current->lineno;
+- size_t current_x_save = openfile->current_x;
+- size_t pww_save = openfile->placewewant;
+- bool was_at_eol = (openfile->current->data[openfile->current_x] == '\0');
+- struct stat fileinfo;
+- long timestamp_sec, timestamp_nsec;
+- static char **arguments = NULL;
+- pid_t thepid;
+- int program_status;
+- bool replaced = FALSE;
+-
+- /* Get the timestamp and the size of the temporary file. */
+- stat(tempfile_name, &fileinfo);
+- timestamp_sec = (long)fileinfo.st_mtim.tv_sec;
+- timestamp_nsec = (long)fileinfo.st_mtim.tv_nsec;
+-
+- /* If the number of bytes to check is zero, get out. */
+- if (fileinfo.st_size == 0)
+- return NULL;
+-
+- /* Exit from curses mode to give the program control of the terminal. */
+- endwin();
+-
+- construct_argument_list(&arguments, theprogram, tempfile_name);
+-
+- /* Fork a child process and run the given program in it. */
+- if ((thepid = fork()) == 0) {
+- execvp(arguments[0], arguments);
+-
+- /* Terminate the child if the program is not found. */
+- exit(9);
+- } else if (thepid < 0)
+- return _("Could not fork");
+-
+- /* Block SIGWINCHes while waiting for the program to end,
+- * so nano doesn't get pushed past the wait(). */
+- block_sigwinch(TRUE);
+- wait(&program_status);
+- block_sigwinch(FALSE);
+-
+- /* Restore the terminal state and reenter curses mode. */
+- terminal_init();
+- doupdate();
+-
+- if (!WIFEXITED(program_status) || WEXITSTATUS(program_status) > 2) {
+- statusline(ALERT, _("Error invoking '%s'"), arguments[0]);
+- return NULL;
+- } else if (WEXITSTATUS(program_status) != 0)
+- statusline(ALERT, _("Program '%s' complained"), arguments[0]);
+-
+- /* Stat the temporary file again. */
+- stat(tempfile_name, &fileinfo);
+-
+- /* When the temporary file wasn't touched, say so and leave. */
+- if ((long)fileinfo.st_mtim.tv_sec == timestamp_sec &&
+- (long)fileinfo.st_mtim.tv_nsec == timestamp_nsec) {
+- statusbar(_("Nothing changed"));
+- return NULL;
+- }
+-
+-#ifndef NANO_TINY
+- /* Replace the marked text (or entire text) with the corrected text. */
+- if (spelling && openfile->mark) {
+- ssize_t was_mark_lineno = openfile->mark->lineno;
+- bool upright = mark_is_before_cursor();
+-
+- replaced = replace_buffer(tempfile_name, CUT, "spelling correction");
+-
+- /* Adjust the end point of the marked region for any change in
+- * length of the region's last line. */
+- if (upright)
+- current_x_save = openfile->current_x;
+- else
+- openfile->mark_x = openfile->current_x;
+-
+- /* Restore the mark. */
+- openfile->mark = line_from_number(was_mark_lineno);
+- } else
+-#endif
+- {
+- openfile->current = openfile->filetop;
+- openfile->current_x = 0;
+-
+- replaced = replace_buffer(tempfile_name, CUT_TO_EOF,
+- /* TRANSLATORS: The next two go with Undid/Redid messages. */
+- (spelling ? N_("spelling correction") : N_("formatting")));
+- }
+-
+- /* Go back to the old position. */
+- goto_line_posx(lineno_save, current_x_save);
+- if (was_at_eol || openfile->current_x > strlen(openfile->current->data))
+- openfile->current_x = strlen(openfile->current->data);
+-
+-#ifndef NANO_TINY
+- if (replaced)
+- update_undo(COUPLE_END);
+-#endif
+-
+- openfile->placewewant = pww_save;
+- adjust_viewport(STATIONARY);
+-
+- if (spelling)
+- statusbar(_("Finished checking spelling"));
+- else
+- statusbar(_("Buffer has been processed"));
+-
+- return NULL;
+-}
+-
+ /* Spell check the current file. If an alternate spell checker is
+ * specified, use it. Otherwise, use the internal spell checker. */
+ void do_spell(void)
+--
+2.28.0
+