/*
- * Copyright (c) 1999 Theo de Raadt
+ * 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("$Id$");
+RCSID("$OpenBSD: atomicio.c,v 1.9 2001/03/02 18:54:30 deraadt Exp $");
#include "xmalloc.h"
-#include "ssh.h"
+#include "atomicio.h"
/*
* ensure all of data on socket comes through. f==read || f==write
*/
-int
-atomicio(f, fd, s, n)
- int (*f) ();
+ssize_t
+atomicio(f, fd, _s, n)
+ ssize_t (*f) ();
int fd;
- void *s;
+ void *_s;
size_t n;
{
- int res, pos = 0;
+ char *s = _s;
+ ssize_t res, pos = 0;
while (n > pos) {
res = (f) (fd, s + pos, n - pos);
switch (res) {
case -1:
+#ifdef EWOULDBLOCK
+ if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)
+#else
if (errno == EINTR || errno == EAGAIN)
+#endif
continue;
case 0:
return (res);