diff options
| author | Rob Landley <rob@landley.net> | 2012-06-01 13:51:22 -0500 | 
|---|---|---|
| committer | Rob Landley <rob@landley.net> | 2012-06-01 13:51:22 -0500 | 
| commit | 0f6f98009a7631e613711304f99205de7e19c123 (patch) | |
| tree | ea6e3314b8bc59f48854e3717abe47f0b7608f0d | |
| parent | eec463764dbc2e83325695583a1b73bebc492a9e (diff) | |
| download | toybox-0f6f98009a7631e613711304f99205de7e19c123.tar.gz | |
Convert mktemp to use xrealpath, and general clean up while there.
| -rw-r--r-- | toys/mktemp.c | 38 | 
1 files changed, 18 insertions, 20 deletions
| diff --git a/toys/mktemp.c b/toys/mktemp.c index 91caf20e..e82256de 100644 --- a/toys/mktemp.c +++ b/toys/mktemp.c @@ -17,6 +17,7 @@ config MKTEMP  	  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 @@ DEFINE_GLOBALS(  void mktemp_main(void)  { -	int  p_flag = (toys.optflags & 1); -	int  d_flag = (toys.optflags & 2) >> 1; -	char * result; - -	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; - -	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"); -	} +	int  d_flag = toys.optflags & 2; +	char *tmp, *path; + +	tmp = *toys.optargs; +	if (!tmp) tmp = "tmp.XXXXXX"; +	if (!TT.tmpdir) TT.tmpdir = "/tmp/"; + +	tmp = xmsprintf("%s/%s", TT.tmpdir, tmp); -	result = realpath(toybuf, NULL); -	xputs(result); +	if (d_flag ? mkdtemp(tmp) == NULL : mkstemp(tmp) == -1) +		perror_exit("Failed to create temporary %s", +			d_flag ? "directory" : "file"); -	if (CFG_TOYBOX_FREE) -		free(result); +	xputs(path = xrealpath(tmp)); + +	if (CFG_TOYBOX_FREE) { +		free(path); +		free(tmp); +	}  } | 
