sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit b19d708923b28cfc84a963b6eb59427b3c09907c
parent 03d27b7806278ed1e723203346288e3ba84a0b4d
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Fri,  1 Jan 2016 11:17:02 +0100

ed: add init()

These funcction initializes the scratch buffer, and in case of
having a file name parameter it loads the file in the scratch.
It also fixes a problem before this version, where the saved
filename was not set when the file didn't exist.

Diffstat:
Med.c | 32++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/ed.c b/ed.c @@ -629,12 +629,6 @@ doread(char *fname) fp = NULL; if (fclose(aux)) error("input/output error"); - - if (savfname[0] == '\0') { - modflag = 0; - clearundo(); - strcpy(savfname, fname); - } } static void @@ -1359,6 +1353,23 @@ edit(void) } } +static void +init(char *fname) +{ + size_t len; + + if (setjmp(savesp)) + return; + setscratch(); + if (!fname) + return; + if ((len = strlen(fname)) >= FILENAME_MAX || len == 0) + error("incorrect filename"); + memcpy(savfname, fname, len); + doread(fname); + clearundo(); +} + int main(int argc, char *argv[]) { @@ -1380,15 +1391,8 @@ main(int argc, char *argv[]) signal(SIGINT, sigintr); signal(SIGHUP, sighup); signal(SIGQUIT, SIG_IGN); - if (!setjmp(savesp)) { - setscratch(); - if (*argv) { - if (strlen(*argv) >= FILENAME_MAX) - error("file name too long"); - doread(*argv); - } - } + init(*argv); edit(); /* not reached */