Fixed the XCB implementation when always_array is true, thanks to Ian Romanick for...
authorJeremy Kolb <jkolb@freedesktop.org>
Fri, 24 Jun 2005 02:28:02 +0000 (02:28 +0000)
committerJeremy Kolb <jkolb@freedesktop.org>
Fri, 24 Jun 2005 02:28:02 +0000 (02:28 +0000)
src/glx/x11/indirect.c
src/mesa/glapi/glX_proto_send.py

index 42e961e5f3f0f35f6a859ca533ebc09d338834b4..27a818ddf3d05c109bc4e0620e19410b4b9f1544 100644 (file)
@@ -3387,7 +3387,7 @@ __indirect_glGetClipPlane(GLenum plane, GLdouble * equation)
         XCBConnection *c = XCBConnectionOfDisplay(dpy);
         (void) __glXFlushRenderBuffer(gc, gc->pc);
         XCBGlxGetClipPlaneRep *reply = XCBGlxGetClipPlaneReply(c, XCBGlxGetClipPlane(c, gc->currentContextTag, plane), NULL);
-        equation = (GLdouble *)XCBGlxGetClipPlaneData(reply);
+        (void)memcpy(equation, XCBGlxGetClipPlaneData(reply), XCBGlxGetClipPlaneDataLength(reply) * sizeof(GLdouble));
         free(reply);
 #else
         GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GetClipPlane, cmdlen);
@@ -4314,7 +4314,7 @@ __indirect_glAreTexturesResident(GLsizei n, const GLuint * textures, GLboolean *
         XCBConnection *c = XCBConnectionOfDisplay(dpy);
         (void) __glXFlushRenderBuffer(gc, gc->pc);
         XCBGlxAreTexturesResidentRep *reply = XCBGlxAreTexturesResidentReply(c, XCBGlxAreTexturesResident(c, gc->currentContextTag, n, textures), NULL);
-        residences = (GLboolean *)XCBGlxAreTexturesResidentData(reply);
+        (void)memcpy(residences, XCBGlxAreTexturesResidentData(reply), XCBGlxAreTexturesResidentDataLength(reply) * sizeof(GLboolean));
         retval = reply->ret_val;
         free(reply);
 #else
@@ -4429,7 +4429,7 @@ __indirect_glGenTextures(GLsizei n, GLuint * textures)
         XCBConnection *c = XCBConnectionOfDisplay(dpy);
         (void) __glXFlushRenderBuffer(gc, gc->pc);
         XCBGlxGenTexturesRep *reply = XCBGlxGenTexturesReply(c, XCBGlxGenTextures(c, gc->currentContextTag, n), NULL);
-        textures = (GLuint *)XCBGlxGenTexturesData(reply);
+        (void)memcpy(textures, XCBGlxGenTexturesData(reply), XCBGlxGenTexturesDataLength(reply) * sizeof(GLuint));
         free(reply);
 #else
         GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GenTextures, cmdlen);
@@ -7624,7 +7624,7 @@ __indirect_glGenQueriesARB(GLsizei n, GLuint * ids)
         XCBConnection *c = XCBConnectionOfDisplay(dpy);
         (void) __glXFlushRenderBuffer(gc, gc->pc);
         XCBGlxGenQueriesARBRep *reply = XCBGlxGenQueriesARBReply(c, XCBGlxGenQueriesARB(c, gc->currentContextTag, n), NULL);
-        ids = (GLuint *)XCBGlxGenQueriesARBData(reply);
+        (void)memcpy(ids, XCBGlxGenQueriesARBData(reply), XCBGlxGenQueriesARBDataLength(reply) * sizeof(GLuint));
         free(reply);
 #else
         GLubyte const * pc = __glXSetupSingleRequest(gc, X_GLsop_GenQueriesARB, cmdlen);
index 6a4d1dfc0d45b69ca41363bc012b7bbde15cee72..53a979591822893b05eaf32acff1028d89d04c85 100644 (file)
@@ -574,7 +574,8 @@ generic_%u_byte( GLint rop, const void * ptr )
                        if f.needs_reply():
                                print '        %sRep *reply = %sReply(c, %s, NULL);' % (xcb_name, xcb_name, xcb_request)
                                if output and f.reply_always_array:
-                                       print '        %s = (%s)%sData(reply);' % (output.name, output.type_string(), xcb_name)
+                                       print '        (void)memcpy(%s, %sData(reply), %sDataLength(reply) * sizeof(%s));' % (output.name, xcb_name, xcb_name, output.get_base_type_string())
+
                                elif output and not f.reply_always_array:
                                        if not output.is_image():
                                                print '        if (%sDataLength(reply) == 0)' % (xcb_name)