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:
parent
03d27b7806
commit
b19d708923
32
ed.c
32
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 */
|
||||
|
|
Loading…
Reference in New Issue
Block a user