On Sat, Dec 27, 2003 at 01:10:31AM +0900, Choe Hwanjin wrote:
>Hello,
>
>I have a question about XIM_STR_CONVERSION_REPLY message.
>On XIM spec, XIM_STR_CONVERSION_REPLY is defined as:
>
>    2  CARD16            input-method-ID
>    2  CARD16            input-context-ID
>    4  CARD32            XIMStringConversionFeedback
>       XIMSTRCONVTEXT    XIMStringConversionText

XIMSTRCONVTEXT is defined to include a CARD16 XIMStringConversionFeedback
too, so the separate field above looks redundant.

>but xfree86 source does not conform to this.
>xc/lib/X11/imCallbk.c:394 is :
>
>        _XimSetHeader((XPointer)buf, XIM_STR_CONVERSION_REPLY, 0, &buf_len);
>        buf_len -= XIM_HEADER_SIZE; /* added by _XimSetHeader (HACK) */
>        p = XIM_HEADER_SIZE;
>        *(CARD16*)&buf[p] = (CARD16)im->private.proto.imid; p += sz_CARD16;
>        *(CARD16*)&buf[p] = (CARD16)ic->private.proto.icid; p += sz_CARD16;
>        *(CARD16*)&buf[p] = (CARD16)cbrec.text->length; p += sz_CARD16;
>        ~~~~~~~~~~~~~~~~~
>               +----> this is not XIMStringConversionFeedback
>
>        memcpy(&buf[p],&cbrec.text->string.mbs,length_in_bytes);
>        p += length_in_bytes;
>        *(CARD16*)&buf[p] = (CARD16)(sz_CARD32*cbrec.text->length);
>        p += XIM_PAD(2);
>        for (i = 0; i < (int)cbrec.text->length; i++) {
>            *(CARD32*)&buf[p] = (CARD32)cbrec.text->feedback[i];
>            p += sz_CARD32;
>        }

I'm not sure if the buffer length is calculated correctly either.

>On the other hand, IMdkit comform to XIM spec, it define structure for 
>XIM_STR_CONVERSION_REPLY as:
>
>xim_externaldef XimFrameRec str_conversion_reply_fr[] =
>{
>    _FRAME(BIT16),              /* input-method-ID */
>    _FRAME(BIT16),              /* input-context-ID */
>    _FRAME(BIT32),              /* XIMStringConversionFeedback */
>    _FRAME(BIT16),              /* length of the retrieved string */
>    _FRAME(BARRAY),             /* retrieved string */
>    _PAD4(2),
>    _BYTE_COUNTER(BIT16, 2),    /* number of feedback array */
>    _PAD4(1),
>    _FRAME(ITER),               /* feedback array */
>    _FRAME(BIT32),
>    _FRAME(EOL),
>};
>
>Which is right?

That's a good question.  What do working XIM servers expect?

David
-- 
David Dawes                                     X-Oz Technologies
www.XFree86.org/~dawes                          www.x-oz.com
_______________________________________________
I18n mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/i18n

Reply via email to