aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-04-17 16:00:20 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-04-17 16:00:20 +0200
commit75e1e7b3d538fa1a2396cd36122e0be702931345 (patch)
tree545494d4c614ab8c5e9305d03001c9c8ee5174bd
parent176bc344751dfc41e87976182381ae0560c94f22 (diff)
downloadbusybox-w32-75e1e7b3d538fa1a2396cd36122e0be702931345.tar.gz
busybox-w32-75e1e7b3d538fa1a2396cd36122e0be702931345.tar.bz2
busybox-w32-75e1e7b3d538fa1a2396cd36122e0be702931345.zip
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.c23
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 @@
41////usage: "\n -q Fail silently on errors" - we ignore this opt 41////usage: "\n -q Fail silently on errors" - we ignore this opt
42//usage: "\n -t Prepend base directory name to TEMPLATE" 42//usage: "\n -t Prepend base directory name to TEMPLATE"
43//usage: "\n -p DIR Use DIR as a base directory (implies -t)" 43//usage: "\n -p DIR Use DIR as a base directory (implies -t)"
44//usage: "\n -u Do not create anything; print a name"
44//usage: "\n" 45//usage: "\n"
45//usage: "\nBase directory is: -p DIR, else $TMPDIR, else /tmp" 46//usage: "\nBase directory is: -p DIR, else $TMPDIR, else /tmp"
46//usage: 47//usage:
@@ -63,6 +64,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
63 OPT_q = 1 << 1, 64 OPT_q = 1 << 1,
64 OPT_t = 1 << 2, 65 OPT_t = 1 << 2,
65 OPT_p = 1 << 3, 66 OPT_p = 1 << 3,
67 OPT_u = 1 << 4,
66 }; 68 };
67 69
68 path = getenv("TMPDIR"); 70 path = getenv("TMPDIR");
@@ -71,7 +73,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
71 73
72 /* -q is ignored */ 74 /* -q is ignored */
73 opt_complementary = "?1"; /* 1 argument max */ 75 opt_complementary = "?1"; /* 1 argument max */
74 opts = getopt32(argv, "dqtp:", &path); 76 opts = getopt32(argv, "dqtp:u", &path);
75 77
76 chp = argv[optind]; 78 chp = argv[optind];
77 if (!chp) { 79 if (!chp) {
@@ -81,6 +83,22 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
81 chp = xstrdup("tmp.XXXXXX"); 83 chp = xstrdup("tmp.XXXXXX");
82 opts |= OPT_t; 84 opts |= OPT_t;
83 } 85 }
86
87 if (opts & OPT_u) {
88 /* Remove (up to) 6 X's */
89 unsigned len = strlen(chp);
90 int cnt = len > 6 ? 6 : len;
91 while (--cnt >= 0 && chp[--len] == 'X')
92 chp[len] = '\0';
93
94 chp = tempnam(opts & (OPT_t|OPT_p) ? path : "./", chp);
95 if (!chp)
96 return EXIT_FAILURE;
97 if (!(opts & (OPT_t|OPT_p)))
98 chp += 2;
99 goto ret;
100 }
101
84 if (opts & (OPT_t|OPT_p)) 102 if (opts & (OPT_t|OPT_p))
85 chp = concat_path_file(path, chp); 103 chp = concat_path_file(path, chp);
86 104
@@ -91,8 +109,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
91 if (mkstemp(chp) < 0) 109 if (mkstemp(chp) < 0)
92 return EXIT_FAILURE; 110 return EXIT_FAILURE;
93 } 111 }
94 112 ret:
95 puts(chp); 113 puts(chp);
96
97 return EXIT_SUCCESS; 114 return EXIT_SUCCESS;
98} 115}