changeset 586:0353ed084559

Convert mktemp to use xrealpath, and general clean up while there.
author Rob Landley <rob@landley.net>
date Fri, 01 Jun 2012 13:51:22 -0500
parents 1dcd7994abea
children 82ffae226c40
files toys/mktemp.c
diffstat 1 files changed, 17 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/toys/mktemp.c	Fri Jun 01 13:50:41 2012 -0500
+++ b/toys/mktemp.c	Fri Jun 01 13:51:22 2012 -0500
@@ -17,6 +17,7 @@
 	  Safely create a temporary file or directory and print its name.
 	  TEMPLATE should end in 6 consecutive X's, the default
 	  template is tmp.XXXXXX and the default directory is /tmp/.
+	  
 	  -d, --directory        Create a directory, instead of a file
 	  -p DIR, --tmpdir=DIR   Use DIR as a base path
 
@@ -31,26 +32,23 @@
 
 void mktemp_main(void)
 {
-	int  p_flag = (toys.optflags & 1);
-	int  d_flag = (toys.optflags & 2) >> 1;
-	char * result;
+	int  d_flag = toys.optflags & 2;
+	char *tmp, *path;
 
-	int size = snprintf(toybuf, sizeof(toybuf)-1, "%s/%s",
-			(p_flag && TT.tmpdir)?TT.tmpdir:"/tmp/",
-			(toys.optargs[0])?toys.optargs[0]:"tmp.XXXXXX");
-	toybuf[size] = 0;
+	tmp = *toys.optargs;
+	if (!tmp) tmp = "tmp.XXXXXX";
+	if (!TT.tmpdir) TT.tmpdir = "/tmp/";
 
-	if (d_flag) {
-		if (mkdtemp(toybuf) == NULL)
-			perror_exit("Failed to create temporary directory");
-	} else {
-		if (mkstemp(toybuf) == -1)
-			perror_exit("Failed to create temporary file");
+	tmp = xmsprintf("%s/%s", TT.tmpdir, tmp);
+
+	if (d_flag ? mkdtemp(tmp) == NULL : mkstemp(tmp) == -1)
+		perror_exit("Failed to create temporary %s",
+			d_flag ? "directory" : "file");
+
+	xputs(path = xrealpath(tmp));
+
+	if (CFG_TOYBOX_FREE) {
+		free(path);
+		free(tmp);
 	}
-
-	result = realpath(toybuf, NULL);
-	xputs(result);
-
-	if (CFG_TOYBOX_FREE)
-		free(result);
 }