From 169ee8498e23fc1904563f03e06137cbf342bbdf Mon Sep 17 00:00:00 2001
From: Chris Allegretta <chrisa@asty.org>
Date: Fri, 26 Jan 2001 01:57:32 +0000
Subject: [PATCH] Fixed Bug #53

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@506 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 BUGS      |  4 ++--
 ChangeLog |  2 ++
 nano.c    | 19 ++++++++++++++++++-
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/BUGS b/BUGS
index 154750bf..af23fd51 100644
--- a/BUGS
+++ b/BUGS
@@ -85,6 +85,8 @@
   current line to the top of the screen, which it shouldn't do.  (50) 
   [FIXED]
 - with PDCURSES, running meta-X turns off the keypad.  (51) [FIXED]
+- Alt speller argument (-s, --speller) does not take a string argument of
+  more than one word. (53) [FIXED].
 
 ** Open BUGS **
 
@@ -95,7 +97,5 @@
 - Resizing the window completely screws up the display if in any other
   mode than normal editing (help screen, search and replace, file
   browser..) (52)
-- Alt speller argument (-s, --speller) does not take a string argument of
-  more than one word. (53).
 
 $Id$
diff --git a/ChangeLog b/ChangeLog
index 0455f8b0..5465a5a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -25,6 +25,8 @@ General
 	- Add arg to -T help (Rocco).
   global_init(), handle_sigwinch()
 	- Messy loops replaced with memset calls (Rocco).
+  do_alt_speller()
+	- Added code to parse multi-word alt_speller strings.
 
 nano 0.9.99pre1 - 01/17/2001
 General
diff --git a/nano.c b/nano.c
index a170b23f..6df7ced9 100644
--- a/nano.c
+++ b/nano.c
@@ -1316,6 +1316,9 @@ int do_alt_speller(char *file_name)
 {
     int alt_spell_status;
     pid_t pid_spell;
+    char *ptr;
+    static int arglen = 3;
+    static char **spellargs = (char **) NULL;
 
     endwin();
 
@@ -1323,8 +1326,22 @@ int do_alt_speller(char *file_name)
 
     if ( (pid_spell = fork()) == 0) {
 
+	/* Set up an argument list to pass the execvp function */
+	if (spellargs == NULL) {
+	    spellargs = nmalloc(arglen * sizeof(char *));
+
+	    spellargs[0] = strtok(alt_speller, " ");
+	    while ((ptr = strtok(NULL, " ")) != NULL) {
+		arglen++;
+		spellargs = nrealloc(spellargs, arglen * sizeof(char *));
+		spellargs[arglen - 3] = ptr;
+	    }
+	    spellargs[arglen - 1] = NULL;
+	}
+	spellargs[arglen - 2] = file_name;
+
 	/* Start alternate spell program, we are using the PATH here!?!? */
-	execlp(alt_speller, alt_speller, file_name, NULL);
+	execvp(spellargs[0], spellargs);
 
 	/* Should not be reached, if alternate speller is found!!! */
 
-- 
GitLab