summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ioops.c10
-rw-r--r--ioops.h1
2 files changed, 11 insertions, 0 deletions
diff --git a/ioops.c b/ioops.c
index c1eeddc..160c74e 100644
--- a/ioops.c
+++ b/ioops.c
@@ -1,6 +1,7 @@
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif
+#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -53,6 +54,15 @@ void create_or_die(const char *file, mode_t mode)
close(fd);
}
+int mkostemp_or_die(char *templ, int flags)
+{
+ /* mode is 0600 (S_IRUSR | S_IWUSR) by default */
+ int fd = mkostemp(templ, flags);
+ if (unlikely(fd < 0))
+ panic("Cannot create unique temporary file! %s\n", strerror(errno));
+ return fd;
+}
+
void pipe_or_die(int pipefd[2], int flags)
{
int ret = pipe2(pipefd, flags);
diff --git a/ioops.h b/ioops.h
index ce0315f..9556930 100644
--- a/ioops.h
+++ b/ioops.h
@@ -8,6 +8,7 @@ extern int open_or_die_m(const char *file, int flags, mode_t mode);
extern int dup_or_die(int oldfd);
extern void dup2_or_die(int oldfd, int newfd);
extern void create_or_die(const char *file, mode_t mode);
+extern int mkostemp_or_die(char *templ, int flags);
extern int tun_open_or_die(const char *name, int type);
extern void pipe_or_die(int pipefd[2], int flags);
extern ssize_t read_or_die(int fd, void *buf, size_t count);