Ignore:
Timestamp:
Jan 1, 2014, 12:47:38 AM (10 years ago)
Author:
Bruno Cornec
Message:
  • Update mindi-busybox to 1.21.1
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3.2/mindi-busybox/debianutils/mktemp.c

    r2725 r3232  
    3232 */
    3333
     34//usage:#define mktemp_trivial_usage
     35//usage:       "[-dt] [-p DIR] [TEMPLATE]"
     36//usage:#define mktemp_full_usage "\n\n"
     37//usage:       "Create a temporary file with name based on TEMPLATE and print its name.\n"
     38//usage:       "TEMPLATE must end with XXXXXX (e.g. [/dir/]nameXXXXXX).\n"
     39//usage:       "Without TEMPLATE, -t tmp.XXXXXX is assumed.\n"
     40//usage:     "\n    -d  Make directory, not file"
     41//usage:     "\n    -q  Fail silently on errors"
     42//usage:     "\n    -t  Prepend base directory name to TEMPLATE"
     43//usage:     "\n    -p DIR  Use DIR as a base directory (implies -t)"
     44//usage:     "\n    -u  Do not create anything; print a name"
     45//usage:     "\n"
     46//usage:     "\nBase directory is: -p DIR, else $TMPDIR, else /tmp"
     47//usage:
     48//usage:#define mktemp_example_usage
     49//usage:       "$ mktemp /tmp/temp.XXXXXX\n"
     50//usage:       "/tmp/temp.mWiLjM\n"
     51//usage:       "$ ls -la /tmp/temp.mWiLjM\n"
     52//usage:       "-rw-------    1 andersen andersen        0 Apr 25 17:10 /tmp/temp.mWiLjM\n"
    3453
    3554#include "libbb.h"
     
    4160    char *chp;
    4261    unsigned opts;
     62    enum {
     63        OPT_d = 1 << 0,
     64        OPT_q = 1 << 1,
     65        OPT_t = 1 << 2,
     66        OPT_p = 1 << 3,
     67        OPT_u = 1 << 4,
     68    };
    4369
    4470    path = getenv("TMPDIR");
     
    4672        path = "/tmp";
    4773
    48     /* -q and -t are ignored */
    4974    opt_complementary = "?1"; /* 1 argument max */
    50     opts = getopt32(argv, "dqtp:", &path);
     75    opts = getopt32(argv, "dqtp:u", &path);
    5176
    52     chp = argv[optind] ? argv[optind] : xstrdup("tmp.XXXXXX");
    53     if (!strchr(chp, '/') || (opts & 8))
     77    chp = argv[optind];
     78    if (!chp) {
     79        /* GNU coreutils 8.4:
     80         * bare "mktemp" -> "mktemp -t tmp.XXXXXX"
     81         */
     82        chp = xstrdup("tmp.XXXXXX");
     83        opts |= OPT_t;
     84    }
     85#if 0
     86    /* Don't allow directory separator in template */
     87    if ((opts & OPT_t) && bb_basename(chp) != chp) {
     88        errno = EINVAL;
     89        goto error;
     90    }
     91#endif
     92    if (opts & (OPT_t|OPT_p))
    5493        chp = concat_path_file(path, chp);
    5594
    56     if (opts & 1) { /* -d */
     95    if (opts & OPT_u) {
     96        chp = mktemp(chp);
     97        if (chp[0] == '\0')
     98            goto error;
     99    } else if (opts & OPT_d) {
    57100        if (mkdtemp(chp) == NULL)
    58             return EXIT_FAILURE;
     101            goto error;
    59102    } else {
    60103        if (mkstemp(chp) < 0)
    61             return EXIT_FAILURE;
     104            goto error;
    62105    }
    63 
    64106    puts(chp);
    65 
    66107    return EXIT_SUCCESS;
     108 error:
     109    if (opts & OPT_q)
     110        return EXIT_FAILURE;
     111    /* don't use chp as it gets mangled in case of error */
     112    bb_perror_nomsg_and_die();
    67113}
Note: See TracChangeset for help on using the changeset viewer.