From c05b1684a0bc104f7116b67d1dbdbfddceb4aec2 Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 5 Jun 2008 12:06:00 +0000 Subject: 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 --- debianutils/mktemp.c | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) (limited to 'debianutils') 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 @@ * Licensed under the GPL v2 or later, see the file LICENSE in this tarball. */ +/* Coreutils 6.12 man page says: + * mktemp [OPTION]... [TEMPLATE] + * Create a temporary file or directory, safely, and print its name. If + * TEMPLATE is not specified, use tmp.XXXXXXXXXX. + * -d, --directory + * create a directory, not a file + * -q, --quiet + * suppress diagnostics about file/dir-creation failure + * -u, --dry-run + * do not create anything; merely print a name (unsafe) + * --tmpdir[=DIR] + * interpret TEMPLATE relative to DIR. If DIR is not specified, + * use $TMPDIR if set, else /tmp. With this option, TEMPLATE must + * not be an absolute name. Unlike with -t, TEMPLATE may contain + * slashes, but even here, mktemp still creates only the final com- + * ponent. + * -p DIR use DIR as a prefix; implies -t [deprecated] + * -t interpret TEMPLATE as a single file name component, relative to + * a directory: $TMPDIR, if set; else the directory specified via + * -p; else /tmp [deprecated] + */ + + #include "libbb.h" int mktemp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int mktemp_main(int argc ATTRIBUTE_UNUSED, char **argv) { - // -d Make a directory instead of a file - // -q Fail silently if an error occurs [bbox: ignored] - // -t Generate a path rooted in temporary directory - // -p DIR Use DIR as a temporary directory (implies -t) const char *path; char *chp; - unsigned flags; + unsigned opt; - opt_complementary = "=1"; /* exactly one arg */ - flags = getopt32(argv, "dqtp:", &path); - chp = argv[optind]; + opt_complementary = "?1"; /* 1 argument max */ + opt = getopt32(argv, "dqtp:", &path); + chp = argv[optind] ? argv[optind] : xstrdup("tmp.XXXXXXXXXX"); - if (flags & (4|8)) { /* -t and/or -p */ + if (opt & (4|8)) { /* -t and/or -p */ const char *dir = getenv("TMPDIR"); if (dir && *dir != '\0') path = dir; - else if (!(flags & 8)) /* No -p */ + else if (!(opt & 8)) /* no -p */ path = "/tmp/"; /* else path comes from -p DIR */ chp = concat_path_file(path, chp); } - if (flags & 1) { /* -d */ + if (opt & 1) { /* -d */ if (mkdtemp(chp) == NULL) return EXIT_FAILURE; } else { -- cgit v1.2.3