1/* mktemp.c - Create a temporary file or directory. 2 * 3 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com> 4 * 5 * http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/mktemp.html 6 7USE_MKTEMP(NEWTOY(mktemp, ">1qd(directory)p(tmpdir):", TOYFLAG_BIN)) 8 9config MKTEMP 10 bool "mktemp" 11 default y 12 help 13 usage: mktemp [-dq] [-p DIR] [TEMPLATE] 14 15 Safely create a new file "DIR/TEMPLATE" and print its name. 16 17 -d Create directory instead of file (--directory) 18 -p Put new file in DIR (--tmpdir) 19 -q Quiet, no error messages 20 21 Each X in TEMPLATE is replaced with a random printable character. The 22 default TEMPLATE is tmp.XXXXXX, and the default DIR is $TMPDIR if set, 23 else "/tmp". 24*/ 25 26#define FOR_mktemp 27#include "toys.h" 28 29GLOBALS( 30 char *tmpdir; 31) 32 33void mktemp_main(void) 34{ 35 int d_flag = toys.optflags & FLAG_d; 36 char *template = *toys.optargs; 37 38 if (!template) template = "tmp.XXXXXX"; 39 40 if (!TT.tmpdir) TT.tmpdir = getenv("TMPDIR"); 41 if (!TT.tmpdir || !*TT.tmpdir) TT.tmpdir = "/tmp"; 42 43 template = strchr(template, '/') ? xstrdup(template) 44 : xmprintf("%s/%s", TT.tmpdir, template); 45 46 if (d_flag ? !mkdtemp(template) : mkstemp(template) == -1) { 47 if (toys.optflags & FLAG_q) toys.exitval = 1; 48 else perror_exit("Failed to create %s %s/%s", 49 d_flag ? "directory" : "file", TT.tmpdir, template); 50 } else xputs(template); 51 52 if (CFG_TOYBOX_FREE) free(template); 53} 54