From 9959c512ac3ba36f7a0db7614f0357ce0bae748f Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Mon, 9 Apr 2012 23:30:58 +0200 Subject: Move atomic io function to a separate module We'll be using it on various places of the SSSD. The function is in its own file to allow using just the one piece without having to drag in the whole util.c module. --- src/util/util.c | 38 -------------------------------------- 1 file changed, 38 deletions(-) (limited to 'src/util/util.c') diff --git a/src/util/util.c b/src/util/util.c index 3a6c5d270..f1aaebc28 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -611,41 +611,3 @@ void to_sized_string(struct sized_string *out, const char *in) } } -/* based on code from libssh */ -ssize_t sss_atomic_io(int fd, void *buf, size_t n, bool do_read) -{ - char *b = buf; - size_t pos = 0; - ssize_t res; - struct pollfd pfd; - - pfd.fd = fd; - pfd.events = do_read ? POLLIN : POLLOUT; - - while (n > pos) { - if (do_read) { - res = read(fd, b + pos, n - pos); - } else { - res = write(fd, b + pos, n - pos); - } - switch (res) { - case -1: - if (errno == EINTR) { - continue; - } - if (errno == EAGAIN || errno == EWOULDBLOCK) { - (void) poll(&pfd, 1, -1); - continue; - } - return -1; - case 0: - /* read returns 0 on end-of-file */ - errno = do_read ? 0 : EPIPE; - return pos; - default: - pos += (size_t) res; - } - } - - return pos; -} -- cgit