The GetReq family of macros is so evil. I'm not going to go so far as
to NAK this patch or anything, but please consider whether you can
implement this as a proper function or something. Perhaps:

void *XGetReq(CARD8 reqType, size_t sz);

(I think the other macros could be re-implemented on top of that
function, so long as the function continues to behave in a manner
compatible with code compiled using the current macros.)

Also, do you care about big-requests here? I can't remember how Xlib
handles that extension.

Jamey

On 10/14/11, Peter Hutterer <peter.hutte...@who-t.net> wrote:
> Some XI2 requests change in size over different versions and libXi would
> need to hack around GetReq and GetReqExtra. Add a new GetReqSized so the
> library can explicitly specify the size of the request in 4-byte units.
>
> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>
> ---
> Instead of hacking around in libXi with GetReq, let's just add a new macro.
>
>  include/X11/Xlibint.h |   25 +++++++++++++++++++++++++
>  1 files changed, 25 insertions(+), 0 deletions(-)
>
> diff --git a/include/X11/Xlibint.h b/include/X11/Xlibint.h
> index 2ce356d..083498f 100644
> --- a/include/X11/Xlibint.h
> +++ b/include/X11/Xlibint.h
> @@ -478,6 +478,31 @@ extern LockInfoPtr _Xglobal_lock;
>       dpy->request++
>  #endif
>
> +/* GetReqSized is the same as GetReq but allows the caller to specify the
> + * size in 4-byte units */
> +#if !defined(UNIXCPP) || defined(ANSICPP)
> +#define GetReqSized(name, sz, req) \
> +        WORD64ALIGN\
> +     if ((dpy->bufptr + sz * 4) > dpy->bufmax)\
> +             _XFlush(dpy);\
> +     req = (x##name##Req *)(dpy->last_req = dpy->bufptr);\
> +     req->reqType = X_##name;\
> +     req->length = sz; \
> +     dpy->bufptr += sz * 4;\
> +     dpy->request++
> +#else
> +#define GetReqSized(name, sz, req) \
> +        WORD64ALIGN\
> +     if ((dpy->bufptr + sz * 4) > dpy->bufmax)\
> +             _XFlush(dpy);\
> +     req = (x/**/name/**/Req *)(dpy->last_req = dpy->bufptr);\
> +     req->reqType = X_/**/name;\
> +     req->length = sz; \
> +     dpy->bufptr += sz * 4; \
> +     dpy->request++
> +#endif
> +
> +
>
>  /*
>   * GetResReq is for those requests that have a resource ID
> --
> 1.7.6.4
>
> _______________________________________________
> xorg-devel@lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to