summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ioops.c23
-rw-r--r--ioops.h2
2 files changed, 25 insertions, 0 deletions
diff --git a/ioops.c b/ioops.c
index 6e79317..a5dc94a 100644
--- a/ioops.c
+++ b/ioops.c
@@ -96,3 +96,26 @@ ssize_t write_or_die(int fd, const void *buf, size_t len)
return ret;
}
+
+int read_blob_or_die(const char *file, void *blob, size_t count)
+{
+ int fd, ret;
+
+ fd = open_or_die(file, O_RDONLY);
+ ret = read_or_die(fd, blob, len);
+ close(fd);
+
+ return ret;
+}
+
+int write_blob_or_die(const char *file, const void *blob, size_t count)
+{
+ int fd, ret;
+
+ fd = open_or_die_m(file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
+ ret = write_or_die(fd, blob, len);
+ fdatasync(fd);
+ close(fd);
+
+ return ret;
+}
diff --git a/ioops.h b/ioops.h
index eed3e3d..a344361 100644
--- a/ioops.h
+++ b/ioops.h
@@ -8,5 +8,7 @@ extern int tun_open_or_die(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);
extern ssize_t write_or_die(int fd, const void *buf, size_t count);
+extern int read_blob_or_die(const char *file, void *blob, size_t count);
+extern int write_blob_or_die(const char *file, const void *blob, size_t count);
#endif /* IOOPS_H */