Fixed two problems with the handling of GLX protocol replies. The logic
authorIan Romanick <idr@us.ibm.com>
Mon, 27 Dec 2004 08:29:54 +0000 (08:29 +0000)
committerIan Romanick <idr@us.ibm.com>
Mon, 27 Dec 2004 08:29:54 +0000 (08:29 +0000)
for determining when extra data needed to be read after a reply (to ensure
4-byte alignment) and the logic to determine whether or not to read reply
data after the SingleReply packet were both slightly wrong.

src/glx/x11/indirect.c
src/mesa/glapi/glX_proto_send.py

index c476fbad3bf100a1d9c3036b11eea740257f608c..965a4a2961a6b277eb52c5097498ad32976a072e 100644 (file)
@@ -64,13 +64,13 @@ read_reply( Display *dpy, size_t size, void * dest, GLboolean reply_is_always_ar
     
     (void) _XReply(dpy, (xReply *) & reply, 0, False);
     if (size != 0) {
-       if ((reply.size >= 1) || reply_is_always_array) {
+       if ((reply.length > 0) || reply_is_always_array) {
            const GLint bytes = (reply_is_always_array) 
              ? (4 * reply.length) : (reply.size * size);
            const GLint extra = 4 - (bytes & 3);
 
            _XRead(dpy, dest, bytes);
-           if ( extra != 0 ) {
+           if ( extra < 4 ) {
                _XEatData(dpy, extra);
            }
        }
index 15be86bc9f29feddab6dc78ded56b5a2e0bbd359..023b07ee3bd8cb8719aaae67a8db183ff16cd464 100644 (file)
@@ -75,13 +75,13 @@ read_reply( Display *dpy, size_t size, void * dest, GLboolean reply_is_always_ar
     
     (void) _XReply(dpy, (xReply *) & reply, 0, False);
     if (size != 0) {
-       if ((reply.size >= 1) || reply_is_always_array) {
+       if ((reply.length > 0) || reply_is_always_array) {
            const GLint bytes = (reply_is_always_array) 
              ? (4 * reply.length) : (reply.size * size);
            const GLint extra = 4 - (bytes & 3);
 
            _XRead(dpy, dest, bytes);
-           if ( extra != 0 ) {
+           if ( extra < 4 ) {
                _XEatData(dpy, extra);
            }
        }