aboutsummaryrefslogtreecommitdiff
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
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
-rw-r--r--debianutils/mktemp.c41
-rw-r--r--include/usage.h11
2 files changed, 35 insertions, 17 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 {
diff --git a/include/usage.h b/include/usage.h
index 2e5321306..f9a831e85 100644
--- a/include/usage.h
+++ b/include/usage.h
@@ -2542,19 +2542,18 @@
2542#endif 2542#endif
2543 2543
2544#define mktemp_trivial_usage \ 2544#define mktemp_trivial_usage \
2545 "[-dt] [-p DIR] TEMPLATE" 2545 "[-dt] [-p DIR] [TEMPLATE]"
2546#define mktemp_full_usage "\n\n" \ 2546#define mktemp_full_usage "\n\n" \
2547 "Create a temporary file with its name based on TEMPLATE.\n" \ 2547 "Create a temporary file with name based on TEMPLATE and print its name.\n" \
2548 "TEMPLATE is any name with six 'Xs' (i.e., /tmp/temp.XXXXXX).\n" \ 2548 "TEMPLATE must end with XXXXXX (i.e., /tmp/temp.XXXXXX).\n" \
2549 "\nOptions:" \ 2549 "\nOptions:" \
2550 "\n -d Make a directory instead of a file" \ 2550 "\n -d Make a directory instead of a file" \
2551/* "\n -q Fail silently if an error occurs" - we ignore it */ \ 2551/* "\n -q Fail silently if an error occurs" - we ignore it */ \
2552 "\n -t Generate a path rooted in temporary directory" \ 2552 "\n -t Generate a path rooted in temporary directory" \
2553 "\n -p DIR Use DIR as a temporary directory (implies -t)" \ 2553 "\n -p DIR Use DIR as a temporary directory (implies -t)" \
2554 "\n" \ 2554 "\n" \
2555 "\n" \ 2555 "\nFor -t or -p, directory is chosen as follows:" \
2556 "For -t or -p, directory is chosen as follows:\n" \ 2556 "\n$TMPDIR if set, else -p DIR, else /tmp" \
2557 "$TMPDIR if set, else -p DIR, else /tmp" \
2558 2557
2559#define mktemp_example_usage \ 2558#define mktemp_example_usage \
2560 "$ mktemp /tmp/temp.XXXXXX\n" \ 2559 "$ mktemp /tmp/temp.XXXXXX\n" \