projects
/
free-sw
/
xcb
/
libxcb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make protocol C files depend on protocol XML files
[free-sw/xcb/libxcb]
/
src
/
xcb_in.c
diff --git
a/src/xcb_in.c
b/src/xcb_in.c
index
969cfc0
..
8a7af92
100644
(file)
--- a/
src/xcb_in.c
+++ b/
src/xcb_in.c
@@
-25,6
+25,10
@@
/* Stuff that reads stuff from the server. */
/* Stuff that reads stuff from the server. */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
@@
-51,11
+55,6
@@
#define XCB_REPLY 1
#define XCB_XGE_EVENT 35
#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;
struct event_list {
xcb_generic_event_t *event;
struct event_list *next;
@@
-94,8
+93,9
@@
static void remove_finished_readers(reader_list **prev_reader, uint64_t complete
static int read_packet(xcb_connection_t *c)
{
xcb_generic_reply_t genrep;
static int read_packet(xcb_connection_t *c)
{
xcb_generic_reply_t genrep;
- int length = 32;
- int eventlength = 0; /* length after first 32 bytes for GenericEvents */
+ uint64_t length = 32;
+ uint64_t eventlength = 0; /* length after first 32 bytes for GenericEvents */
+ uint64_t bufsize;
void *buf;
pending_reply *pend = 0;
struct event_list *event;
void *buf;
pending_reply *pend = 0;
struct event_list *event;
@@
-170,8
+170,12
@@
static int read_packet(xcb_connection_t *c)
if ((genrep.response_type & 0x7f) == XCB_XGE_EVENT)
eventlength = genrep.length * 4;
if ((genrep.response_type & 0x7f) == XCB_XGE_EVENT)
eventlength = genrep.length * 4;
- buf = malloc(length + eventlength +
- (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t)));
+ bufsize = length + eventlength +
+ (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t));
+ if (bufsize < INT32_MAX)
+ buf = malloc((size_t) bufsize);
+ else
+ buf = NULL;
if(!buf)
{
_xcb_conn_shutdown(c, XCB_CONN_CLOSED_MEM_INSUFFICIENT);
if(!buf)
{
_xcb_conn_shutdown(c, XCB_CONN_CLOSED_MEM_INSUFFICIENT);
@@
-269,7
+273,7
@@
static int read_block(const int fd, void *buf, const ssize_t len)
int done = 0;
while(done < len)
{
int done = 0;
while(done < len)
{
- int ret = recv(fd, ((char *) buf) + done, len - done,
MSG_WAITALL
);
+ int ret = recv(fd, ((char *) buf) + done, len - done,
0
);
if(ret > 0)
done += ret;
#ifndef _WIN32
if(ret > 0)
done += ret;
#ifndef _WIN32
@@
-661,7
+665,7
@@
void _xcb_in_replies_done(xcb_connection_t *c)
int _xcb_in_read(xcb_connection_t *c)
{
int _xcb_in_read(xcb_connection_t *c)
{
- int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len,
MSG_WAITALL
);
+ int n = recv(c->fd, c->in.queue + c->in.queue_len, sizeof(c->in.queue) - c->in.queue_len,
0
);
if(n > 0)
c->in.queue_len += n;
while(read_packet(c))
if(n > 0)
c->in.queue_len += n;
while(read_packet(c))