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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
1 /* vi: set sw=4 ts=4:
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
2 *
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
3 * mktemp.c - Create a temporary file or directory.
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
4 *
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
5 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
6 *
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
7 * Not in SUSv4.
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
8
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
9 USE_MKTEMP(NEWTOY(mktemp, ">1(directory)d(tmpdir)p:", TOYFLAG_BIN))
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
10
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
11 config MKTEMP
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
12 bool "mktemp"
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
13 default y
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
14 help
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
15 usage: mktemp [OPTION] [TEMPLATE]
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
16
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
17 Safely create a temporary file or directory and print its name.
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
18 TEMPLATE should end in 6 consecutive X's, the default
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
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
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
21 -d, --directory Create a directory, instead of a file
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
22 -p DIR, --tmpdir=DIR Use DIR as a base path
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
23
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
24 */
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
25
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
26 #include "toys.h"
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
27
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
28 DEFINE_GLOBALS(
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
29 char * tmpdir;
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
30 )
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
31 #define TT this.mktemp
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
32
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
33 void mktemp_main(void)
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
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
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
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
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
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
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
53 }
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
54 }