annotate toys/lsb/mktemp.c @ 1691:9b1cbc13dfdc draft

Fix longopts (pointed out by Hyejin Kim).
author Rob Landley <rob@landley.net>
date Tue, 10 Feb 2015 22:51:23 -0600
parents abe691083cfe
children ed94226a879e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
694
786841fdb1e0 Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents: 674
diff changeset
1 /* mktemp.c - Create a temporary file or directory.
575
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 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
4 *
656
6df4ccc0acbe Regularize command headers, update links to standards documents.
Rob Landley <rob@landley.net>
parents: 653
diff changeset
5 * http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/mktemp.html
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
6
1691
9b1cbc13dfdc Fix longopts (pointed out by Hyejin Kim).
Rob Landley <rob@landley.net>
parents: 1682
diff changeset
7 USE_MKTEMP(NEWTOY(mktemp, ">1qd(directory)p(tmpdir):", TOYFLAG_BIN))
575
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 config MKTEMP
694
786841fdb1e0 Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents: 674
diff changeset
10 bool "mktemp"
786841fdb1e0 Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents: 674
diff changeset
11 default y
786841fdb1e0 Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents: 674
diff changeset
12 help
786841fdb1e0 Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents: 674
diff changeset
13 usage: mktemp [-dq] [-p DIR] [TEMPLATE]
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
14
1682
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
15 Safely create a new file "DIR/TEMPLATE" and print its name.
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
16
1682
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
17 -d Create directory instead of file (--directory)
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
18 -p Put new file in DIR (--tmpdir)
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
19 -q Quiet, no error messages
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
20
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
21 Each X in TEMPLATE is replaced with a random printable character. The
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
22 default TEMPLATE is tmp.XXXXXX, and the default DIR is $TMPDIR if set,
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
23 else "/tmp".
575
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
674
7e846e281e38 New build infrastructure to generate FLAG_ macros and TT alias, #define FOR_commandname before #including toys.h to trigger it. Rename DEFINE_GLOBALS() to just GLOBALS() (because I could never remember if it was DECLARE_GLOBALS). Convert existing commands to use new infrastructure, and replace optflag constants with FLAG_ macros where appropriate.
Rob Landley <rob@landley.net>
parents: 660
diff changeset
26 #define FOR_mktemp
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
27 #include "toys.h"
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
28
674
7e846e281e38 New build infrastructure to generate FLAG_ macros and TT alias, #define FOR_commandname before #including toys.h to trigger it. Rename DEFINE_GLOBALS() to just GLOBALS() (because I could never remember if it was DECLARE_GLOBALS). Convert existing commands to use new infrastructure, and replace optflag constants with FLAG_ macros where appropriate.
Rob Landley <rob@landley.net>
parents: 660
diff changeset
29 GLOBALS(
1682
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
30 char *tmpdir;
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
31 )
660
760494af5163 mktemp broke kernel build, so new rules: if you don't specify anything, /tmp/tmp.* Specify a file, ./file. Specify -p dir then dir/tmp.*. Specify -p dir and file, dir/file. Also implement -q which lsb wants.
Rob Landley <rob@landley.net>
parents: 656
diff changeset
32
575
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 {
1681
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
35 int d_flag = toys.optflags & FLAG_d;
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
36 char *template = *toys.optargs;
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
37
1682
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
38 if (!template) template = "tmp.XXXXXX";
1681
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
39
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
40 if (!TT.tmpdir) TT.tmpdir = getenv("TMPDIR");
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
41 if (!TT.tmpdir) TT.tmpdir = "/tmp";
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
42
4bcfe4cf3e50 Use $TMPDIR if set (necessary on Android, where there is no /tmp).
Elliot Hughes <enh@google.com>
parents: 1183
diff changeset
43 snprintf(toybuf, sizeof(toybuf), "%s/%s", TT.tmpdir, template);
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
44
1682
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
45 if (d_flag ? !mkdtemp(toybuf) : mkstemp(toybuf) == -1) {
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
46 if (toys.optflags & FLAG_q) toys.exitval = 1;
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
47 else perror_exit("Failed to create %s %s/%s",
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
48 d_flag ? "directory" : "file", TT.tmpdir, template);
abe691083cfe Shameless meddling.
Rob Landley <rob@landley.net>
parents: 1681
diff changeset
49 } else xputs(toybuf);
575
953c22158c2e Addition of mktemp
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
50 }