aboutsummaryrefslogtreecommitdiff
path: root/debianutils
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-06-05 12:06:00 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-06-05 12:06:00 +0000
commitc05b1684a0bc104f7116b67d1dbdbfddceb4aec2 (patch)
tree7e49ac853ea04dd6a69f6dc09e480219f3f0375e /debianutils
parent66d56c565e48a73309cca55e2d1a2225d9fcc8d9 (diff)
downloadbusybox-w32-c05b1684a0bc104f7116b67d1dbdbfddceb4aec2.tar.gz
busybox-w32-c05b1684a0bc104f7116b67d1dbdbfddceb4aec2.tar.bz2
busybox-w32-c05b1684a0bc104f7116b67d1dbdbfddceb4aec2.zip
mktemp: make argument optional (coreutil 6.12 compat)
function old new delta mktemp_main 157 174 +17 packed_usage 24508 24504 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 17/-4) Total: 13 bytes
Diffstat (limited to 'debianutils')
-rw-r--r--debianutils/mktemp.c41
1 files changed, 30 insertions, 11 deletions
diff --git a/debianutils/mktemp.c b/debianutils/mktemp.c
index b011fc10c..de27d3023 100644
--- a/debianutils/mktemp.c
+++ b/debianutils/mktemp.c
@@ -9,34 +9,53 @@
9 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. 9 * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
10 */ 10 */
11 11
12/* Coreutils 6.12 man page says:
13 * mktemp [OPTION]... [TEMPLATE]
14 * Create a temporary file or directory, safely, and print its name. If
15 * TEMPLATE is not specified, use tmp.XXXXXXXXXX.
16 * -d, --directory
17 * create a directory, not a file
18 * -q, --quiet
19 * suppress diagnostics about file/dir-creation failure
20 * -u, --dry-run
21 * do not create anything; merely print a name (unsafe)
22 * --tmpdir[=DIR]
23 * interpret TEMPLATE relative to DIR. If DIR is not specified,
24 * use $TMPDIR if set, else /tmp. With this option, TEMPLATE must
25 * not be an absolute name. Unlike with -t, TEMPLATE may contain
26 * slashes, but even here, mktemp still creates only the final com-
27 * ponent.
28 * -p DIR use DIR as a prefix; implies -t [deprecated]
29 * -t interpret TEMPLATE as a single file name component, relative to
30 * a directory: $TMPDIR, if set; else the directory specified via
31 * -p; else /tmp [deprecated]
32 */
33
34
12#include "libbb.h" 35#include "libbb.h"
13 36
14int mktemp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 37int mktemp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
15int mktemp_main(int argc ATTRIBUTE_UNUSED, char **argv) 38int mktemp_main(int argc ATTRIBUTE_UNUSED, char **argv)
16{ 39{
17 // -d Make a directory instead of a file
18 // -q Fail silently if an error occurs [bbox: ignored]
19 // -t Generate a path rooted in temporary directory
20 // -p DIR Use DIR as a temporary directory (implies -t)
21 const char *path; 40 const char *path;
22 char *chp; 41 char *chp;
23 unsigned flags; 42 unsigned opt;
24 43
25 opt_complementary = "=1"; /* exactly one arg */ 44 opt_complementary = "?1"; /* 1 argument max */
26 flags = getopt32(argv, "dqtp:", &path); 45 opt = getopt32(argv, "dqtp:", &path);
27 chp = argv[optind]; 46 chp = argv[optind] ? argv[optind] : xstrdup("tmp.XXXXXXXXXX");
28 47
29 if (flags & (4|8)) { /* -t and/or -p */ 48 if (opt & (4|8)) { /* -t and/or -p */
30 const char *dir = getenv("TMPDIR"); 49 const char *dir = getenv("TMPDIR");
31 if (dir && *dir != '\0') 50 if (dir && *dir != '\0')
32 path = dir; 51 path = dir;
33 else if (!(flags & 8)) /* No -p */ 52 else if (!(opt & 8)) /* no -p */
34 path = "/tmp/"; 53 path = "/tmp/";
35 /* else path comes from -p DIR */ 54 /* else path comes from -p DIR */
36 chp = concat_path_file(path, chp); 55 chp = concat_path_file(path, chp);
37 } 56 }
38 57
39 if (flags & 1) { /* -d */ 58 if (opt & 1) { /* -d */
40 if (mkdtemp(chp) == NULL) 59 if (mkdtemp(chp) == NULL)
41 return EXIT_FAILURE; 60 return EXIT_FAILURE;
42 } else { 61 } else {