Mercurial > hg > toybox
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/"; + + tmp = xmsprintf("%s/%s", 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"); + 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); }