From: Chia-I Wu Date: Fri, 29 Oct 2010 07:20:18 +0000 (+0800) Subject: Workaround an xcb-dri2 bug. X-Git-Tag: 0.85.0~397 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1b6c0ed95a8b9c98bca0728cdf56159cc57fec45;p=platform%2Fupstream%2Fwayland.git Workaround an xcb-dri2 bug. xcb_dri2_connect_device_name generated by xcb-proto 1.6 is broken. It only works when the length of the driver name is a multiple of 4. --- diff --git a/compositor/compositor-x11.c b/compositor/compositor-x11.c index b7a9d0d..f55b30e 100644 --- a/compositor/compositor-x11.c +++ b/compositor/compositor-x11.c @@ -16,6 +16,10 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include @@ -152,9 +156,22 @@ dri2_connect(struct x11_compositor *c) return -1; } +#ifdef XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN + { + char *driver_name, *device_name; + + driver_name = xcb_dri2_connect_driver_name (connect); + device_name = driver_name + + ((connect->driver_name_length + 3) & ~3); + snprintf(path, sizeof path, "%.*s", + xcb_dri2_connect_device_name_length (connect), + device_name); + } +#else snprintf(path, sizeof path, "%.*s", xcb_dri2_connect_device_name_length (connect), xcb_dri2_connect_device_name (connect)); +#endif free(connect); fd = open(path, O_RDWR); diff --git a/configure.ac b/configure.ac index b510b51..f57e2bd 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,11 @@ AC_CHECK_LIB(expat, XML_ParserCreate, [EXPAT_LIBS="-lexpat"], [AC_MSG_ERROR([Can't find expat library. Please install expat.])]) AC_SUBST(EXPAT_LIBS) +# workaround a bug in xcb-dri2 generated by xcb-proto 1.6 +AC_CHECK_LIB(xcb-dri2, xcb_dri2_connect_alignment_pad, [], + [AC_DEFINE([XCB_DRI2_CONNECT_DEVICE_NAME_BROKEN], [1], + [Define to 1 if xcb_dri2_connect_device_name is broken])]) + AC_CONFIG_FILES([wayland/wayland-server.pc wayland/wayland-client.pc Makefile