tfc_io: xread and xwrite, which transparently handle EINTR case.
[tfcrypt.git] / tfc_io.c
diff --git a/tfc_io.c b/tfc_io.c
new file mode 100644 (file)
index 0000000..2d3fd30
--- /dev/null
+++ b/tfc_io.c
@@ -0,0 +1,23 @@
+#include "tfcrypt.h"
+
+size_t xread(int fd, void *data, size_t szdata)
+{
+       size_t x;
+
+       do {
+               x = (size_t)read(fd, data, szdata);
+       } while (x == NOSIZE && errno == EINTR);
+
+       return x;
+}
+
+size_t xwrite(int fd, const void *data, size_t szdata)
+{
+       size_t x;
+
+       do {
+               x = (size_t)write(fd, data, szdata);
+       } while (x == NOSIZE && errno == EINTR);
+
+       return x;
+}