pipes mean read/write may short out.
authorespie <espie@openbsd.org>
Wed, 15 Jan 2014 00:31:34 +0000 (00:31 +0000)
committerespie <espie@openbsd.org>
Wed, 15 Jan 2014 00:31:34 +0000 (00:31 +0000)
okay tedu@

usr.bin/signify/signify.c

index 9bc6bac..cf9e239 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: signify.c,v 1.37 2014/01/14 21:34:30 tedu Exp $ */
+/* $OpenBSD: signify.c,v 1.38 2014/01/15 00:31:34 espie Exp $ */
 /*
  * Copyright (c) 2013 Ted Unangst <tedu@openbsd.org>
  *
@@ -120,12 +120,15 @@ static void
 readall(int fd, void *buf, size_t len, const char *filename)
 {
        ssize_t x;
-       
-       x = read(fd, buf, len);
-       if (x == -1) {
-               err(1, "read from %s", filename);
-       } else if (x != len) {
-               errx(1, "short read from %s", filename);
+
+       while (len != 0) {
+               x = read(fd, buf, len);
+               if (x == -1)
+                       err(1, "read from %s", filename);
+               else {
+                       len -= x;
+                       buf = (char*)buf + x;
+               }
        }
 }
 
@@ -200,12 +203,15 @@ static void
 writeall(int fd, const void *buf, size_t len, const char *filename)
 {
        ssize_t x;
-       
-       x = write(fd, buf, len);
-       if (x == -1) {
-               err(1, "write to %s", filename);
-       } else if (x != len) {
-               errx(1, "short write to %s", filename);
+
+       while (len != 0) {
+               x = write(fd, buf, len);
+               if (x == -1)
+                       err(1, "write to %s", filename);
+               else {
+                       len -= x;
+                       buf = (char*)buf + x;
+               }
        }
 }