From d2a9ddeb6cc58284996fbc5367877c99fee8914e Mon Sep 17 00:00:00 2001 From: Nguyễn Thái Ngọc Duy Date: Sun, 10 May 2009 20:10:13 +1000 Subject: general warning cleanup --- libbb/git.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'libbb/git.c') diff --git a/libbb/git.c b/libbb/git.c index 3ca8a9424..668f8c118 100644 --- a/libbb/git.c +++ b/libbb/git.c @@ -1,13 +1,42 @@ #include "libbb.h" #include "git.h" +#define die bb_error_msg_and_die + +/* + * xwrite() is the same a write(), but it automatically restarts write() + * operations with a recoverable error (EAGAIN and EINTR). xwrite() DOES NOT + * GUARANTEE that "len" bytes is written even if the operation is successful. + */ +ssize_t _xwrite(int fd, const void *buf, size_t len) +{ + ssize_t nr; + while (1) { + nr = write(fd, buf, len); + if ((nr < 0) && (errno == EAGAIN || errno == EINTR)) + continue; + return nr; + } +} + +ssize_t _xread(int fd, void *buf, size_t len) +{ + ssize_t nr; + while (1) { + nr = read(fd, buf, len); + if ((nr < 0) && (errno == EAGAIN || errno == EINTR)) + continue; + return nr; + } +} + ssize_t write_in_full(int fd, const void *buf, size_t count) { const char *p = buf; ssize_t total = 0; while (count > 0) { - ssize_t written = xwrite(fd, p, count); + ssize_t written = _xwrite(fd, p, count); if (written < 0) return -1; if (!written) { -- cgit v1.2.3-55-g6feb