[hackers] [sbase] ed: Fix error introduced in b19d708 || Roberto E. Vargas Caballero

From: <git_AT_suckless.org>
Date: Sat, 2 Jan 2016 10:47:09 +0100 (CET)

commit cf0a0fc940b33a9213993448e2d2d8cf217108b0
Author: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
AuthorDate: Fri Jan 1 17:40:34 2016 +0100
Commit: sin <sin_AT_2f30.org>
CommitDate: Sat Jan 2 09:46:48 2016 +0000

    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.

diff --git a/ed.c b/ed.c
index 5369d60..1ecd0d9 100644
--- a/ed.c
+++ b/ed.c
_AT_@ -702,7 +702,7 @@ chkprint(int flag)
 }
 
 static char *
-getfname(void)
+getfname(char comm)
 {
         int c;
         char *bp;
_AT_@ -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 */
_AT_@ -1015,7 +1017,7 @@ subst(int nth)
 static void
 docmd(void)
 {
- char *s, cmd;
+ char cmd;
         int rep = 0, c, line3, num, trunc;
 
 repeat:
_AT_@ -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);
_AT_@ -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;
_AT_@ -1202,7 +1205,7 @@ repeat:
                         goto unexpected;
                 if (modflag)
                         goto modified;
- strcpy(savfname, getfname());
+ getfname(cmd);
                 setscratch();
                 deflines(curln, curln);
                 doread(savfname);
Received on Sat Jan 02 2016 - 10:47:09 CET

This archive was generated by hypermail 2.3.0 : Sat Jan 02 2016 - 10:48:17 CET