Changeset 3232 in MondoRescue for branches/3.2/mindi-busybox/debianutils/mktemp.c
- Timestamp:
- Jan 1, 2014, 12:47:38 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.2/mindi-busybox/debianutils/mktemp.c
r2725 r3232 32 32 */ 33 33 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" 34 53 35 54 #include "libbb.h" … … 41 60 char *chp; 42 61 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 }; 43 69 44 70 path = getenv("TMPDIR"); … … 46 72 path = "/tmp"; 47 73 48 /* -q and -t are ignored */49 74 opt_complementary = "?1"; /* 1 argument max */ 50 opts = getopt32(argv, "dqtp: ", &path);75 opts = getopt32(argv, "dqtp:u", &path); 51 76 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)) 54 93 chp = concat_path_file(path, chp); 55 94 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) { 57 100 if (mkdtemp(chp) == NULL) 58 return EXIT_FAILURE;101 goto error; 59 102 } else { 60 103 if (mkstemp(chp) < 0) 61 return EXIT_FAILURE;104 goto error; 62 105 } 63 64 106 puts(chp); 65 66 107 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(); 67 113 }
Note:
See TracChangeset
for help on using the changeset viewer.