sbase

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

commit a52b48e245a38a762643a57273655431b9759f72
parent 7db2aff64a79f525c1b836f277c54cf31906fca4
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Fri Jan  1 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:
ed.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 */