diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2012-04-09 23:30:58 +0200 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-04-20 10:55:14 -0400 |
commit | 9959c512ac3ba36f7a0db7614f0357ce0bae748f (patch) | |
tree | 43d9baf2288bb7ea9eee6af7910b7f60c17fc54f /src/util/util.c | |
parent | e3c99ae355408933b03357220f3db09423bd40dd (diff) | |
download | sssd-9959c512ac3ba36f7a0db7614f0357ce0bae748f.tar.gz sssd-9959c512ac3ba36f7a0db7614f0357ce0bae748f.tar.bz2 sssd-9959c512ac3ba36f7a0db7614f0357ce0bae748f.zip |
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.
Diffstat (limited to 'src/util/util.c')
-rw-r--r-- | src/util/util.c | 38 |
1 files changed, 0 insertions, 38 deletions
diff --git a/src/util/util.c b/src/util/util.c index 3a6c5d27..f1aaebc2 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 <http://www.libssh.org> */ -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; -} |