From 4aca87515a5083ae0e31ce3177189fd43b6d05ac Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 3 Jan 2015 13:58:15 +0100 Subject: patch to Vanilla Tomato 1.28 --- release/src/router/busybox/debianutils/mktemp.c | 86 +++++++++++++------------ 1 file changed, 46 insertions(+), 40 deletions(-) (limited to 'release/src/router/busybox/debianutils/mktemp.c') diff --git a/release/src/router/busybox/debianutils/mktemp.c b/release/src/router/busybox/debianutils/mktemp.c index ecc985fb..0dcb1e82 100644 --- a/release/src/router/busybox/debianutils/mktemp.c +++ b/release/src/router/busybox/debianutils/mktemp.c @@ -6,58 +6,64 @@ * Copyright (C) 2000 by Daniel Jacobowitz * Written by Daniel Jacobowitz * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * 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 -#include -#include -#include -#include -#include "busybox.h" -extern int mktemp_main(int argc, char **argv) +#include "libbb.h" + +int mktemp_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; +int mktemp_main(int argc UNUSED_PARAM, char **argv) { - unsigned char dir_flag = 0; - int opt; - - while ((opt = getopt(argc, argv, "qd")) != -1) { - if (opt == 'd') { - dir_flag = 1; - } - else if (opt != 'q') { - bb_show_usage(); - } - } + const char *path; + char *chp; + unsigned opt; + + opt_complementary = "?1"; /* 1 argument max */ + opt = getopt32(argv, "dqtp:", &path); + chp = argv[optind] ? argv[optind] : xstrdup("tmp.XXXXXX"); - if (optind + 1 != argc) { - bb_show_usage(); + if (opt & (4|8)) { /* -t and/or -p */ + const char *dir = getenv("TMPDIR"); + if (dir && *dir != '\0') + path = dir; + else if (!(opt & 8)) /* no -p */ + path = "/tmp/"; + /* else path comes from -p DIR */ + chp = concat_path_file(path, chp); } - if (dir_flag) { - if (mkdtemp(argv[argc-1]) == NULL) { + if (opt & 1) { /* -d */ + if (mkdtemp(chp) == NULL) return EXIT_FAILURE; - } } else { - if (mkstemp(argv[argc-1]) < 0) { + if (mkstemp(chp) < 0) return EXIT_FAILURE; - } } - (void) puts(argv[argc-1]); + puts(chp); return EXIT_SUCCESS; } -- cgit v1.2.3-54-g00ecf