12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include "atomicio.h"
- ssize_t
- atomicio(f, fd, _s, n)
- ssize_t (*f) ();
- int fd;
- void *_s;
- size_t n;
- {
- char *s = _s;
- ssize_t res;
- size_t 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);
- default:
- pos += res;
- }
- }
- return (pos);
- }
|