Update to libxcb 1.14 and xcb-proto 1.14. ok tb@

This commit is contained in:
matthieu 2020-05-16 08:49:00 +00:00
parent 0d451cc2e3
commit 0ed5a7f139
28 changed files with 347 additions and 109 deletions

138
dist/libxcb/ChangeLog vendored
View File

@ -1,3 +1,141 @@
commit 4b40b44cb6d088b6ffa2fb5cf3ad8f12da588cef
Author: Matt Turner <mattst88@gmail.com>
Date: Sat Feb 22 12:10:53 2020 -0800
Release libxcb 1.14
Signed-off-by: Matt Turner <mattst88@gmail.com>
commit 78c492deaa7ae3aad0b0eeb4b126bb291cc637a7
Author: Matt Turner <mattst88@gmail.com>
Date: Sat Feb 22 12:19:58 2020 -0800
Build xz tarballs instead of bzip2
Signed-off-by: Matt Turner <mattst88@gmail.com>
commit 8f7e4c4e9fc6ee6b5b5498a7d8af79150be0d26a
Author: Matt Turner <mattst88@gmail.com>
Date: Sat Feb 22 11:24:11 2020 -0800
configure.ac: Depend on pthread-stubs only on not-Linux
Signed-off-by: Matt Turner <mattst88@gmail.com>
commit f9f4b00aad69ff36e81c63089b1b16660eaca900
Author: Sam Varshavchik <mrsam@courier-mta.com>
Date: Sat Jan 4 10:43:59 2020 -0500
Implement xcb_total_read() and xcb_total_written().
Returns raw byte counts that have been read or written to the
xcb_connection_t.
I found it very useful when developing a high level widget toolkit, to
track down inefficient/sub-optimum code that generates a lot of X
protocol traffic.
Signed-off-by: Sam Varshavchik <mrsam@courier-mta.com>
commit 59e271e15bcecf0c461cd5c6c59081fb86b96c22
Author: A. Wilcox <AWilcox@Wilcox-Tech.com>
Date: Mon Dec 23 21:49:29 2019 -0600
tests: Support Check 0.13.0 API
[mattst88]: Keep compatibility with old API via preprocessor
Fixes: #43
commit 21324989b7e121c008a2c4fdf98547541cbf7b83
Author: Martin Dørum <martid0311@gmail.com>
Date: Sun May 19 16:05:08 2019 +0200
Handle EINTR from recvmsg in _xcb_in_read
I have a GTK application which occasionally crashes with an "interrupted
system call" g_message from gdk. After a lot of debugging, I've found
that the call to recvmsg in _xcb_in_read occasionally fails with EINTR,
and instead of retrying the system call, xcb would just shut down the
connection.
This change makes _xcb_in_read treat EINTR the same as it would treat
EAGAIN; it returns 1 and libX11 ends up calling xcb_poll_for_event
again (from what I have understood).
I have spoken with a few people who think recvmsg failing with EINTR in
this case shouldn't ever happen, and I don't know enough to agree or
disagree with that. In case anyone wants to dig further and try to
figure out why the recvmsg call sometimes fails with EINTR, here's the
backtrace from inside of _xcb_in_read where that happened:
Thread 1 "beanbar" hit Breakpoint 1, _xcb_in_read (c=c@entry=0x55ecbe4aba80) at xcb_in.c:1059
1059 fprintf(stderr, "Hello World am %s:%i, errno is %s\n", __FILE__, __LINE__, strerror(errno));
(gdb) bt
0 0x00007fa48fa48639 in _xcb_in_read (c=c@entry=0x55ecbe4aba80) at xcb_in.c:1059
1 0x00007fa48fa489d8 in poll_for_next_event (c=0x55ecbe4aba80, queued=queued@entry=0) at xcb_in.c:352
2 0x00007fa48fa48a3d in poll_for_next_event (queued=0, c=<optimized out>) at xcb_in.c:722
3 0x00007fa48fa48a3d in xcb_poll_for_event (c=<optimized out>) at xcb_in.c:722
4 0x00007fa4908d1b7e in poll_for_event (dpy=dpy@entry=0x55ecbe4a9730, queued_only=queued_only@entry=0) at xcb_io.c:245
5 0x00007fa4908d1cf0 in poll_for_response (dpy=dpy@entry=0x55ecbe4a9730) at xcb_io.c:303
6 0x00007fa4908d1fed in _XEventsQueued (mode=2, dpy=0x55ecbe4a9730) at xcb_io.c:363
7 0x00007fa4908d1fed in _XEventsQueued (dpy=dpy@entry=0x55ecbe4a9730, mode=mode@entry=2) at xcb_io.c:344
8 0x00007fa4908c3d47 in XPending (dpy=0x55ecbe4a9730) at Pending.c:55
9 0x00007fa493cadbc7 in () at /usr/lib/libgdk-3.so.0
10 0x00007fa49234d08a in g_main_context_prepare () at /usr/lib/libglib-2.0.so.0
11 0x00007fa49234d6e6 in () at /usr/lib/libglib-2.0.so.0
12 0x00007fa49234d8ae in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
13 0x00007fa4938b920e in g_application_run () at /usr/lib/libgio-2.0.so.0
14 0x000055ecbc820af4 in main (argc=1, argv=0x7ffd06238098) at src/main.c:190
Signed-off-by: Martin Dørum <martid0311@gmail.com>
commit 656c08c5429a3cf53e7abd7fc56cd3c3a79c0f64
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Sun Sep 14 00:05:27 2014 +0100
Include time.h before using time()
Signed-off-by: Jon Turney <jon.turney@dronecode.org.uk>
commit be1745c8eb00defcb31d336ccc142de056e92bd8
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sun Feb 17 12:06:10 2019 -0800
Add README.md to EXTRA_DIST
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
commit 58f37377c851960cbf21fac1caf38ab1e66c7d6c
Author: Eduardo Sánchez Muñoz <esm@eduardosm.net>
Date: Sun Feb 17 13:33:12 2019 +0100
Add "ge.*" to src/.gitignore
commit 7bac366953005233fc3c8736e6f1cd5798e65e28
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sat Feb 16 13:41:28 2019 -0800
Update README for gitlab migration
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
commit 02ff3eadf48e6affe3b59ef688312b4dab538e8b
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Sat Feb 16 13:20:45 2019 -0800
Update configure.ac bug URL for gitlab migration
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
commit 542befe40a3a7c6a5d1dcb7f38fb9eb261b96b24
Author: Alan Coopersmith <alan.coopersmith@oracle.com>
Date: Mon Jan 7 14:42:53 2019 -0800
c_client: fix "adress" typo
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
commit 8287ebd7b752c33b0cabc4982606fe4831106f7e commit 8287ebd7b752c33b0cabc4982606fe4831106f7e
Author: Uli Schlachter <psychon@znc.in> Author: Uli Schlachter <psychon@znc.in>
Date: Thu Sep 27 14:04:17 2018 +0200 Date: Thu Sep 27 14:04:17 2018 +0200

View File

@ -99,6 +99,7 @@ tools/README \
tools/api_conv.pl \ tools/api_conv.pl \
tools/constants \ tools/constants \
autogen.sh \ autogen.sh \
README.md \
$(TESTS) $(TESTS)
MAINTAINERCLEANFILES = ChangeLog INSTALL MAINTAINERCLEANFILES = ChangeLog INSTALL

7
dist/libxcb/NEWS vendored
View File

@ -1,3 +1,10 @@
Release 1.14 (2020-02-22)
=========================
* Add xcb_total_read() and xcb_total_written() API
* Support check >= 0.13 API (for make check)
* Bug fix to handle EINTR from recvmsg
* Only require pthread-stubs on non-Linux platforms
Release 1.13.1 (2018-09-27) Release 1.13.1 (2018-09-27)
=========================== ===========================
* Don't flag extra reply in xcb_take_socket * Don't flag extra reply in xcb_take_socket

View File

@ -2,7 +2,7 @@ About libxcb
============ ============
libxcb provides an interface to the X Window System protocol, which libxcb provides an interface to the X Window System protocol, which
replaces the current Xlib interface. It has several advantages over replaces the traditional Xlib interface. It has several advantages over
Xlib, including: Xlib, including:
- size: small, simple library, and lower memory footprint - size: small, simple library, and lower memory footprint
- latency hiding: batch several requests and wait for the replies later - latency hiding: batch several requests and wait for the replies later
@ -10,27 +10,32 @@ Xlib, including:
- proven thread support: transparently access XCB from multiple threads - proven thread support: transparently access XCB from multiple threads
- easy extension implementation: interfaces auto-generated from XML-XCB - easy extension implementation: interfaces auto-generated from XML-XCB
Xlib can also use XCB as a transport layer, allowing software to make Xlib also uses XCB as a transport layer, allowing software to make
requests and receive responses with both, which eases porting to XCB. requests and receive responses with both, which eases porting to XCB.
However, client programs, libraries, and toolkits will gain the most However, client programs, libraries, and toolkits will gain the most
benefit from a native XCB port. benefit from a native XCB port.
More information about xcb is available from our website:
Please report any issues you find to the freedesktop.org bug tracker, https://xcb.freedesktop.org/
at:
<https://bugs.freedesktop.org/enter_bug.cgi?product=XCB> Please report any issues you find to the freedesktop.org bug tracker at:
https://gitlab.freedesktop.org/xorg/lib/libxcb/issues
Discussion about XCB occurs on the XCB mailing list: Discussion about XCB occurs on the XCB mailing list:
<mailto:xcb at lists.freedesktop.org> https://lists.freedesktop.org/mailman/listinfo/xcb
<http://lists.freedesktop.org/mailman/listinfo/xcb>
You can obtain the latest development versions of XCB using GIT. You can obtain the latest development versions of XCB using GIT from
For anonymous checkouts, use: the libxcb code repository at:
git clone git://anongit.freedesktop.org/git/xcb/libxcb https://gitlab.freedesktop.org/xorg/lib/libxcb
For developers, use: For anonymous checkouts, use:
git clone git+ssh://git.freedesktop.org/git/xcb/libxcb git clone https://gitlab.freedesktop.org/xorg/lib/libxcb.git
For developers, use:
git clone git@gitlab.freedesktop.org:xorg/lib/libxcb.git

View File

@ -2,8 +2,8 @@ dnl Process this file with autoconf to produce a configure script.
# Initialize Autoconf # Initialize Autoconf
AC_PREREQ([2.60]) AC_PREREQ([2.60])
AC_INIT([libxcb],[1.13.1], AC_INIT([libxcb],[1.14],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xcb], [https://gitlab.freedesktop.org/xorg/lib/libxcb/issues],
[libxcb]) [libxcb])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
@ -11,7 +11,7 @@ AC_CONFIG_SRCDIR([xcb.pc.in])
AC_CONFIG_HEADERS([src/config.h]) AC_CONFIG_HEADERS([src/config.h])
# Initialize Automake # Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_INIT_AUTOMAKE([foreign dist-xz])
AM_PATH_PYTHON([2.6]) AM_PATH_PYTHON([2.6])
# Set common system defines for POSIX extensions, such as _GNU_SOURCE # Set common system defines for POSIX extensions, such as _GNU_SOURCE
@ -50,8 +50,12 @@ fi
AC_SUBST(HTML_CHECK_RESULT) AC_SUBST(HTML_CHECK_RESULT)
# Checks for pkg-config packages # Checks for pkg-config packages
PKG_CHECK_MODULES(XCBPROTO, xcb-proto >= 1.13) PKG_CHECK_MODULES(XCBPROTO, xcb-proto >= 1.14)
NEEDED="pthread-stubs xau >= 0.99.2" NEEDED="xau >= 0.99.2"
case $host_os in
linux*) ;;
*) NEEDED="$NEEDED pthread-stubs" ;;
esac
PKG_CHECK_MODULES(NEEDED, $NEEDED) PKG_CHECK_MODULES(NEEDED, $NEEDED)
have_xdmcp="no" have_xdmcp="no"

View File

@ -728,6 +728,7 @@ _LT_CONFIG_SAVE_COMMANDS([
cat <<_LT_EOF >> "$cfgfile" cat <<_LT_EOF >> "$cfgfile"
#! $SHELL #! $SHELL
# Generated automatically by $as_me ($PACKAGE) $VERSION # Generated automatically by $as_me ($PACKAGE) $VERSION
# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh. # NOTE: Changes made to this file will be lost: look at ltmain.sh.
# Provide generalized library-building support services. # Provide generalized library-building support services.
@ -1416,10 +1417,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
x86_64-*linux*) x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64" LD="${LD-ld} -m elf_x86_64"
;; ;;
powerpcle-*linux*) powerpcle-*linux*|powerpc64le-*linux*)
LD="${LD-ld} -m elf64lppc" LD="${LD-ld} -m elf64lppc"
;; ;;
powerpc-*linux*) powerpc-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf64ppc" LD="${LD-ld} -m elf64ppc"
;; ;;
s390*-*linux*|s390*-*tpf*) s390*-*linux*|s390*-*tpf*)
@ -1707,6 +1708,11 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192; lt_cv_sys_max_cmd_len=8192;
;; ;;
mint*)
# On MiNT this can take a long time and run out of memory.
lt_cv_sys_max_cmd_len=8192;
;;
amigaos*) amigaos*)
# On AmigaOS with pdksh, this test takes hours, literally. # On AmigaOS with pdksh, this test takes hours, literally.
# So we just punt and use a minimum line length of 8192. # So we just punt and use a minimum line length of 8192.
@ -2635,11 +2641,11 @@ darwin* | rhapsody*)
version_type=darwin version_type=darwin
need_lib_prefix=no need_lib_prefix=no
need_version=no need_version=no
library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' library_names_spec='$libname$release$versuffix$shared_ext $libname$release$major$shared_ext $libname$shared_ext'
soname_spec='$libname$release$major$shared_ext' soname_spec='$libname$release$major$shared_ext'
shlibpath_overrides_runpath=yes shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH shlibpath_var=DYLD_LIBRARY_PATH
shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' shrext_cmds='`test .$module = .yes && echo .bundle || echo .dylib`'
m4_if([$1], [],[ m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
@ -2665,7 +2671,14 @@ freebsd* | dragonfly*)
*) objformat=elf ;; *) objformat=elf ;;
esac esac
fi fi
version_type=freebsd-$objformat # Handle Gentoo/FreeBSD as it was Linux
case $host_vendor in
gentoo)
version_type=linux ;;
*)
version_type=freebsd-$objformat ;;
esac
case $version_type in case $version_type in
freebsd-elf*) freebsd-elf*)
library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
@ -2677,6 +2690,12 @@ freebsd* | dragonfly*)
library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
need_version=yes need_version=yes
;; ;;
linux)
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
need_lib_prefix=no
need_version=no
;;
esac esac
shlibpath_var=LD_LIBRARY_PATH shlibpath_var=LD_LIBRARY_PATH
case $host_os in case $host_os in
@ -2886,18 +2905,6 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
dynamic_linker='GNU/Linux ld.so' dynamic_linker='GNU/Linux ld.so'
;; ;;
netbsdelf*-gnu)
version_type=linux
need_lib_prefix=no
need_version=no
library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
soname_spec='${libname}${release}${shared_ext}$major'
shlibpath_var=LD_LIBRARY_PATH
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
dynamic_linker='NetBSD ld.elf_so'
;;
netbsd*) netbsd*)
version_type=sunos version_type=sunos
need_lib_prefix=no need_lib_prefix=no
@ -3557,7 +3564,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
lt_cv_deplibs_check_method=pass_all lt_cv_deplibs_check_method=pass_all
;; ;;
netbsd* | netbsdelf*-gnu) netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
else else
@ -4435,7 +4442,7 @@ m4_if([$1], [CXX], [
;; ;;
esac esac
;; ;;
netbsd* | netbsdelf*-gnu) netbsd*)
;; ;;
*qnx* | *nto*) *qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise # QNX uses GNU C++, but need to define -shared option too, otherwise
@ -4947,9 +4954,6 @@ m4_if([$1], [CXX], [
;; ;;
esac esac
;; ;;
linux* | k*bsd*-gnu | gnu*)
_LT_TAGVAR(link_all_deplibs, $1)=no
;;
*) *)
_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
;; ;;
@ -5012,9 +5016,6 @@ dnl Note also adjust exclude_expsyms for C++ above.
openbsd* | bitrig*) openbsd* | bitrig*)
with_gnu_ld=no with_gnu_ld=no
;; ;;
linux* | k*bsd*-gnu | gnu*)
_LT_TAGVAR(link_all_deplibs, $1)=no
;;
esac esac
_LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(ld_shlibs, $1)=yes
@ -5269,7 +5270,7 @@ _LT_EOF
fi fi
;; ;;
netbsd* | netbsdelf*-gnu) netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
wlarc= wlarc=
@ -5790,7 +5791,6 @@ _LT_EOF
if test yes = "$lt_cv_irix_exported_symbol"; then if test yes = "$lt_cv_irix_exported_symbol"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
fi fi
_LT_TAGVAR(link_all_deplibs, $1)=no
else else
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
@ -5812,7 +5812,7 @@ _LT_EOF
esac esac
;; ;;
netbsd* | netbsdelf*-gnu) netbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
else else
@ -6438,7 +6438,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# Commands to make compiler produce verbose output that lists # Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when # what "hidden" libraries, object files and flags are used when
# linking a shared library. # linking a shared library.
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else else
GXX=no GXX=no
@ -6813,7 +6813,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# explicitly linking system object files so we need to strip them # explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library # from the output so that they don't get included in the library
# dependencies. # dependencies.
output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
;; ;;
*) *)
if test yes = "$GXX"; then if test yes = "$GXX"; then
@ -6878,7 +6878,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# explicitly linking system object files so we need to strip them # explicitly linking system object files so we need to strip them
# from the output so that they don't get included in the library # from the output so that they don't get included in the library
# dependencies. # dependencies.
output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
;; ;;
*) *)
if test yes = "$GXX"; then if test yes = "$GXX"; then
@ -7217,7 +7217,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# Commands to make compiler produce verbose output that lists # Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when # what "hidden" libraries, object files and flags are used when
# linking a shared library. # linking a shared library.
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else else
# FIXME: insert proper C++ library support # FIXME: insert proper C++ library support
@ -7301,7 +7301,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# Commands to make compiler produce verbose output that lists # Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when # what "hidden" libraries, object files and flags are used when
# linking a shared library. # linking a shared library.
output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
else else
# g++ 2.7 appears to require '-G' NOT '-shared' on this # g++ 2.7 appears to require '-G' NOT '-shared' on this
# platform. # platform.
@ -7312,7 +7312,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# Commands to make compiler produce verbose output that lists # Commands to make compiler produce verbose output that lists
# what "hidden" libraries, object files and flags are used when # what "hidden" libraries, object files and flags are used when
# linking a shared library. # linking a shared library.
output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
fi fi
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'

View File

@ -1933,7 +1933,7 @@ def _c_accessors_list(self, field):
else: else:
# use the accessor to get the start of the list, then # use the accessor to get the start of the list, then
# compute the length of it by subtracting it from # compute the length of it by subtracting it from
# the adress of the first byte after the end of the # the address of the first byte after the end of the
# request # request
after_end_of_request = '(((char*)R) + R->length * 4)' after_end_of_request = '(((char*)R) + R->length * 4)'
start_of_list = '%s(R)' % (field.c_accessor_name) start_of_list = '%s(R)' % (field.c_accessor_name)

29
dist/libxcb/src/xcb.h vendored
View File

@ -599,6 +599,35 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *display, xcb
uint32_t xcb_generate_id(xcb_connection_t *c); uint32_t xcb_generate_id(xcb_connection_t *c);
/**
* @brief Obtain number of bytes read from the connection.
* @param c The connection
* @return Number of bytes read from the server.
*
* Returns cumulative number of bytes received from the connection.
*
* This retrieves the total number of bytes read from this connection,
* to be used for diagnostic/monitoring/informative purposes.
*/
uint64_t
xcb_total_read(xcb_connection_t *c);
/**
*
* @brief Obtain number of bytes written to the connection.
* @param c The connection
* @return Number of bytes written to the server.
*
* Returns cumulative number of bytes sent to the connection.
*
* This retrieves the total number of bytes written to this connection,
* to be used for diagnostic/monitoring/informative purposes.
*/
uint64_t
xcb_total_written(xcb_connection_t *c);
/** /**
* @} * @}
*/ */

View File

@ -34,6 +34,7 @@
#include <sys/param.h> #include <sys/param.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h>
#ifdef __INTERIX #ifdef __INTERIX
/* _don't_ ask. interix has INADDR_LOOPBACK in here. */ /* _don't_ ask. interix has INADDR_LOOPBACK in here. */

View File

@ -287,6 +287,7 @@ static int write_vec(xcb_connection_t *c, struct iovec **vector, int *count)
return 0; return 0;
} }
c->out.total_written += n;
for(; *count; --*count, ++*vector) for(; *count; --*count, ++*vector)
{ {
int cur = (*vector)->iov_len; int cur = (*vector)->iov_len;
@ -528,3 +529,30 @@ int _xcb_conn_wait(xcb_connection_t *c, pthread_cond_t *cond, struct iovec **vec
return ret; return ret;
} }
uint64_t xcb_total_read(xcb_connection_t *c)
{
uint64_t n;
if (xcb_connection_has_error(c))
return 0;
pthread_mutex_lock(&c->iolock);
n = c->in.total_read;
pthread_mutex_unlock(&c->iolock);
return n;
}
uint64_t xcb_total_written(xcb_connection_t *c)
{
uint64_t n;
if (xcb_connection_has_error(c))
return 0;
pthread_mutex_lock(&c->iolock);
n = c->out.total_written;
pthread_mutex_unlock(&c->iolock);
return n;
}

View File

@ -1025,6 +1025,7 @@ int _xcb_in_read(xcb_connection_t *c)
} }
} }
#endif #endif
c->in.total_read += n;
c->in.queue_len += n; c->in.queue_len += n;
} }
while(read_packet(c)) while(read_packet(c))
@ -1051,7 +1052,7 @@ int _xcb_in_read(xcb_connection_t *c)
} }
#endif #endif
#ifndef _WIN32 #ifndef _WIN32
if((n > 0) || (n < 0 && errno == EAGAIN)) if((n > 0) || (n < 0 && (errno == EAGAIN || errno == EINTR)))
#else #else
if((n > 0) || (n < 0 && WSAGetLastError() == WSAEWOULDBLOCK)) if((n > 0) || (n < 0 && WSAGetLastError() == WSAEWOULDBLOCK))
#endif /* !_WIN32 */ #endif /* !_WIN32 */

View File

@ -103,6 +103,7 @@ typedef struct _xcb_out {
uint64_t request; uint64_t request;
uint64_t request_written; uint64_t request_written;
uint64_t total_written;
pthread_mutex_t reqlenlock; pthread_mutex_t reqlenlock;
enum lazy_reply_tag maximum_request_length_tag; enum lazy_reply_tag maximum_request_length_tag;
@ -135,6 +136,7 @@ typedef struct _xcb_in {
uint64_t request_expected; uint64_t request_expected;
uint64_t request_read; uint64_t request_read;
uint64_t request_completed; uint64_t request_completed;
uint64_t total_read;
struct reply_list *current_reply; struct reply_list *current_reply;
struct reply_list **current_reply_tail; struct reply_list **current_reply_tail;

View File

@ -1,10 +1,19 @@
#include <stdlib.h> #include <stdlib.h>
#include "check_suites.h" #include "check_suites.h"
#if CHECK_MAJOR_VERSION == 0 && CHECK_MINOR_VERSION < 13
void suite_add_test(Suite *s, TFun tf, const char *name) void suite_add_test(Suite *s, TFun tf, const char *name)
#else
void suite_add_test(Suite *s, const TTest *tt, const char *name)
#endif
{ {
TCase *tc = tcase_create(name); TCase *tc = tcase_create(name);
#if CHECK_MAJOR_VERSION == 0 && CHECK_MINOR_VERSION < 13
tcase_add_test(tc, tf); tcase_add_test(tc, tf);
#else
tcase_add_test(tc, tt);
#endif
suite_add_tcase(s, tc); suite_add_tcase(s, tc);
} }

View File

@ -1,4 +1,8 @@
#include <check.h> #include <check.h>
#if CHECK_MAJOR_VERSION == 0 && CHECK_MINOR_VERSION < 13
void suite_add_test(Suite *s, TFun tf, const char *name); void suite_add_test(Suite *s, TFun tf, const char *name);
#else
void suite_add_test(Suite *s, const TTest *tt, const char *name);
#endif
Suite *public_suite(void); Suite *public_suite(void);

View File

@ -1,2 +1,2 @@
major=1 major=2
minor=1 minor=0

View File

@ -1,2 +1,2 @@
major=4 major=4
minor=0 minor=1

View File

@ -1,4 +1,4 @@
# $OpenBSD: Makefile,v 1.11 2018/10/04 20:17:48 matthieu Exp $ # $OpenBSD: Makefile,v 1.12 2020/05/16 08:49:00 matthieu Exp $
# This Makefile is used to generate the sources files with xcbgen # This Makefile is used to generate the sources files with xcbgen
# The x11/py-xcbgen package needs to be installed # The x11/py-xcbgen package needs to be installed
@ -6,7 +6,7 @@
DATADIR= ${X11BASE}/share DATADIR= ${X11BASE}/share
PYTHON= python${PYTHON_VERSION} PYTHON= python${PYTHON_VERSION}
MANOPTIONS= -c 'libxcb 1.13.1' -l 'X Version 11' -s 3 MANOPTIONS= -c 'libxcb 1.14' -l 'X Version 11' -s 3
SRCS= \ SRCS= \
bigreq.c \ bigreq.c \

View File

@ -797,7 +797,7 @@ xcb_screensaver_unset_attributes (xcb_connection_t *c,
xcb_void_cookie_t xcb_void_cookie_t
xcb_screensaver_suspend_checked (xcb_connection_t *c, xcb_screensaver_suspend_checked (xcb_connection_t *c,
uint8_t suspend) uint32_t suspend)
{ {
static const xcb_protocol_request_t xcb_req = { static const xcb_protocol_request_t xcb_req = {
.count = 2, .count = 2,
@ -811,7 +811,6 @@ xcb_screensaver_suspend_checked (xcb_connection_t *c,
xcb_screensaver_suspend_request_t xcb_out; xcb_screensaver_suspend_request_t xcb_out;
xcb_out.suspend = suspend; xcb_out.suspend = suspend;
memset(xcb_out.pad0, 0, 3);
xcb_parts[2].iov_base = (char *) &xcb_out; xcb_parts[2].iov_base = (char *) &xcb_out;
xcb_parts[2].iov_len = sizeof(xcb_out); xcb_parts[2].iov_len = sizeof(xcb_out);
@ -824,7 +823,7 @@ xcb_screensaver_suspend_checked (xcb_connection_t *c,
xcb_void_cookie_t xcb_void_cookie_t
xcb_screensaver_suspend (xcb_connection_t *c, xcb_screensaver_suspend (xcb_connection_t *c,
uint8_t suspend) uint32_t suspend)
{ {
static const xcb_protocol_request_t xcb_req = { static const xcb_protocol_request_t xcb_req = {
.count = 2, .count = 2,
@ -838,7 +837,6 @@ xcb_screensaver_suspend (xcb_connection_t *c,
xcb_screensaver_suspend_request_t xcb_out; xcb_screensaver_suspend_request_t xcb_out;
xcb_out.suspend = suspend; xcb_out.suspend = suspend;
memset(xcb_out.pad0, 0, 3);
xcb_parts[2].iov_base = (char *) &xcb_out; xcb_parts[2].iov_base = (char *) &xcb_out;
xcb_parts[2].iov_len = sizeof(xcb_out); xcb_parts[2].iov_len = sizeof(xcb_out);

View File

@ -193,8 +193,7 @@ typedef struct xcb_screensaver_suspend_request_t {
uint8_t major_opcode; uint8_t major_opcode;
uint8_t minor_opcode; uint8_t minor_opcode;
uint16_t length; uint16_t length;
uint8_t suspend; uint32_t suspend;
uint8_t pad0[3];
} xcb_screensaver_suspend_request_t; } xcb_screensaver_suspend_request_t;
/** Opcode for xcb_screensaver_notify. */ /** Opcode for xcb_screensaver_notify. */
@ -492,7 +491,7 @@ xcb_screensaver_unset_attributes (xcb_connection_t *c,
*/ */
xcb_void_cookie_t xcb_void_cookie_t
xcb_screensaver_suspend_checked (xcb_connection_t *c, xcb_screensaver_suspend_checked (xcb_connection_t *c,
uint8_t suspend); uint32_t suspend);
/** /**
* *
@ -504,7 +503,7 @@ xcb_screensaver_suspend_checked (xcb_connection_t *c,
*/ */
xcb_void_cookie_t xcb_void_cookie_t
xcb_screensaver_suspend (xcb_connection_t *c, xcb_screensaver_suspend (xcb_connection_t *c,
uint8_t suspend); uint32_t suspend);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -3,4 +3,4 @@ SUBDIRS = src xcbgen
pkgconfigdir = $(libdir)/pkgconfig pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = xcb-proto.pc pkgconfig_DATA = xcb-proto.pc
EXTRA_DIST=doc xcb-proto.pc.in autogen.sh EXTRA_DIST=doc xcb-proto.pc.in autogen.sh README.md

View File

@ -1,3 +1,9 @@
Release 1.14 (2020-02-22)
=========================
* Fix size computation of imported lists
* Allow access to the original type in the XML
* Add sysroot prefix to pkgconfig file (Fixes #9)
Release 1.13 (2018-02-28) Release 1.13 (2018-02-28)
========================= =========================
* dri3: Add multi-plane/modifier protocol for v1.2 * dri3: Add multi-plane/modifier protocol for v1.2

View File

@ -27,21 +27,23 @@ there is a file named 'local.pth' in /usr/lib/python2.5/site-packages,
which contains '/usr/local/lib/python2.5/site-packages'. Note that which contains '/usr/local/lib/python2.5/site-packages'. Note that
this is only necessary on machines where XCB is being built. this is only necessary on machines where XCB is being built.
Please report any issues you find to the freedesktop.org bug tracker, Please report any issues you find to the freedesktop.org bug tracker at:
at:
<https://bugs.freedesktop.org/enter_bug.cgi?product=XCB> https://gitlab.freedesktop.org/xorg/proto/xcbproto/issues
Discussion about XCB occurs on the XCB mailing list: Discussion about XCB occurs on the XCB mailing list:
<mailto:xcb at lists.freedesktop.org> https://lists.freedesktop.org/mailman/listinfo/xcb
<http://lists.freedesktop.org/mailman/listinfo/xcb>
You can obtain the latest development versions of XCB using GIT. You can obtain the latest development versions of xcb-proto using GIT from
For anonymous checkouts, use: the xcbproto code repository at:
git clone git://anongit.freedesktop.org/git/xcb/proto https://gitlab.freedesktop.org/xorg/proto/xcbproto
For developers, use: For anonymous checkouts, use:
git clone git+ssh://git.freedesktop.org/git/xcb/proto git clone https://gitlab.freedesktop.org/xorg/proto/xcbproto.git
For developers, use:
git clone git@gitlab.freedesktop.org:xorg/proto/xcbproto.git

View File

@ -3,10 +3,10 @@
AC_PREREQ(2.57) AC_PREREQ(2.57)
AC_INIT([XCB Proto], AC_INIT([XCB Proto],
1.13, 1.14,
[xcb@lists.freedesktop.org]) [xcb@lists.freedesktop.org])
AC_CONFIG_SRCDIR([xcb-proto.pc.in]) AC_CONFIG_SRCDIR([xcb-proto.pc.in])
AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_INIT_AUTOMAKE([foreign dist-xz])
AC_PATH_PROG(XMLLINT, xmllint, no) AC_PATH_PROG(XMLLINT, xmllint, no)
AM_CONDITIONAL(HAVE_XMLLINT, test "x$XMLLINT" != "xno") AM_CONDITIONAL(HAVE_XMLLINT, test "x$XMLLINT" != "xno")

View File

@ -1,9 +1,9 @@
#!/bin/sh #!/bin/sh
# py-compile - Compile a Python program # py-compile - Compile a Python program
scriptversion=2016-01-11.22; # UTC scriptversion=2018-03-07.03; # UTC
# Copyright (C) 2000-2017 Free Software Foundation, Inc. # Copyright (C) 2000-2018 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -16,7 +16,7 @@ scriptversion=2016-01-11.22; # UTC
# GNU General Public License for more details. # GNU General Public License for more details.
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you # As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a # distribute this file as part of a program that contains a
@ -162,7 +162,7 @@ sys.stdout.write('\n')" 2>/dev/null || :
# Local Variables: # Local Variables:
# mode: shell-script # mode: shell-script
# sh-indentation: 2 # sh-indentation: 2
# eval: (add-hook 'write-file-hooks 'time-stamp) # eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion=" # time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0" # time-stamp-time-zone: "UTC0"

View File

@ -168,8 +168,7 @@ Draft Standard Version 1.1
<!-- version 1.1 --> <!-- version 1.1 -->
<request name="Suspend" opcode="5"> <request name="Suspend" opcode="5">
<field type="BOOL" name="suspend" /> <field type="CARD32" name="suspend" />
<pad bytes="3" />
</request> </request>
<!-- Events --> <!-- Events -->

View File

@ -3,8 +3,8 @@ exec_prefix=@exec_prefix@
datarootdir=@datarootdir@ datarootdir=@datarootdir@
datadir=@datadir@ datadir=@datadir@
libdir=@libdir@ libdir=@libdir@
xcbincludedir=@xcbincludedir@ xcbincludedir=${pc_sysrootdir}@xcbincludedir@
pythondir=@pythondir@ pythondir=${pc_sysrootdir}@pythondir@
Name: XCB Proto Name: XCB Proto
Description: X protocol descriptions for XCB Description: X protocol descriptions for XCB

View File

@ -100,12 +100,12 @@ class Module(object):
self.add_type('INT16', '', ('int16_t',), tint16) self.add_type('INT16', '', ('int16_t',), tint16)
self.add_type('INT32', '', ('int32_t',), tint32) self.add_type('INT32', '', ('int32_t',), tint32)
self.add_type('INT64', '', ('int64_t',), tint64) self.add_type('INT64', '', ('int64_t',), tint64)
self.add_type('BYTE', '', ('uint8_t',), tcard8) self.add_type('BYTE', '', ('uint8_t',), tbyte)
self.add_type('BOOL', '', ('uint8_t',), tcard8) self.add_type('BOOL', '', ('uint8_t',), tbool)
self.add_type('char', '', ('char',), tchar) self.add_type('char', '', ('char',), tchar)
self.add_type('float', '', ('float',), tfloat) self.add_type('float', '', ('float',), tfloat)
self.add_type('double', '', ('double',), tdouble) self.add_type('double', '', ('double',), tdouble)
self.add_type('void', '', ('void',), tcard8) self.add_type('void', '', ('void',), tvoid)
# This goes out and parses the rest of the XML # This goes out and parses the rest of the XML
def register(self): def register(self):

View File

@ -192,12 +192,12 @@ class SimpleType(PrimitiveType):
Any type which is typedef'ed to cardinal will be one of these. Any type which is typedef'ed to cardinal will be one of these.
Public fields added: Public fields added:
none xml_type is the original string describing the type in the XML
''' '''
def __init__(self, name, size): def __init__(self, name, size, xml_type=None):
PrimitiveType.__init__(self, name, size) PrimitiveType.__init__(self, name, size)
self.is_simple = True self.is_simple = True
self.xml_type = xml_type
def resolve(self, module): def resolve(self, module):
self.resolved = True self.resolved = True
@ -206,24 +206,27 @@ class SimpleType(PrimitiveType):
# Cardinal datatype globals. See module __init__ method. # Cardinal datatype globals. See module __init__ method.
tcard8 = SimpleType(('uint8_t',), 1) tcard8 = SimpleType(('uint8_t',), 1, 'CARD8')
tcard16 = SimpleType(('uint16_t',), 2) tcard16 = SimpleType(('uint16_t',), 2, 'CARD16')
tcard32 = SimpleType(('uint32_t',), 4) tcard32 = SimpleType(('uint32_t',), 4, 'CARD32')
tcard64 = SimpleType(('uint64_t',), 8) tcard64 = SimpleType(('uint64_t',), 8, 'CARD64')
tint8 = SimpleType(('int8_t',), 1) tint8 = SimpleType(('int8_t',), 1, 'INT8')
tint16 = SimpleType(('int16_t',), 2) tint16 = SimpleType(('int16_t',), 2, 'INT16')
tint32 = SimpleType(('int32_t',), 4) tint32 = SimpleType(('int32_t',), 4, 'INT32')
tint64 = SimpleType(('int64_t',), 8) tint64 = SimpleType(('int64_t',), 8, 'INT64')
tchar = SimpleType(('char',), 1) tchar = SimpleType(('char',), 1, 'char')
tfloat = SimpleType(('float',), 4) tfloat = SimpleType(('float',), 4, 'float')
tdouble = SimpleType(('double',), 8) tdouble = SimpleType(('double',), 8, 'double')
tbyte = SimpleType(('uint8_t',), 1, 'BYTE')
tbool = SimpleType(('uint8_t',), 1, 'BOOL')
tvoid = SimpleType(('uint8_t',), 1, 'void')
class FileDescriptor(SimpleType): class FileDescriptor(SimpleType):
''' '''
Derived class which represents a file descriptor. Derived class which represents a file descriptor.
''' '''
def __init__(self): def __init__(self):
SimpleType.__init__(self, ('int'), 4) SimpleType.__init__(self, ('int'), 4, 'fd')
self.is_fd = True self.is_fd = True
def fixed_size(self): def fixed_size(self):
@ -240,7 +243,7 @@ class Enum(SimpleType):
bits contains a list of (name, bitnum) tuples. items only appear if specified as a bit. bitnum is a number. bits contains a list of (name, bitnum) tuples. items only appear if specified as a bit. bitnum is a number.
''' '''
def __init__(self, name, elt): def __init__(self, name, elt):
SimpleType.__init__(self, name, 4) SimpleType.__init__(self, name, 4, 'enum')
self.values = [] self.values = []
self.bits = [] self.bits = []
self.doc = None self.doc = None
@ -333,6 +336,9 @@ class ListType(Type):
self.member.resolve(module) self.member.resolve(module)
self.expr.resolve(module, self.parents) self.expr.resolve(module, self.parents)
# resolve() could have changed the size (ComplexType starts with size 0)
self.size = self.member.size if self.member.fixed_size() else None
self.required_start_align = self.member.required_start_align self.required_start_align = self.member.required_start_align
# Find my length field again. We need the actual Field object in the expr. # Find my length field again. We need the actual Field object in the expr.
@ -506,7 +512,6 @@ class ComplexType(Type):
self.nmemb = 1 self.nmemb = 1
self.size = 0 self.size = 0
self.lenfield_parent = [self] self.lenfield_parent = [self]
self.fds = []
# get required_start_alignment # get required_start_alignment
required_start_align_element = elt.find("required_start_align") required_start_align_element = elt.find("required_start_align")