[hackers] [sbase] ed: add init() || Roberto E. Vargas Caballero

From: <git_AT_suckless.org>
Date: Fri, 1 Jan 2016 11:40:05 +0100 (CET)

commit b19d708923b28cfc84a963b6eb59427b3c09907c
Author: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
AuthorDate: Fri Jan 1 11:17:02 2016 +0100
Commit: sin <sin_AT_2f30.org>
CommitDate: Fri Jan 1 10:39:59 2016 +0000

    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.

diff --git a/ed.c b/ed.c
index 7dc80c6..1cf0d60 100644
--- a/ed.c
+++ b/ed.c
_AT_@ -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
_AT_@ -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[])
 {
_AT_@ -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 */
Received on Fri Jan 01 2016 - 11:40:05 CET

This archive was generated by hypermail 2.3.0 : Fri Jan 01 2016 - 11:48:19 CET