diff options
author | Jeetu Golani <jeetu.golani@gmail.com> | 2010-04-23 00:47:16 +0530 |
---|---|---|
committer | Jeetu Golani <jeetu.golani@gmail.com> | 2010-04-23 00:47:16 +0530 |
commit | 2dcf8b025be88a25d4333abdc28d425b88238d96 (patch) | |
tree | 2a22abaefeba64cb7ab05504e6f922e2ba8bc3f2 /src/xcb_in.c | |
parent | 56962e42a509dc4d0d9541e46b93689dac61c4fd (diff) |
Replaced read() in read_block and _xcb_in_read() with recv for all
platforms. MSG_WAITALL is undefined in MinGW so it's been explicitly
defined in xcb_in.c
Diffstat (limited to 'src/xcb_in.c')
-rw-r--r-- | src/xcb_in.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/xcb_in.c b/src/xcb_in.c index b481295..e2f9936 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -39,6 +39,7 @@ #include <poll.h> #elif !defined _WIN32 #include <sys/select.h> +#include <sys/socket.h> #endif #ifdef _WIN32 @@ -49,6 +50,11 @@ #define XCB_REPLY 1 #define XCB_XGE_EVENT 35 +/* required for compiling for Win32 using MinGW */ +#ifndef MSG_WAITALL +#define MSG_WAITALL 0 +#endif + struct event_list { xcb_generic_event_t *event; struct event_list *next; @@ -271,12 +277,7 @@ static int read_block(const int fd, void *buf, const ssize_t len) int done = 0; while(done < len) { -#ifndef _WIN32 - int ret = read(fd, ((char *) buf) + done, len - done); -#else - int ret = recv(fd, ((char *) buf) + done, len - done,0); -#endif /* !_WIN32 */ - + int ret = recv(fd, ((char *) buf) + done, len - done,MSG_WAITALL); if(ret > 0) done += ret; #ifndef _WIN32 @@ -681,11 +682,7 @@ void _xcb_in_replies_done(xcb_connection_t *c) int _xcb_in_read(xcb_connection_t *c) { -#ifndef _WIN32 - int n = read(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len); -#else - int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len,0); -#endif /* !_WIN32 */ + int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len,MSG_WAITALL); if(n > 0) c->in.queue_len += n; while(read_packet(c)) |