]> andersk Git - openssh.git/blobdiff - atomicio.c
- (tim) [configure.ac] Bug #1149. Changes in QNX section only. Patch by
[openssh.git] / atomicio.c
index 45da22d3b2b02665c51fbe809a0e00165573f8a5..12abbda16bb157448caeac5ed734d06eaf9b54f9 100644 (file)
@@ -1,5 +1,6 @@
 /*
- * Copyright (c) 1999 Theo de Raadt
+ * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved.
+ * Copyright (c) 1995,1999 Theo de Raadt.  All rights reserved.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: atomicio.c,v 1.4 2000/06/20 01:39:37 markus Exp $");
+RCSID("$OpenBSD: atomicio.c,v 1.13 2005/05/24 17:32:43 avsm Exp $");
 
-#include "xmalloc.h"
-#include "ssh.h"
+#include "atomicio.h"
 
 /*
- * ensure all of data on socket comes through. f==read || f==write
+ * ensure all of data on socket comes through. f==read || f==vwrite
  */
-ssize_t
+size_t
 atomicio(f, fd, _s, n)
-       ssize_t (*f) ();
+       ssize_t (*f) (int, void *, size_t);
        int fd;
        void *_s;
        size_t n;
 {
        char *s = _s;
-       ssize_t res, pos = 0;
+       size_t pos = 0;
+       ssize_t res;
 
        while (n > pos) {
                res = (f) (fd, s + pos, n - pos);
@@ -52,10 +53,12 @@ atomicio(f, fd, _s, n)
                        if (errno == EINTR || errno == EAGAIN)
 #endif
                                continue;
+                       return 0;
                case 0:
-                       return (res);
+                       errno = EPIPE;
+                       return pos;
                default:
-                       pos += res;
+                       pos += (u_int)res;
                }
        }
        return (pos);
This page took 0.042562 seconds and 4 git commands to generate.