aboutsummaryrefslogtreecommitdiff
path: root/src/safe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/safe.c')
-rw-r--r--src/safe.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/safe.c b/src/safe.c
index 7c7627e..6e22d0a 100644
--- a/src/safe.c
+++ b/src/safe.c
@@ -6,7 +6,7 @@
#include <stdlib.h>
#include <unistd.h>
-#define ERR_MESS(msg, ...) err_mess(info, msg, __VA_ARGS__)
+#define ERR_MESS(...) err_mess(info, __VA_ARGS__)
void err_mess(MosSafeErrInfo info, const char *msg, ...) {
va_list args;
@@ -40,3 +40,35 @@ void *mos_safe_realloc_fn(void *ptr, size_t size, MosSafeErrInfo info) {
ERR_MESS("failed to realloc %p to %zu bytes", ptr, size);
exit(EXIT_FAILURE);
}
+
+FILE *mos_safe_fopen_fn(const char *path, const char *mode, MosSafeErrInfo info) {
+ FILE *p = fopen(path, mode);
+ if (p)
+ return p;
+ ERR_MESS("failed to fopen %s with mode %s", path, mode);
+ exit(EXIT_FAILURE);
+}
+
+FILE *mos_safe_tmpfile_fn(MosSafeErrInfo info) {
+ FILE *p = tmpfile();
+ if (p)
+ return p;
+ ERR_MESS("failed to create a tmpfile");
+ exit(EXIT_FAILURE);
+}
+
+int mos_safe_dup_fn(int fd, MosSafeErrInfo info) {
+ int res = dup(fd);
+ if (res != -1)
+ return res;
+ ERR_MESS("failed to dup %d", fd);
+ exit(EXIT_FAILURE);
+}
+
+int mos_safe_dup2_fn(int fd, int fd2, MosSafeErrInfo info) {
+ int res = dup2(fd, fd2);
+ if (res != -1)
+ return res;
+ ERR_MESS("failed to dup %d 2 %d", fd, fd2);
+ exit(EXIT_FAILURE);
+}