Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Marti <vicent@github.com>2014-02-18 21:48:43 +0400
committerVicent Marti <vicent@github.com>2014-02-18 21:48:43 +0400
commite0ebaaa53ea1154a1f392dae463453ac6c428d78 (patch)
tree5be111f1c313d8a83ca6297354fb27c4cc768c6c
parentdbd2ca356b8a16d028e45c5263e9c460be13d338 (diff)
parent0197d4107a2996dc2ed4e98698e281c2d5fa44e1 (diff)
Merge pull request #2121 from bk2204/ewouldblock
Check for EWOULDBLOCK as well as EAGAIN on write.
-rw-r--r--src/posix.c2
-rw-r--r--src/posix.h9
2 files changed, 10 insertions, 1 deletions
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;
/**