- avsm@cvs.openbsd.org 2004/08/11 21:44:32
     [authfd.c scp.c ssh-keyscan.c]
     use atomicio instead of homegrown equivalents or read/write.
     markus@ ok
diff --git a/authfd.c b/authfd.c
index 42ca082..662350c 100644
--- a/authfd.c
+++ b/authfd.c
@@ -35,7 +35,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: authfd.c,v 1.63 2003/11/21 11:57:03 djm Exp $");
+RCSID("$OpenBSD: authfd.c,v 1.64 2004/08/11 21:44:31 avsm Exp $");
 
 #include <openssl/evp.h>
 
@@ -133,16 +133,9 @@
 	 * Wait for response from the agent.  First read the length of the
 	 * response packet.
 	 */
-	len = 4;
-	while (len > 0) {
-		l = read(auth->fd, buf + 4 - len, len);
-		if (l == -1 && (errno == EAGAIN || errno == EINTR))
-			continue;
-		if (l <= 0) {
-			error("Error reading response length from authentication socket.");
-			return 0;
-		}
-		len -= l;
+	if (atomicio(read, auth->fd, buf, 4) != 4) {
+	    error("Error reading response length from authentication socket.");
+	    return 0;
 	}
 
 	/* Extract the length, and check it for sanity. */
@@ -156,9 +149,7 @@
 		l = len;
 		if (l > sizeof(buf))
 			l = sizeof(buf);
-		l = read(auth->fd, buf, l);
-		if (l == -1 && (errno == EAGAIN || errno == EINTR))
-			continue;
+		l = atomicio(read, auth->fd, buf, l);
 		if (l <= 0) {
 			error("Error reading response from authentication socket.");
 			return 0;