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.
This commit is contained in:
Roberto E. Vargas Caballero 2016-01-01 11:17:02 +01:00 committed by sin
parent 03d27b7806
commit b19d708923

32
ed.c
View File

@ -629,12 +629,6 @@ doread(char *fname)
fp = NULL; fp = NULL;
if (fclose(aux)) if (fclose(aux))
error("input/output error"); error("input/output error");
if (savfname[0] == '\0') {
modflag = 0;
clearundo();
strcpy(savfname, fname);
}
} }
static void 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 int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
@ -1380,15 +1391,8 @@ main(int argc, char *argv[])
signal(SIGINT, sigintr); signal(SIGINT, sigintr);
signal(SIGHUP, sighup); signal(SIGHUP, sighup);
signal(SIGQUIT, SIG_IGN); 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(); edit();
/* not reached */ /* not reached */