ken@richsun.UUCP (Ken Marks) (11/05/89)
Has anybody tried to send long values in the data union of a ClientMessageEvent across different machine architectures (and succeeded)? The scenario: There is an X client running locally on a sun 3/60 which is interested in obtaining the window id of another client which happens to be running remotely from a sun 386i. So the remote client executes some code akin to the following: . . . XClientMessageEvent event; event.type = ClientMessage; event.window = destination_window; event.message_type = REGISTRATION_EVENT; event.format = 32; /* event.format = 8; */ event.data.l[0] = 0x11223344; event.data.l[1] = my_window; XSendEvent(dpy, ..., &event); . . . The event is received by the local client but the values seem to have been diced, sliced, and minced. For example, event.data.l[0] comes out as 0x3344004c (close but no cigar). For the moment, I have resorted to changing the event format to 8 (sending the data as a set of 20 octets instead of 5 longs). I use the value in event.data.l[0] to determine if any byte swapping needs to be done manually. I would be interested to know if this is an old (known) problem, if it has been fixed during the rewrite of X11R4, or if it is a new one.
rws@EXPO.LCS.MIT.EDU (Bob Scheifler) (11/05/89)
Yes, this is an R3 bug we fixed long ago, but we've never put out a public patch for it, sorry.
rws@EXPO.LCS.MIT.EDU (Bob Scheifler) (11/05/89)
I should have added, I think the fix for this was to go into server/dix/swaprep.c, in SClientMessageEvent(), under case 32:, and change the cpswaps's to cpswapl's, but I don't guarantee it.