Commit Graph

52 Commits

Author SHA1 Message Date
Ran Benita 285d566a5c c_client.py: remove trailing whitespace
These are extra annoying in python code.

Signed-off-by: Ran Benita <ran234@gmail.com>
Reviewed-by: Daniel Martin <consume.noise@gmail.com>
2014-07-28 20:29:49 +02:00
Ran Benita 285838cfe4 c_client.py: remove useless 'today' variable
Signed-off-by: Ran Benita <ran234@gmail.com>
Reviewed-by: Daniel Martin <consume.noise@gmail.com>
2014-07-28 20:29:04 +02:00
Daniel Martin 72e45969ff Handle <pad align="n" /> between lists
Without this patch we end up with invalid C code if we've a
<pad align="n" /> between two variadic lists. Check for such a condition
and take the alignment pad into account.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79808

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2014-06-10 14:01:03 -04:00
Keith Packard 1f6cd9f1fc Only #include directly referenced module header files
This avoids having the nested header files also included at the top
level, which is more efficient.

Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2014-03-22 14:44:52 +01:00
Gaetan Nadon d7eb0bdf3b generated man pages: use xorg footer and no hard coded extension
The section number is no longer hard-coded
The left footer is now "X Version 11".
The center footer is the package name with the version, "libxcb 1.9"
The three values above are provided through xorg-macros. They are passed-in
to the python c_client code.

Example of footer (last line, above dotted line)

[...]
AUTHOR
       Generated from xproto.xml. Contact xcb@lists.freedesktop.org for cor‐
       rections and improvements.

X Version 11                      libxcb 1.9                 xcb_send_event(3)

------------------------------------------------------------------------------

Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
2014-01-30 12:10:06 +09:00
Peter Harris e7263931af Support <pad align="n" />
Reviewed-By: Ran Benita <ran234@gmail.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2014-01-21 15:25:10 -05:00
Kenneth Graunke 3b72a2c9d1 Force XCB event structures with 64-bit extended fields to be packed.
With the advent of the Present extension, some events (such as
PresentCompleteNotify) now use native 64-bit types on the wire.

For XGE events, we insert an extra "uint32_t full_sequence" field
immediately after the first 32 bytes of data.  Normally, this causes
the subsequent fields to be shifted over by 4 bytes, and the structure
to grow in size by 4 bytes.  Everything works fine.

However, if event contains 64-bit extended fields, this may result in
the compiler adding an extra 4 bytes of padding so that those fields
remain aligned on 64-bit boundaries.  This causes the structure to grow
by 8 bytes, not 4.  Unfortunately, XCB doesn't realize this, and
always believes that the length only increased by 4.  read_packet()
then fails to malloc enough memory to hold the event, and the event
processing code uses the wrong offsets.

To fix this, mark any event structures containing 64-bit extended
fields with __attribute__((__packed__)).

v2: Use any(...) instead of True in (...), as suggested by
    Daniel Martin.

v3 (Alan Coopersmith): Fix build with Solaris Studio 12.3 by moving the
attribute to after the structure definition.

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Keith Packard <keithp@keithp.com> [v1]
Reviewed-by: Josh Triplett <josh@joshtriplett.org> [v1]
Reviewed-by: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2014-01-03 15:31:19 -08:00
Daniel Martin 18f0afab3f c_client.py: Fix _sizeof() functions
Currently, it is not possible to correctly iterate over the replies of
some requests. For example, the list of XIDeviceInfo returned by
the XIQueryDevice request from xinput2 is read as garbage starting from
the second entry.

The culprits are the _sizeof() used by the iterators. In the above case:

    int
    xcb_input_xi_device_info_sizeof (const void  *_buffer  /**< */)
    {
        char *xcb_tmp = (char *)_buffer;
        [...]
        unsigned int xcb_block_len = 0;
        [...]

        xcb_block_len += sizeof(xcb_input_xi_device_info_t);
        xcb_tmp += xcb_block_len;
        /* name */
        xcb_block_len += (((_aux->name_len + 3) / 4) * 4) * sizeof(char);
        xcb_tmp += xcb_block_len;
        [...]
    }

The problem here is that `xcb_block_len` is not zero'd right above the
`/* name */` comment, causing `xcb_tmp` to be incremented by
`sizeof(xcb_input_xi_device_info_t)` twice. The returned size is too
large.

https://bugs.freedesktop.org/show_bug.cgi?id=68387

Tested-by: Ran Benita <ran234@gmail.com>
Reviewed-by: Ran Benita <ran234@gmail.com>
Reviewed-by: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: Julien Cristau <jcristau@debian.org>
2013-12-12 20:37:47 +01:00
Keith Packard 7983bf0fbd Add support for receiving fds in replies
Requests signal which replies will have fds, and the replies report
how many fds they expect in byte 1.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-By: Uli Schlachter <psychon@znc.in>
2013-11-07 14:02:37 -08:00
Keith Packard 7b53fb0f9b Add xcb_send_fd API
This uses sendmsg to transmit file descriptors from the application to
the X server

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-By: Uli Schlachter <psychon@znc.in>
2013-11-07 14:02:35 -08:00
Daniel Martin 0289348f2c c_client.py: Do not create pointers in unions
Do not create pointers in unions for fields of variadic length.

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Ran Benita <ran234@gmail.com>
2013-08-15 00:34:26 +02:00
Daniel Martin b9efd2a09a c_client.py: Always initialize xcb_align_to
to get rid of:
    warning: 'xcb_align_to' may be used uninitialized in this function

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Peter Harris <pharris@opentext.com>
2013-08-15 00:34:21 +02:00
Daniel Martin 45619dc71e c_client.py: Inject full_sequence into GE events
The generic event structure xcb_ge_event_t has the full_sequence field
at the 32byte boundary. That's why we've to inject this field into GE
events while generating the structure for them. Otherwise we would read
garbage (the internal full_sequence) when accessing normal event fields
there.

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2013-07-12 15:56:14 -04:00
Daniel Martin e602b653c1 c_client.py: Handle multiple expr. in a bitcase
Adopt a change from xcbgen. With that modification the expression in a
bitcase became a list of expressions to support multiple <enumref> in a
<bitcase>.

Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Signed-off-by: Peter Harris <pharris@opentext.com>
2013-05-23 10:52:05 -04:00
Chí-Thanh Christopher Nguyễn 76a2166de9 c_client.py: Fix python-3 invalid except statement
Replace except statement with a PEP-3110 compliant one. This fixes a regression
introduced by c3deeaf714
https://bugs.freedesktop.org/show_bug.cgi?id=55690

Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-10 19:45:25 +01:00
Chí-Thanh Christopher Nguyễn 9db4517c87 c-client.py: Fix python-3 AttributeError: 'dict' object has no attribute 'iteritems'
This fixes a regression introduced by ea71d7d7e3
https://bugs.freedesktop.org/show_bug.cgi?id=55690

Reviewed-by: Peter Harris <pharris@opentext.com>
Signed-off-by: Uli Schlachter <psychon@znc.in>
2012-11-10 19:45:13 +01:00
Alan Coopersmith b52790e8ed Always include "config.h" at the start of all C source files.
Allows configure to set defines such as _POSIX_SOURCE in config.h
that affect functions exposed by system headers and get consistent
results across all the source files.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
2012-08-25 12:34:24 -07:00
Colin Walters c3deeaf714 c_client: Fix parallel-make issue creating 'man' directory
With make -j, it was possible to hit a race condition in the code to
make the 'man' directory.

Signed-off-by: Julien Danjou <julien@danjou.info>
2012-08-14 13:33:01 +02:00
Julien Danjou cc7fab2d5e Allow undocumented code to be built
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-26 18:29:35 +02:00
Michael Stapelberg ea71d7d7e3 c_client.py: generate manpages
Signed-off-by: Julien Danjou <julien@danjou.info>
2012-03-26 18:23:56 +02:00
Jamey Sharp b12038e9ae Keep ALIGNOF definition out of the public namespace.
Uli's patch is an excellent solution; I just want to keep the new
ALIGNOF macro hidden from XCB's users, as they don't need it to call
XCB.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-08-24 08:52:02 -07:00
Uli Schlachter aa02096b8e Compute alignment correctly
The code previously assumed that everything has to be aligned to a 4 byte
boundary. This assumption is wrong as e.g. the STR struct from xproto shows.

Instead, each type has to be aligned to its natural alignment. So a char doesn't
need any alignment, a INT16 gets aligned to a 2-byte-boundary and a INT32 gets
the old 4 byte alignment.

I'm not 100% sure that this commit is correct, but some quick tests with awesome
and cairo-xcb went well.

This commit causes lots of dead assignments to xcb_align_to since only the last
field's alignment is actually used, but this simplified this patch a lot.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=34037

Signed-off-by: Uli Schlachter <psychon@znc.in>
Signed-off-by: Peter Harris <pharris@opentext.com>
2011-08-24 10:28:49 -04:00
James Jones 662ad589c5 Insert, not append explicit xcbgen dir python path
If a the path to the xcb python generate libs is
explicitly specified to c_client.py, insert it in
the python path list just after the local dir entry,
rather than appending it to the existing paths.
This keeps a global/distro install of xcb from
overriding a local build of the xcb proto files.

Signed-off-by: James Jones <jajones@nvidia.com>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
2011-05-11 23:49:39 -07:00
David Coles 294c9f455c Add support for building with Python 3
Python 3 introduces some language changes that cause issues when running
c_client.py. This also breaks compatibility with Python 2.5 since it does not
support the "as" statement in try/except blocks and does not have reduce() in
the functools package.

The main changes are:
* try/except blocks require `except ... as ...:` to resolve syntactical ambiguity
* map() and filter() return iterators rather than lists in Python 3
* reduce() is now in functools package (and not built-in in Python 3)
* Dictionaries don't have a has_key() method in Python 3
* None and int types can't be directly compared in Python 3
* print() is a statement in Python 3

See http://diveintopython3.org/porting-code-to-python-3-with-2to3.html and
PEP-3110 for details.

Verified on Python 2.6.5 and 3.1.3.

Signed-off-by: David Coles <dcoles@gaikai.com>
Signed-off-by: Julien Danjou <julien@danjou.info>
2011-05-04 15:00:21 +02:00
Peter Harris c2e0236462 Don't try to sizeof(void)
sizeof(void) is a gcc extension, and not portable.

Xorg Bugzilla 31959
http://bugs.freedesktop.org/show_bug.cgi?id=31959
http://lists.freedesktop.org/archives/xcb/2010-May/006039.html

Signed-off-by: Peter Harris <pharris@opentext.com>
Tested-by: Cyril Brulebois <kibi@debian.org>
2011-01-27 15:38:36 -05:00
Peter Harris b672d1514c Fix _unserialize of reply headers
This cleans up a number of warnings, and passes the sequence number
through correctly.

Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 23:16:33 -04:00
Peter Harris 29cca33b90 Clean up a couple of warnings in xprint
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:32:51 -04:00
Peter Harris 8c1d2021ca Make *_unserialize safe to use on buffers in-place
By calling memmove instead of memcpy, and walking the buffer backward
from the end, *_unserialize is safe to use in-place.

Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:20:04 -04:00
Peter Harris 28a71c6567 Fix memory leak in _sizeof implemented with _unserialize
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:20:04 -04:00
Peter Harris a22909c0f5 Don't emit out-of-module sizeof definitions
Signed-off-by: Peter Harris <pharris@opentext.com>
2010-09-22 22:20:04 -04:00
Christoph Reimann 5e8a7ade2d small fix to get rid of some compiler warnings
also added very basic documentation for xkb
2010-08-16 20:24:40 +02:00
Christoph Reimann 22e1013131 added accessors for special cases
major bugfixes include: rewrite of prefix related functions, merge of serialize/unserialize/... generators, extended field name resolution
2010-08-16 18:19:16 +02:00
Christoph Reimann fe0e32b5fa special case 'intermixed variable and fixed size fields': fixed reply side, needs testing 2010-08-08 21:25:13 +02:00
Christoph Reimann 77b594f958 renamed most _unserialize() functions to _sizeof() and fixed _unserialize() for the special case of intermixed variable and fixed size fields 2010-08-05 15:55:28 +02:00
Christoph Reimann b187f029d6 attempt to fix special case: variable fields followed by fixed size fields 2010-08-02 23:30:42 +02:00
Christoph Reimann a700eeb502 bug fixes for all kinds of 'special cases' 2010-08-01 23:40:20 +02:00
Christoph Reimann 1c590d5a86 partial rewrite of serialize helper functions completed;
_serialize() & _unserialize() have been tested for switch derived from valueparam
2010-07-22 16:41:15 +02:00
Christoph Reimann 566ae9baee preliminary handling of further special cases in unserialize
first attempts to unify serialize and unserialize
2010-07-20 22:46:37 +02:00
Christoph Reimann 4e665e1580 added generating code for _serialize() in case of variable sized structs (largely untested) 2010-07-15 18:43:43 +02:00
Christoph Reimann 86704124b1 new and still preliminary functions for switch; feautures include
- API compatibility with valueparam
- request _aux() auxiliary functions
- _serialize() and _unserialize() auxiliary functions
- new data type that allows mixing of fixed and variable size members
2010-07-13 20:06:08 +02:00
Marcin Kościelnicki e4b746ac13 Add ~ operator support in code generator
Reviewed-by: Julien Cristau <jcristau@debian.org>
Signed-off-by: Julien Danjou <julien@danjou.info>
2010-05-14 13:19:28 +02:00
Peter Harris eaa71eac02 Avoid name collisions between xidtype and enum.
These changes are necessary to build with latest xcb/proto.

Signed-off-by: Peter Harris <pharris@opentext.com>
2009-03-14 12:34:31 -04:00
Peter Harris e986d1ee5a Revert "Don't use enums in generated C code"
This commit broke xcb/util.

This reverts commit 9984b72888.

Signed-off-by: Peter Harris <pharris@opentext.com>
2009-03-13 15:25:30 -04:00
Peter Harris 9984b72888 Don't use enums in generated C code - use integer constants instead.
Signed-off-by: Peter Harris <pharris@opentext.com>
2009-02-25 19:07:23 -05:00
Peter Harris 43b612a5e9 Treat XIDs the same as other cardinal values.
This fixes a bug where c_client.py wasn't generating *_end functions,
but expected them to exist in order to find the subsequent list's start.

Signed-off-by: Peter Harris <peter.harris@hummingbird.com>
2008-11-19 11:06:01 -05:00
Carsten Meier 9afadd2aef Added generation of extern "C" for compatibility with C++
The auto-generated header files now include an extern "C"
declaration for compatibility with C++.

Signed-off-by: Julien Danjou <julien@danjou.info>
2008-09-09 15:00:38 +02:00
Bart Massey d6d44e1bf0 fixed overly aggressive warning about fixed field following variable 2008-09-03 13:52:58 -07:00
Bart Massey 7e0674e761 added small fix to support trailing fixed fields; also warning for non-pad fixed fields 2008-09-03 11:58:14 -07:00
Julien Danjou 1ead02e88e initialize global_id to 0
Signed-off-by: Julien Danjou <julien@danjou.info>
2008-08-28 13:49:21 +02:00
Eamon Walsh 40566c36d5 Use the python install path from xcb-xproto.pc to locate the xcbgen package. 2008-04-23 20:25:57 -04:00