commit cf0a0fc940b33a9213993448e2d2d8cf217108b0
parent 6630bd97cf73d6233cd9c5905f7edc8e4657ff27
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Fri, 1 Jan 2016 17:40:34 +0100
ed: Fix error introduced in b19d708
This patch introduced init() function, which removed the initialization
code of savfname in doread, but this is incorrect, because savfname
can be initialized with a r command if savfname is empty.
Diffstat:
M | ed.c | | | 19 | +++++++++++-------- |
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/ed.c b/ed.c
@@ -702,7 +702,7 @@ chkprint(int flag)
}
static char *
-getfname(void)
+getfname(char comm)
{
int c;
char *bp;
@@ -721,6 +721,8 @@ getfname(void)
error("file name too long");
} else {
*bp = '\0';
+ if (savfname[0] == '\0' || comm == 'e' || comm == 'f')
+ strcpy(savfname, fname);
return fname;
}
return NULL; /* not reached */
@@ -1015,7 +1017,7 @@ subst(int nth)
static void
docmd(void)
{
- char *s, cmd;
+ char cmd;
int rep = 0, c, line3, num, trunc;
repeat:
@@ -1073,13 +1075,13 @@ repeat:
trunc = 1;
case 'W':
deflines(nextln(0), lastln);
- dowrite(getfname(), trunc);
+ dowrite(getfname(cmd), trunc);
break;
case 'r':
if (nlines > 1)
goto bad_address;
deflines(lastln, lastln);
- doread(getfname());
+ doread(getfname(cmd));
break;
case 'd':
chkprint(1);
@@ -1190,10 +1192,11 @@ repeat:
case 'f':
if (nlines > 0)
goto unexpected;
- if (!strcmp(s = getfname(), savfname))
- puts(savfname);
+ if (back(input()) != '\n')
+ getfname(cmd);
else
- strcpy(savfname, s);
+ puts(savfname);
+ chkprint(0);
break;
case 'E':
modflag = 0;
@@ -1202,7 +1205,7 @@ repeat:
goto unexpected;
if (modflag)
goto modified;
- strcpy(savfname, getfname());
+ getfname(cmd);
setscratch();
deflines(curln, curln);
doread(savfname);