diff options
author | marha <marha@users.sourceforge.net> | 2011-08-29 14:48:31 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-08-29 14:48:31 +0200 |
commit | 924a6ffc82a7af0ca311af711ea2cf973dc6ff15 (patch) | |
tree | f5ee6d0aaf321029a4abb12c3c051c0434dde308 /libxcb | |
parent | 8e57a7fcbf736b8e437baf0bbccb93095d97617f (diff) | |
parent | 01df5d59e56a1b060568f8cad2e89f7eea22fc70 (diff) | |
download | vcxsrv-924a6ffc82a7af0ca311af711ea2cf973dc6ff15.tar.gz vcxsrv-924a6ffc82a7af0ca311af711ea2cf973dc6ff15.tar.bz2 vcxsrv-924a6ffc82a7af0ca311af711ea2cf973dc6ff15.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
apps/xwininfo/configure.ac
apps/xwininfo/xwininfo.c
libX11/configure.ac
libX11/specs/libX11/AppC.xml
libX11/specs/libX11/AppD.xml
libX11/specs/libX11/CH03.xml
libX11/specs/libX11/CH04.xml
libX11/specs/libX11/CH05.xml
libX11/specs/libX11/CH06.xml
libX11/specs/libX11/CH07.xml
libX11/specs/libX11/CH08.xml
libX11/specs/libX11/CH09.xml
libX11/specs/libX11/CH11.xml
libX11/specs/libX11/CH12.xml
libX11/specs/libX11/CH13.xml
libX11/specs/libX11/CH14.xml
libX11/specs/libX11/CH15.xml
libX11/specs/libX11/CH16.xml
libxcb/configure.ac
libxcb/src/c_client.py
libxcb/src/xcb_auth.c
libxcb/src/xcb_util.c
mesalib/common.py
mesalib/configs/linux-dri
mesalib/docs/GL3.txt
mesalib/docs/download.html
mesalib/docs/install.html
mesalib/include/GL/internal/dri_interface.h
mesalib/scons/custom.py
mesalib/scons/gallium.py
mesalib/src/gallium/auxiliary/util/u_math.h
mesalib/src/gallium/auxiliary/util/u_vbuf_mgr.c
mesalib/src/glsl/ast_function.cpp
mesalib/src/glsl/ast_to_hir.cpp
mesalib/src/glsl/glcpp/glcpp-parse.y
mesalib/src/glsl/glsl_parser_extras.cpp
mesalib/src/glsl/glsl_parser_extras.h
mesalib/src/glsl/ir.cpp
mesalib/src/glsl/ir.h
mesalib/src/glsl/ir_clone.cpp
mesalib/src/glsl/ir_print_visitor.cpp
mesalib/src/glsl/ir_validate.cpp
mesalib/src/glsl/linker.cpp
mesalib/src/glsl/main.cpp
mesalib/src/glsl/opt_tree_grafting.cpp
mesalib/src/mapi/glapi/gen/Makefile
mesalib/src/mapi/glapi/gen/gl_XML.py
mesalib/src/mapi/glapi/gen/gl_table.py
mesalib/src/mapi/glapi/glapi_mapi_tmp.h
mesalib/src/mapi/glapi/glapi_sparc.S
mesalib/src/mapi/glapi/glapi_x86-64.S
mesalib/src/mapi/glapi/glapi_x86.S
mesalib/src/mapi/glapi/glapitemp.h
mesalib/src/mapi/glapi/glprocs.h
mesalib/src/mapi/mapi/u_thread.c
mesalib/src/mapi/mapi/u_thread.h
mesalib/src/mesa/SConscript
mesalib/src/mesa/drivers/common/driverfuncs.c
mesalib/src/mesa/drivers/windows/gldirect/dglcontext.c
mesalib/src/mesa/main/api_arrayelt.c
mesalib/src/mesa/main/bufferobj.c
mesalib/src/mesa/main/compiler.h
mesalib/src/mesa/main/dd.h
mesalib/src/mesa/main/dlist.c
mesalib/src/mesa/main/enums.c
mesalib/src/mesa/main/es_generator.py
mesalib/src/mesa/main/fbobject.c
mesalib/src/mesa/main/imports.h
mesalib/src/mesa/main/mtypes.h
mesalib/src/mesa/main/pbo.c
mesalib/src/mesa/main/remap_helper.h
mesalib/src/mesa/main/shared.c
mesalib/src/mesa/main/texgetimage.c
mesalib/src/mesa/main/teximage.c
mesalib/src/mesa/main/uniforms.c
mesalib/src/mesa/program/ir_to_mesa.cpp
mesalib/src/mesa/program/prog_optimize.c
mesalib/src/mesa/program/register_allocate.c
mesalib/src/mesa/program/register_allocate.h
mesalib/src/mesa/sources.mak
mesalib/src/mesa/state_tracker/st_cb_bufferobjects.c
mesalib/src/mesa/state_tracker/st_cb_texture.c
mesalib/src/mesa/state_tracker/st_texture.h
mesalib/src/mesa/swrast/s_context.c
mesalib/src/mesa/tnl/t_draw.c
mesalib/src/mesa/vbo/vbo_exec_array.c
mesalib/src/mesa/vbo/vbo_save_api.c
pixman/pixman/pixman-arm-common.h
pixman/pixman/pixman-fast-path.c
pixman/pixman/pixman-inlines.h
pixman/test/Makefile.am
pixman/test/utils.c
pixman/test/utils.h
xorg-server/configure.ac
xorg-server/fb/fbblt.c
xorg-server/hw/xquartz/darwin.c
xorg-server/xkeyboard-config/symbols/de
Diffstat (limited to 'libxcb')
-rw-r--r-- | libxcb/configure.ac | 2 | ||||
-rw-r--r-- | libxcb/src/c_client.py | 12 | ||||
-rw-r--r-- | libxcb/src/xcb_auth.c | 6 | ||||
-rw-r--r-- | libxcb/src/xcb_util.c | 56 |
4 files changed, 65 insertions, 11 deletions
diff --git a/libxcb/configure.ac b/libxcb/configure.ac index dd8ec283e..52ec39cba 100644 --- a/libxcb/configure.ac +++ b/libxcb/configure.ac @@ -135,6 +135,8 @@ AC_PREREQ([2.59c], [], [AC_SUBST([htmldir], [m4_ifset([AC_PACKAGE_TARNAME], XCB_CHECK_DOXYGEN()
+AC_CHECK_FUNC(getaddrinfo, [AC_DEFINE(HAVE_GETADDRINFO, 1, [getaddrinfo() function is available])], )
+
case $host_os in
# darwin through Snow Leopard has poll() but can't be used to poll character devices.
darwin@<:@789@:>@*|darwin10*) ;;
diff --git a/libxcb/src/c_client.py b/libxcb/src/c_client.py index 077f0854c..321344190 100644 --- a/libxcb/src/c_client.py +++ b/libxcb/src/c_client.py @@ -171,10 +171,14 @@ def c_open(self): _c('#include <stdlib.h>')
_c('#include <string.h>')
_c('#include <assert.h>')
+ _c('#include <stddef.h> /* for offsetof() */')
_c('#include "xcbext.h"')
_c('#include "%s.h"', _ns.header)
_c('#include <X11/Xtrans/Xtrans.h>')
+ _c('')
+ _c('#define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)')
+
if _ns.is_ext:
for (n, h) in self.imports:
_hc('#include "%s.h"', h)
@@ -638,7 +642,7 @@ def get_serialize_params(context, self, buffer_var='_buffer', aux_var='_aux'): def _c_serialize_helper_insert_padding(context, code_lines, space, postpone):
code_lines.append('%s /* insert padding */' % space)
- code_lines.append('%s xcb_pad = -xcb_block_len & 3;' % space)
+ code_lines.append('%s xcb_pad = -xcb_block_len & (xcb_align_to - 1);' % space)
# code_lines.append('%s printf("automatically inserting padding: %%%%d\\n", xcb_pad);' % space)
code_lines.append('%s xcb_buffer_len += xcb_block_len + xcb_pad;' % space)
@@ -994,6 +998,8 @@ def _c_serialize_helper_fields(context, self, code_lines.append('%s xcb_parts_idx++;' % space)
count += 1
+ code_lines.append('%s xcb_align_to = ALIGNOF(%s);' % (space, 'char' if field.c_field_type == 'void' else field.c_field_type))
+
need_padding = True
if self.var_followed_by_fixed_fields:
need_padding = False
@@ -1101,9 +1107,11 @@ def _c_serialize(context, self): _c(' %s *xcb_out = *_buffer;', self.c_type)
_c(' unsigned int xcb_out_pad = -sizeof(%s) & 3;', self.c_type)
_c(' unsigned int xcb_buffer_len = sizeof(%s) + xcb_out_pad;', self.c_type)
+ _c(' unsigned int xcb_align_to;')
else:
_c(' char *xcb_out = *_buffer;')
_c(' unsigned int xcb_buffer_len = 0;')
+ _c(' unsigned int xcb_align_to;')
prefix = [('_aux', '->', self)]
aux_ptr = 'xcb_out'
@@ -1126,6 +1134,7 @@ def _c_serialize(context, self): _c(' unsigned int xcb_buffer_len = 0;')
_c(' unsigned int xcb_block_len = 0;')
_c(' unsigned int xcb_pad = 0;')
+ _c(' unsigned int xcb_align_to;')
elif 'sizeof' == context:
param_names = [p[2] for p in params]
@@ -1170,6 +1179,7 @@ def _c_serialize(context, self): _c(' unsigned int xcb_buffer_len = 0;')
_c(' unsigned int xcb_block_len = 0;')
_c(' unsigned int xcb_pad = 0;')
+ _c(' unsigned int xcb_align_to;')
_c('')
for t in temp_vars:
diff --git a/libxcb/src/xcb_auth.c b/libxcb/src/xcb_auth.c index 5cfa9dc7c..dbfd24657 100644 --- a/libxcb/src/xcb_auth.c +++ b/libxcb/src/xcb_auth.c @@ -30,6 +30,12 @@ #include <sys/param.h>
#include <unistd.h>
#include <stdlib.h>
+#include <arpa/inet.h>
+
+#ifdef __INTERIX
+/* _don't_ ask. interix has INADDR_LOOPBACK in here. */
+#include <rpc/types.h>
+#endif
#ifdef _WIN32
#include "xcb_windefs.h"
diff --git a/libxcb/src/xcb_util.c b/libxcb/src/xcb_util.c index b999ea528..499c54904 100644 --- a/libxcb/src/xcb_util.c +++ b/libxcb/src/xcb_util.c @@ -34,6 +34,7 @@ #include <stddef.h>
#include <unistd.h>
#include <string.h>
+#include <arpa/inet.h>
#ifdef _WIN32
#include "xcb_windefs.h"
@@ -265,6 +266,18 @@ static int _xcb_socket(int family, int type, int proto) }
+static int _xcb_do_connect(int fd, const struct sockaddr* addr, int addrlen) {
+ char on = 1;
+
+ if(fd < 0)
+ return -1;
+
+ setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
+ setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
+
+ return connect(fd, addr, addrlen);
+}
+
#ifdef WIN32
int InitWSA(void)
{
@@ -285,10 +298,12 @@ int InitWSA(void) static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port)
{
int fd = -1;
+#if HAVE_GETADDRINFO
struct addrinfo hints;
char service[6]; /* "65535" with the trailing '\0' */
struct addrinfo *results, *addr;
char *bracket;
+#endif
if (protocol && strcmp("tcp",protocol) && strcmp("inet",protocol)
#ifdef AF_INET6
@@ -300,10 +315,8 @@ static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short if (*host == '\0')
host = "localhost";
+#if HAVE_GETADDRINFO
memset(&hints, 0, sizeof(hints));
-#ifdef AI_ADDRCONFIG
- hints.ai_flags |= AI_ADDRCONFIG;
-#endif
#ifdef AI_NUMERICSERV
hints.ai_flags |= AI_NUMERICSERV;
#endif
@@ -334,19 +347,42 @@ static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short for(addr = results; addr; addr = addr->ai_next)
{
fd = _xcb_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
- if(fd >= 0) {
- char on = 1;
- setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
- setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
+ if (_xcb_do_connect(fd, addr->ai_addr, addr->ai_addrlen) >= 0)
+ break;
+ close(fd);
+ fd = -1;
+ }
+ freeaddrinfo(results);
+ return fd;
+#else
+ {
+ struct hostent* _h;
+ struct sockaddr_in _s;
+ struct in_addr ** _c;
+
+ if((_h = gethostbyname(host)) == NULL)
+ return -1;
- if (connect(fd, addr->ai_addr, addr->ai_addrlen) >= 0)
+ _c = (struct in_addr**)_h->h_addr_list;
+ fd = -1;
+
+ while(*_c) {
+ _s.sin_family = AF_INET;
+ _s.sin_port = htons(port);
+ _s.sin_addr = *(*_c);
+
+ fd = _xcb_socket(_s.sin_family, SOCK_STREAM, 0);
+ if(_xcb_do_connect(fd, (struct sockaddr*)&_s, sizeof(_s)) >= 0)
break;
+
close(fd);
fd = -1;
+ ++_c;
}
+
+ return fd;
}
- freeaddrinfo(results);
- return fd;
+#endif
}
#ifndef _WIN32
|