[hackers] [sbase][PATCH] ed: Use TMPDIR to locate the temporal file

From: Roberto E. Vargas Caballero <k0ga_AT_shike2.com>
Date: Fri, 1 Jan 2016 18:25:58 +0100

The current behaviour of storing the scratch file in
the current directory is a bit painful, because it
generates files in all the directories where you
execute ed. BSD ed uses TMPDIR for this purpouse,
so if the user wants to put the scratch file in
other place different of /tmp it only has to set
this variable.
---
 ed.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/ed.c b/ed.c
index 1ecd0d9..62f8477 100644
--- a/ed.c
+++ b/ed.c
_AT_@ -329,15 +329,17 @@ static void
 setscratch()
 {
 	int k;
+	char *dir;
 
 	clearbuf();
 	clearundo();
-	strcpy(tmpname, "ed.XXXXXX");
+	if ((dir = getenv("TMPDIR")) == NULL)
+		dir = "/tmp/";
+	if (strlen(dir) + sizeof("ed.XXXXXX") > FILENAME_MAX)
+		error("incorrect scratch file name");
+	strcat(strcpy(tmpname, dir), "ed.XXXXX");
 	if ((scratch = mkstemp(tmpname)) < 0) {
-		/* try /tmp if cwd is not writable */
-		strcpy(tmpname, "/tmp/ed.XXXXXX");
-		if ((scratch = mkstemp(tmpname)) < 0)
-			error("failed to create scratch file");
+		error("failed to create scratch file");
 	}
 	if ((k = makeline("", NULL)))
 		error("input/output error in scratch file");
-- 
2.1.4
Received on Fri Jan 01 2016 - 18:25:58 CET

This archive was generated by hypermail 2.3.0 : Fri Jan 01 2016 - 18:36:12 CET