summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-06-04 13:32:41 +0200
committerDaniel Borkmann <dborkman@redhat.com>2013-06-04 13:32:41 +0200
commitc19bbb5083376a7941e2ea4607ee5e90ecfb5cde (patch)
treee021a198ddeaf6fd93661b25eecc92745a2ae066
parent85726b6a6d53f6c3a2c18ba3412ee5b14ee4d6f3 (diff)
ioops: Add {read,write}_blob_or_die for reading/writing binary blobs
We need those functions for later key generation simplification. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-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 */