From e434b4514854e2a8b7c27f577e2f634c7eabc0e1 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Sat, 27 Jan 2001 19:25:00 +0000 Subject: [PATCH] do_alt_speller and nanogetstr fixes git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@508 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 4 ++++ nano.c | 29 ++++++++++++++--------------- winio.c | 2 ++ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5465a5a6..db9976ff 100644 --- 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 index 6df7ced9..c4544168 100644 --- 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 index 06e65308..5f10bf71 100644 --- 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; -- 2.39.5