annotate toys/mktemp.c @ 575:953c22158c2e

Addition of mktemp
author Elie De Brauwer <eliedebrauwer@gmail.com>
date Tue, 01 May 2012 11:45:45 +0200
parents
children 0353ed084559
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/.
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
20 -d, --directory Create a directory, instead of a file
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
21 -p DIR, --tmpdir=DIR Use DIR as a base path
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
22
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 #include "toys.h"
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
26
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
27 DEFINE_GLOBALS(
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
28 char * tmpdir;
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
29 )
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
30 #define TT this.mktemp
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
31
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
32 void mktemp_main(void)
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
33 {
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
34 int p_flag = (toys.optflags & 1);
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
35 int d_flag = (toys.optflags & 2) >> 1;
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
36 char * result;
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
37
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
38 int size = snprintf(toybuf, sizeof(toybuf)-1, "%s/%s",
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
39 (p_flag && TT.tmpdir)?TT.tmpdir:"/tmp/",
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
40 (toys.optargs[0])?toys.optargs[0]:"tmp.XXXXXX");
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
41 toybuf[size] = 0;
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
42
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
43 if (d_flag) {
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
44 if (mkdtemp(toybuf) == NULL)
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
45 perror_exit("Failed to create temporary directory");
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
46 } else {
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
47 if (mkstemp(toybuf) == -1)
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
48 perror_exit("Failed to create temporary file");
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
49 }
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
50
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
51 result = realpath(toybuf, NULL);
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
52 xputs(result);
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 if (CFG_TOYBOX_FREE)
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
55 free(result);
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
56 }