diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2012-04-17 18:00:20 +0400 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2012-04-17 18:00:20 +0400 |
commit | 75e1e7b3d538fa1a2396cd36122e0be702931345 (patch) | |
tree | 545494d4c614ab8c5e9305d03001c9c8ee5174bd | |
parent | 176bc344751dfc41e87976182381ae0560c94f22 (diff) |
mktemp: add support for -u
zlib-1.2.6 Makefile uses "mktemp -u".
function old new delta
___path_search - 266 +266
mktemp_main 165 250 +85
tempnam - 79 +79
packed_usage 29189 29176 -13
------------------------------------------------------------------------------
(add/remove: 3/0 grow/shrink: 1/1 up/down: 430/-13) Total: 417 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | debianutils/mktemp.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/debianutils/mktemp.c b/debianutils/mktemp.c index 007cb1c5b..dbe430955 100644 --- a/debianutils/mktemp.c +++ b/debianutils/mktemp.c @@ -41,6 +41,7 @@ ////usage: "\n -q Fail silently on errors" - we ignore this opt //usage: "\n -t Prepend base directory name to TEMPLATE" //usage: "\n -p DIR Use DIR as a base directory (implies -t)" +//usage: "\n -u Do not create anything; print a name" //usage: "\n" //usage: "\nBase directory is: -p DIR, else $TMPDIR, else /tmp" //usage: @@ -63,6 +64,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv) OPT_q = 1 << 1, OPT_t = 1 << 2, OPT_p = 1 << 3, + OPT_u = 1 << 4, }; path = getenv("TMPDIR"); @@ -71,7 +73,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv) /* -q is ignored */ opt_complementary = "?1"; /* 1 argument max */ - opts = getopt32(argv, "dqtp:", &path); + opts = getopt32(argv, "dqtp:u", &path); chp = argv[optind]; if (!chp) { @@ -81,6 +83,22 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv) chp = xstrdup("tmp.XXXXXX"); opts |= OPT_t; } + + if (opts & OPT_u) { + /* Remove (up to) 6 X's */ + unsigned len = strlen(chp); + int cnt = len > 6 ? 6 : len; + while (--cnt >= 0 && chp[--len] == 'X') + chp[len] = '\0'; + + chp = tempnam(opts & (OPT_t|OPT_p) ? path : "./", chp); + if (!chp) + return EXIT_FAILURE; + if (!(opts & (OPT_t|OPT_p))) + chp += 2; + goto ret; + } + if (opts & (OPT_t|OPT_p)) chp = concat_path_file(path, chp); @@ -91,8 +109,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv) if (mkstemp(chp) < 0) return EXIT_FAILURE; } - + ret: puts(chp); - return EXIT_SUCCESS; } |