[hackers] [sbase] Add barebones mktemp(1) || sin

From: <git_AT_suckless.org>
Date: Wed, 13 Nov 2013 12:06:59 +0100

commit 34f7a688cb9b924aacd422fb4ed13f187ea63487
Author: sin <sin_AT_2f30.org>
Date: Tue Nov 12 11:52:28 2013 +0000

    Add barebones mktemp(1)

diff --git a/Makefile b/Makefile
index 326cae8..2a72a1c 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -57,6 +57,7 @@ SRC = \
         mkdir.c \
         mkfifo.c \
         mknod.c \
+ mktemp.c \
         mv.c \
         nice.c \
         nl.c \
diff --git a/mktemp.1 b/mktemp.1
new file mode 100644
index 0000000..740350a
--- /dev/null
+++ b/mktemp.1
_AT_@ -0,0 +1,20 @@
+.TH MKTEMP 1 sbase\-VERSION
+.SH NAME
+mktemp \- make temporary filename
+.SH SYNOPSIS
+.B mktemp
+.RB [ \-d ]
+.RB [ template ]
+.SH DESCRIPTION
+.B mktemp
+takes the given filename template and overwrites a portion of it
+to create a unique filename. The template may be any filename with at least
+six `Xs' appended to it. If no template is specified a default of
+`tmp.XXXXXXXXXX' is used and the tmpdir is currently fixed to `/tmp'.
+.SH OPTIONS
+.TP
+.B \-d
+Make a directory instead of a file
+.SH SEE ALSO
+.IR mkdtemp (3),
+.IR mkstemp (3)
diff --git a/mktemp.c b/mktemp.c
new file mode 100644
index 0000000..0989931
--- /dev/null
+++ b/mktemp.c
_AT_@ -0,0 +1,49 @@
+/* See LICENSE file for copyright and license details. */
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "util.h"
+
+static void
+usage(void)
+{
+ eprintf("usage: %s [-d] [template]
", argv0);
+}
+
+static int dflag = 0;
+
+int
+main(int argc, char *argv[])
+{
+ char *template = "tmp.XXXXXXXXXX";
+ char *tmpdir = "/tmp";
+ char tmppath[PATH_MAX];
+ int fd;
+
+ ARGBEGIN {
+ case 'd':
+ dflag = 1;
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc > 1)
+ usage();
+ else if (argc == 1)
+ template = argv[0];
+
+ snprintf(tmppath, sizeof(tmppath), "%s/%s", tmpdir, template);
+ if (dflag) {
+ if (!mkdtemp(tmppath))
+ eprintf("mkdtemp %s:", tmppath);
+ } else {
+ if ((fd = mkstemp(tmppath)) < 0)
+ eprintf("mkstemp %s:", tmppath);
+ close(fd);
+ }
+ puts(tmppath);
+ return EXIT_SUCCESS;
+}
Received on Wed Nov 13 2013 - 12:06:59 CET

This archive was generated by hypermail 2.3.0 : Wed Nov 13 2013 - 12:12:12 CET