diff options
author | des <des@FreeBSD.org> | 2005-09-03 06:59:33 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2005-09-03 06:59:33 +0000 |
commit | 755a16fa864cacbbd9fbefc822011b6741351d8d (patch) | |
tree | b8088b859d6543143de670740f5c6f7bf4e0b23d /crypto/openssh/atomicio.c | |
parent | c4dfc1ed3bdacd05d73791b2c8f8b580511a939f (diff) | |
download | FreeBSD-src-755a16fa864cacbbd9fbefc822011b6741351d8d.zip FreeBSD-src-755a16fa864cacbbd9fbefc822011b6741351d8d.tar.gz |
Vendor import of OpenSSH 4.2p1.
Diffstat (limited to 'crypto/openssh/atomicio.c')
-rw-r--r-- | crypto/openssh/atomicio.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/crypto/openssh/atomicio.c b/crypto/openssh/atomicio.c index 7637e16..12abbda 100644 --- a/crypto/openssh/atomicio.c +++ b/crypto/openssh/atomicio.c @@ -1,4 +1,5 @@ /* + * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved. * Copyright (c) 1995,1999 Theo de Raadt. All rights reserved. * All rights reserved. * @@ -24,14 +25,14 @@ */ #include "includes.h" -RCSID("$OpenBSD: atomicio.c,v 1.12 2003/07/31 15:50:16 avsm Exp $"); +RCSID("$OpenBSD: atomicio.c,v 1.13 2005/05/24 17:32:43 avsm Exp $"); #include "atomicio.h" /* * ensure all of data on socket comes through. f==read || f==vwrite */ -ssize_t +size_t atomicio(f, fd, _s, n) ssize_t (*f) (int, void *, size_t); int fd; @@ -39,7 +40,8 @@ atomicio(f, fd, _s, n) 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); @@ -51,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); |