commit e434b4514854e2a8b7c27f577e2f634c7eabc0e1
parent 221a46e2710349b89e445cfb33aec686bc223a60
Author: Chris Allegretta <chrisa@asty.org>
Date: Sat, 27 Jan 2001 19:25:00 +0000
do_alt_speller and nanogetstr fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@508 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
3 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -27,6 +27,10 @@ General
- Messy loops replaced with memset calls (Rocco).
do_alt_speller()
- Added code to parse multi-word alt_speller strings.
+ - Fix initialization before fork() (Rocco).
+- winio.c:
+ nanogetstr()
+ - Sanity check for x overrunning the string buffer len.
nano 0.9.99pre1 - 01/17/2001
General
diff --git a/nano.c b/nano.c
@@ -1322,24 +1322,23 @@ int do_alt_speller(char *file_name)
endwin();
- /* Start a new process for the alternate speller */
+ /* 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 a new process for the alternate speller */
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!?!? */
execvp(spellargs[0], spellargs);
diff --git a/winio.c b/winio.c
@@ -353,6 +353,8 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
inputbuf = input_tab(inputbuf, (x - x_left),
&tabbed, &shift);
x += shift;
+ if (x - x_left > strlen(inputbuf))
+ x = strlen(inputbuf) + x_left;
nanoget_repaint(buf, inputbuf, x);
}
break;