From b19d708923b28cfc84a963b6eb59427b3c09907c Mon Sep 17 00:00:00 2001 From: "Roberto E. Vargas Caballero" Date: Fri, 1 Jan 2016 11:17:02 +0100 Subject: [PATCH] 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. --- ed.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/ed.c b/ed.c index 7dc80c6..1cf0d60 100644 --- 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 */