Mercurial > hg > toybox
annotate toys/mktemp.c @ 586:0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 01 Jun 2012 13:51:22 -0500 |
parents | 953c22158c2e |
children |
rev | line source |
---|---|
575 | 1 /* vi: set sw=4 ts=4: |
2 * | |
3 * mktemp.c - Create a temporary file or directory. | |
4 * | |
5 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com> | |
6 * | |
7 * Not in SUSv4. | |
8 | |
9 USE_MKTEMP(NEWTOY(mktemp, ">1(directory)d(tmpdir)p:", TOYFLAG_BIN)) | |
10 | |
11 config MKTEMP | |
12 bool "mktemp" | |
13 default y | |
14 help | |
15 usage: mktemp [OPTION] [TEMPLATE] | |
16 | |
17 Safely create a temporary file or directory and print its name. | |
18 TEMPLATE should end in 6 consecutive X's, the default | |
19 template is tmp.XXXXXX and the default directory is /tmp/. | |
586
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
20 |
575 | 21 -d, --directory Create a directory, instead of a file |
22 -p DIR, --tmpdir=DIR Use DIR as a base path | |
23 | |
24 */ | |
25 | |
26 #include "toys.h" | |
27 | |
28 DEFINE_GLOBALS( | |
29 char * tmpdir; | |
30 ) | |
31 #define TT this.mktemp | |
32 | |
33 void mktemp_main(void) | |
34 { | |
586
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
35 int d_flag = toys.optflags & 2; |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
36 char *tmp, *path; |
575 | 37 |
586
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
38 tmp = *toys.optargs; |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
39 if (!tmp) tmp = "tmp.XXXXXX"; |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
40 if (!TT.tmpdir) TT.tmpdir = "/tmp/"; |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
41 |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
42 tmp = xmsprintf("%s/%s", TT.tmpdir, tmp); |
575 | 43 |
586
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
44 if (d_flag ? mkdtemp(tmp) == NULL : mkstemp(tmp) == -1) |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
45 perror_exit("Failed to create temporary %s", |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
46 d_flag ? "directory" : "file"); |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
47 |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
48 xputs(path = xrealpath(tmp)); |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
49 |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
50 if (CFG_TOYBOX_FREE) { |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
51 free(path); |
0353ed084559
Convert mktemp to use xrealpath, and general clean up while there.
Rob Landley <rob@landley.net>
parents:
575
diff
changeset
|
52 free(tmp); |
575 | 53 } |
54 } |