From 75e1e7b3d538fa1a2396cd36122e0be702931345 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 17 Apr 2012 16:00:20 +0200 Subject: 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 --- debianutils/mktemp.c | 23 ++++++++++++++++++++--- 1 file 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; } -- cgit v1.2.3