diff --git a/src/posix.c b/src/posix.c index 525785f35..7b2962feb 100644 --- a/src/posix.c +++ b/src/posix.c @@ -189,7 +189,7 @@ int p_write(git_file fd, const void *buf, size_t cnt) r = write(fd, b, cnt); #endif if (r < 0) { - if (errno == EINTR || errno == EAGAIN) + if (errno == EINTR || GIT_ISBLOCKED(errno)) continue; return -1; } diff --git a/src/posix.h b/src/posix.h index 6d3a84eba..f85b1aebd 100644 --- a/src/posix.h +++ b/src/posix.h @@ -29,6 +29,15 @@ #define O_CLOEXEC 0 #endif +/* Determine whether an errno value indicates that a read or write failed + * because the descriptor is blocked. + */ +#if defined(EWOULDBLOCK) +#define GIT_ISBLOCKED(e) ((e) == EAGAIN || (e) == EWOULDBLOCK) +#else +#define GIT_ISBLOCKED(e) ((e) == EAGAIN) +#endif + typedef int git_file; /**