From 1a90d395ebb1b3caf5c698b358d34ca6bbe775aa Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Tue, 31 Jan 2012 07:52:37 +0000 Subject: Update to xserver 1.11.4. tested by krw@, shadchin@. --- xserver/ChangeLog | 452 +++++++++++++++++++++++++++++++ xserver/Xext/security.c | 4 +- xserver/Xext/shm.c | 2 +- xserver/Xext/xace.c | 4 + xserver/Xext/xselinux_ext.c | 6 - xserver/Xext/xselinux_hooks.c | 4 +- xserver/Xi/exevents.c | 2 +- xserver/Xi/xichangehierarchy.c | 15 + xserver/Xi/xipassivegrab.c | 10 +- xserver/configure | 151 +++++++++-- xserver/configure.ac | 19 +- xserver/dix/dispatch.c | 33 ++- xserver/dix/dixutils.c | 7 +- xserver/dix/events.c | 2 +- xserver/dix/extension.c | 14 - xserver/hw/dmx/examples/Makefile.am | 56 ++-- xserver/hw/dmx/examples/Makefile.in | 85 +++--- xserver/hw/kdrive/linux/keyboard.c | 6 +- xserver/hw/kdrive/linux/ms.c | 4 +- xserver/hw/kdrive/linux/ps2.c | 4 +- xserver/hw/xfree86/common/xf86Xinput.c | 11 +- xserver/hw/xquartz/bundle/Info.plist.cpp | 8 +- xserver/include/dixstruct.h | 1 + xserver/include/extension.h | 2 - xserver/mi/mibitblt.c | 2 +- xserver/os/backtrace.c | 6 +- xserver/os/client.c | 118 ++++++-- xserver/record/record.c | 8 +- xserver/render/animcur.c | 3 + xserver/xfixes/cursor.c | 4 +- 30 files changed, 856 insertions(+), 187 deletions(-) (limited to 'xserver') diff --git a/xserver/ChangeLog b/xserver/ChangeLog index ab079f2a3..29c791133 100644 --- a/xserver/ChangeLog +++ b/xserver/ChangeLog @@ -1,3 +1,455 @@ +commit e597f0119cd69b6d9edf86d06d941468f90d8e6d +Author: Jeremy Huddleston +Date: Fri Jan 27 21:07:17 2012 -0800 + + configure.ac: 1.11.4 + + Signed-off-by: Jeremy Huddleston + +commit 6c491463ee7a3637c8aae7ddae9625b36b792078 +Author: Jeremy Huddleston +Date: Fri Jan 20 23:54:58 2012 -0800 + + 1.11.3.902 (1.11.4 RC2) + + Signed-off-by: Jeremy Huddleston + +commit b747a91485184649c05aba6fa10734f70e926032 +Author: Jeremy Huddleston +Date: Wed Jan 18 11:47:21 2012 -0800 + + XQuartz: Bump bundle version to 2.7.1 + + Signed-off-by: Jeremy Huddleston + +commit a1ed67fa0551ee2b39d002d3b786a2017b37c7ac +Author: Peter Hutterer +Date: Fri Jan 6 13:20:45 2012 +1000 + + render: don't bother with animated cursors on floating slaves (#39989) + + X.Org Bug 39989 + + Signed-off-by: Peter Hutterer + Reviewed-by: Jeremy Huddleston + (cherry picked from commit bbb6b8c834e0e1491ca14403b5d0840dd14380d3) + +commit f89c39e6c9e20ffc3c1ae228ee601c2ab9007ff4 +Author: Peter Hutterer +Date: Mon Jan 9 15:04:10 2012 +1000 + + dix: Update pointer limits for floating devices too (#43635) + + When the screen is restructured, the pointer limits need to be reset for + floating slave devices as well, not just for master pointers. Only skip + devices that don't have a cursor (attached slaves and keyboard) + + Bug reproducer: float an absolute slave device, rotate the screen - the + device is now confined to a section of the screen only. + + X.Org Bug 43635 + + Signed-off-by: Peter Hutterer + Reviewed-by: Chase Douglas + (cherry picked from commit 35bd77e9d0701daae87d681900d749604fc6471f) + +commit dea9377a257a402b2c7fe4a96c958d951a7d4579 +Author: Zhigang Gong +Date: Wed Jan 4 07:01:19 2012 +0000 + + mi/mibitblt: Fix an overflow bug of bit shift. + + When depth equal to 32 and planeMask equal to 0, the overflow will + occur and cause the pixmap can't be cleared. There are some test + cases in XTS hit this bug, and this fix can eliminate the corresponding + failures. + + Signed-off-by: Zhigang Gong + Reviewed-by: Adam Jackson + Signed-off-by: Keith Packard + (cherry picked from commit f4956faab9ccf9aba6cf9603f4489f5dad19a347) + +commit d2db5100b1bafeeea8c1febd390631c8f8abb094 +Author: Alan Coopersmith +Date: Fri Oct 28 21:29:50 2011 -0700 + + Convert DetermineClientCmd to use strdup instead of malloc+strncpy + + *cmdname is initialized to NULL earlier in the function, so it's + okay to overwrite it with NULL if strdup fails, don't need that + extra check. + + Signed-off-by: Alan Coopersmith + Reviewed-by: Jeremy Huddleston + (cherry picked from commit 780133f9ae7fada462714b47e79d26075bbd9abe) + +commit 5b28bcb340e279e7f4e76617e86b439092367690 +Author: Adam Jackson +Date: Tue Dec 13 21:23:12 2011 -0500 + + dix: Tune dixLookupDrawable for success + + The vast vast vast majority of resource lookups are successful. Move some + work to the error paths so we don't punish success. + + Before: + 40000000 trep @ 0.0009 msec (1109091.3/sec): PutImage 10x10 square + 60000000 trep @ 0.0005 msec (2072652.2/sec): ShmPutImage 10x10 square + + After: + 40000000 trep @ 0.0009 msec (1148346.9/sec): PutImage 10x10 square + 60000000 trep @ 0.0005 msec (2091666.1/sec): ShmPutImage 10x10 square + + Reviewed-by: Alan Coopersmith + Signed-off-by: Adam Jackson + (cherry picked from commit 8f9bdfd293ad8e45755efe8d764b4dcc2a724f51) + +commit e1ea93fec93b13d18df4451210aaaf322b769b6a +Author: Adam Jackson +Date: Tue Dec 13 20:23:40 2011 -0500 + + dix: Tune dtrace hooks around Dispatch + + Don't call LookupMajorName if the hooks aren't active, it's quite expensive. + + Before: + 40000000 trep @ 0.0009 msec (1087458.5/sec): PutImage 10x10 square + 60000000 trep @ 0.0005 msec (2012238.6/sec): ShmPutImage 10x10 square + + After: + 40000000 trep @ 0.0009 msec (1109091.3/sec): PutImage 10x10 square + 60000000 trep @ 0.0005 msec (2072652.2/sec): ShmPutImage 10x10 square + + Reviewed-by: Alan Coopersmith + Signed-off-by: Adam Jackson + (cherry picked from commit 83a98543b58c661a22574a6f8d8f9d777c0955b8) + +commit 9eaa0b5c89f645c50ea90e07e8b49ebacf4349a0 +Author: Adam Jackson +Date: Tue Dec 13 21:00:05 2011 -0500 + + xace: ricer tuning for XaceHook + + gcc doesn't want to hoist the check for XaceHooks[hook] != NULL above the + varargs code for some reason, so do it ourselves. + + Before: + 40000000 trep @ 0.0010 msec (1050420.2/sec): PutImage 10x10 square + 60000000 trep @ 0.0005 msec (1921147.6/sec): ShmPutImage 10x10 square + + After: + 40000000 trep @ 0.0009 msec (1087458.5/sec): PutImage 10x10 square + 60000000 trep @ 0.0005 msec (2012238.6/sec): ShmPutImage 10x10 square + + Reviewed-by: Alan Coopersmith + Signed-off-by: Adam Jackson + (cherry picked from commit 11977fab546da35d579ebe285e3c26864007805e) + +commit a3b6ecc893e17028cfbe16d8d7981c9037fc0766 +Author: Peter Hutterer +Date: Tue Jan 3 10:45:45 2012 +1000 + + xfree86: split warning about missing identifier or input driver + + Check for identifier first and bail if it's missing (also remove the current + identifier check after we've already bailed due to missing identifiers) + + If a driver is missing, warn but also say that we may have added this device + already. I see too many bugreports with incorrectly shortened log files. + + Signed-off-by: Peter Hutterer + Reviewed-by: Cyril Brulebois + (cherry picked from commit 75953ccb9e9e5f1dbbaa44c714716a0049e22aae) + +commit 4a339afc586d55a9a248b893f007219d79c72600 +Author: Julien Cristau +Date: Fri Dec 30 20:41:25 2011 +0100 + + os: don't ignore failure from dladdr + + If dladdr returns 0, don't go and use the returned Dl_info, it may + contain garbage. + + X.Org bug#44315 + + Reported-and-tested-by: Cyril Brulebois + Reviewed-by: Jeremy Huddleston + Reviewed-by: Cyril Brulebois + Signed-off-by: Julien Cristau + (cherry picked from commit 6269977c91071e0ea16ca5b4b8e15fd6db0b6fcf) + +commit 9a4be7e99f0e832df87b8e7fb548793dd4b52717 +Author: Matthieu Herrb +Date: Mon Jan 2 13:23:59 2012 +0000 + + Add OpenBSD support to DetermineClientCmd() + + Uses kvm_getargv() from libkvm. + + Signed-off-by: Matthieu Herrb + Reviewed-by: Adam Jackson + Signed-off-by: Keith Packard + (cherry picked from commit 6d6d4cb6043905d850834946e9bfc526ed5a9ef7) + +commit 8046717d720c1bbbf02ba986622bc96c6b52a36c +Author: Alan Coopersmith +Date: Sat Dec 24 10:00:56 2011 -0800 + + Add Solaris support to DetermineClientCmd + + Uses /proc/pid/psinfo to read command & partial arguments. + + Moves cmdsize & argsize variables into non-Solaris #else clause + to avoid unused variable warnings. + + Fixes format mismatch errors when building with DEBUG defined on + a 64-bit platform (where Mask is defined as CARD32). + + Signed-off-by: Alan Coopersmith + Reviewed-by: Rami Ylimäki + Signed-off-by: Keith Packard + (cherry picked from commit cfc4c3d7fa8bd4da4c08b2ab8e6f85435f75353a) + +commit cea9f9f273cb525cb5daa2d2819d3f635582cb24 +Author: Jeremy Huddleston +Date: Fri Jan 6 22:01:03 2012 -0800 + + configure.ac: 1.11.3.901 (1.11.4 RC1) + + Signed-off-by: Jeremy Huddleston + +commit b15be8547d4d204f3e498f52d86713a76766e871 +Author: Jeremy Huddleston +Date: Fri Jan 6 22:12:14 2012 -0800 + + Xi: Fix mishandled git merge + + Signed-off-by: Jeremy Huddleston + +commit 82e0ae042379181eb143431e1413084432a17079 +Merge: f9b00c2 4e4bb31 +Author: Jeremy Huddleston +Date: Mon Jan 2 20:58:22 2012 -0500 + + Merge remote-tracking branch 'whot/server-1.11-branch' into server-1.11-branch + +commit 4e4bb319a4f9510277557f65676948cd1db10e93 +Author: Carlos Garnacho +Date: Tue Dec 13 15:41:23 2011 +0100 + + Xi: assign correct grab_mode/other_device_mode in XI2 passive grabs + + CreateGrab() expects the keyboard mode to be stored in grab_mode, and the + pointer mode in other_device_mode, so respect this in passive XI2 grabs, + and switch modes if needed. + + Signed-off-by: Carlos Garnacho + Signed-off-by: Peter Hutterer + Reviewed-by: Chase Douglas + (cherry picked from commit 5b169cb695bd450d7f64e3800f00c9237ee67f96) + +commit 8c73f6bcbdc04380cc41d9f6dc7e849c7c4f9298 +Author: Alan Coopersmith +Date: Thu Dec 8 21:52:07 2011 -0800 + + Change disable_clientpointer return type to void + + It doesn't return anything, nor does it's caller expect it to. + + Fixes Solaris Studio compiler error: + "xichangehierarchy.c", line 214: Function has no return statement : disable_clientpointer + + Signed-off-by: Alan Coopersmith + Reviewed-by: Peter Hutterer + Signed-off-by: Keith Packard + (cherry picked from commit 372a6f10dc2d74d2d179e8b92449e9b8636a99ef) + +commit ae4272a5742119b10074a542d0dcd4c493cb83e4 +Author: Peter Hutterer +Date: Wed Nov 30 09:06:06 2011 +1000 + + xfixes: don't dereference a NULL cursor + + If the new cursor is the NULL cursor, don't dereference it and use zeros + instead. + + Signed-off-by: Peter Hutterer + Reviewed-by: Jeremy Huddleston + (cherry picked from commit 1ab50be938524dcd4a9e56d27e3b96a27c2db2c0) + +commit 20efd3c15829d8fbb3610d5af41b67a627e63d21 +Author: Peter Hutterer +Date: Tue Nov 29 16:15:37 2011 +1000 + + Xi: when removing a device, reset ClientPointers where needed + + if a client had the to-be-removed device as ClientPointer, reset to NULL. + + Fixes #43165 + + Signed-off-by: Peter Hutterer + Reviewed-by: Jeremy Huddleston + (cherry picked from commit d2ebbcdaf6b13d70eee704b1764ff349e1be22a0) + +commit cf296f2eeffe4b438e9378268f84a1f63c555e52 +Author: Peter Hutterer +Date: Wed Nov 9 15:31:10 2011 +1000 + + Xext: don't swap CARD8 in SProcSELinuxQueryVersion + + xselinux_ext.c: In function 'SELinuxSendItemsToClient': + xselinux_ext.c:340:16: warning: unused variable 'n' [-Wunused-variable] + xselinux_ext.c: In function 'SProcSELinuxQueryVersion': + xselinux_ext.c:532:62: error: call to 'wrong_size' declared with attribute + error: wrong sized variable passed to swap + xselinux_ext.c:533:62: error: call to 'wrong_size' declared with attribute + error: wrong sized variable passed to swap + + Signed-off-by: Peter Hutterer + Reviewed-by: Julien Cristau + (cherry picked from commit bb4aa1f263ad38c175bfda3b7e6c325260ce3f28) + + Conflicts: + + Xext/xselinux_ext.c + +commit 4b386610243b1a30db7e4cdb89cb43012198407d +Author: Peter Hutterer +Date: Fri Dec 16 12:41:08 2011 +1000 + + dix: button state must show the logical buttons, not physical buttons + + If the device is mapped 3 2 1, a click on physical button 1 sends a button 3 + press, but the state was set for button 1. Fix this, the state must be set + for that button's logical mapping. + + https://bugzilla.gnome.org/show_bug.cgi?id=655928 + + Signed-off-by: Peter Hutterer + (cherry picked from commit 9567d21e85b99febe805263a4d93b15fd1f7ab42) + + Conflicts: + + dix/inpututils.c + +commit f9b00c2aba496fe470c24d0f8d3e3d0e3b05aa65 +Author: Peter Hutterer +Date: Tue Nov 29 16:15:37 2011 +1000 + + Xi: when removing a device, reset ClientPointers where needed + + if a client had the to-be-removed device as ClientPointer, reset to NULL. + + Fixes #43165 + + Signed-off-by: Peter Hutterer + Reviewed-by: Jeremy Huddleston + (cherry picked from commit d2ebbcdaf6b13d70eee704b1764ff349e1be22a0) + +commit e4984b3023351b5fcc506f4a196ad699db8b0535 +Author: Peter Hutterer +Date: Wed Nov 30 09:06:06 2011 +1000 + + xfixes: don't dereference a NULL cursor + + If the new cursor is the NULL cursor, don't dereference it and use zeros + instead. + + Signed-off-by: Peter Hutterer + Reviewed-by: Jeremy Huddleston + (cherry picked from commit 1ab50be938524dcd4a9e56d27e3b96a27c2db2c0) + +commit 625d1088192a9ad972c20fbdbcb4bb9fda979157 +Author: Peter Hutterer +Date: Fri Dec 16 09:15:25 2011 -0500 + + dmx: force -fno-strict-aliasing for xinput example + + Compiler warning: + xinput.c:272: warning: dereferencing pointer 'e' does break strict-aliasing + rules + + The code itself is the usual XInput client-side code: + XEvent event; + XDeviceMotionEvent *e = (XDeviceMotionEvent *)&event; + XNextEvent(display, &event); + printf("%d\n", e->type); + + Since XDeviceMotionEvent is not guaranteed the same size as XEvent, clients + must use pointer aliasing as above when using the XNextEvent API. Disable + strict aliasing for this example. + + Reviewed-by: Peter Hutterer + Reviewed-by: Gaetan Nadon + Signed-off-by: Peter Hutterer + Signed-off-by: Gaetan Nadon + Signed-off-by: Keith Packard + (cherry picked from commit 3aca8199405cff5097ee5813605ec78b5ae44a43) + +commit 53e347b22bb79043243e25891cd7d6f374a8aa23 +Author: Keith Packard +Date: Tue Nov 8 10:13:15 2011 -0800 + + Save major/minor opcodes in ClientRec for RecordAReply + + The record extension needs the major and minor opcodes in the reply + hook, but the request buffer may have been freed by the time the hook + is invoked. Saving the request major and minor codes as the request is + executed avoids fetching from the defunct request buffer. + + This patch also eliminates the public MinorOpcodeOfRequest function, + inlining it into Dispatch. Usages of that function have been replaced + with direct access to the new ClientRec field. + + Signed-off-by: Keith Packard + Reviewed-by: Jamey Sharp + (cherry picked from commit fb22a408c69a84f81905147de9e82cf66ffb6eb2) + + Conflicts: + + include/extension.h + +commit b736f8c92bae7773ff6e1fca886f9ccc50156488 +Author: Julien Cristau +Date: Sat Nov 5 13:00:07 2011 +0100 + + Fix ShmPutImage for XYBitmap + + We can't call CopyArea in that case because the image has depth 1, which + might not match the target drawable, so we might overrun the shm + segment. Commit 11817a881cb93a89788105d1e575a468f2a8d27c apparently + fixed a similar bug for XYPixmap, but missed the bitmap case. + + Fixes: http://bugs.debian.org/629611 + + Thanks to Alan Curry for diagnosing this and providing a test case. + + Reported-and-tested-by: Alan Curry + Reviewed-by: Peter Harris + Signed-off-by: Julien Cristau + (cherry picked from commit 08ec4da6a7617637914bee1636858474213cf39d) + +commit b2a4c09507b267495ea5e4c2e05373b323c80edf +Author: Jeremy Huddleston +Date: Sat Dec 17 12:56:59 2011 -0800 + + kdrive/linux: Fix compilation with -Werror=int-to-pointer-cast -Werror=pointer-to-int-cast + + Reported-by: Arkadiusz Miśkiewicz + Signed-off-by: Jeremy Huddleston + Reviewed-by: Jamey Sharp + (cherry picked from commit 1deede3c48d5ac91f50774c79f02afc6e036614e) + +commit beaa7ad2ec45811e16722283a8b557a08e91ef18 +Author: Jeremy Huddleston +Date: Sat Dec 17 12:25:26 2011 -0800 + + configure.ac: Make Xephyr dependency error message more informative + + Signed-off-by: Jeremy Huddleston + Reviewed-by: Jamey Sharp + (cherry picked from commit d0170d54c71fc761b8f1ae7a0e555dc2ca23cf9c) + commit 41524dd61020f2a446ec54643fa17aa791338cac Author: Jeremy Huddleston Date: Fri Dec 16 17:47:46 2011 -0800 diff --git a/xserver/Xext/security.c b/xserver/Xext/security.c index 8673880d1..aa78e540d 100644 --- a/xserver/Xext/security.c +++ b/xserver/Xext/security.c @@ -148,9 +148,7 @@ SecurityLabelInitial(void) static _X_INLINE const char * SecurityLookupRequestName(ClientPtr client) { - int major = ((xReq *)client->requestBuffer)->reqType; - int minor = MinorOpcodeOfRequest(client); - return LookupRequestName(major, minor); + return LookupRequestName(client->majorOp, client->minorOp); } diff --git a/xserver/Xext/shm.c b/xserver/Xext/shm.c index 4141a8fe6..d2ae08772 100644 --- a/xserver/Xext/shm.c +++ b/xserver/Xext/shm.c @@ -482,7 +482,7 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC, { PixmapPtr pPixmap; - if (format == ZPixmap || depth == 1) { + if (format == ZPixmap || (format == XYPixmap && depth == 1)) { pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth, BitsPerPixel(depth), PixmapBytePad(w, depth), diff --git a/xserver/Xext/xace.c b/xserver/Xext/xace.c index c757cad05..ef69fe363 100644 --- a/xserver/Xext/xace.c +++ b/xserver/Xext/xace.c @@ -101,6 +101,10 @@ int XaceHook(int hook, ...) } u; int *prv = NULL; /* points to return value from callback */ va_list ap; /* argument list */ + + if (!XaceHooks[hook]) + return Success; + va_start(ap, hook); /* Marshal arguments for passing to callback. diff --git a/xserver/Xext/xselinux_ext.c b/xserver/Xext/xselinux_ext.c index 374571c4b..85ca2dc8e 100644 --- a/xserver/Xext/xselinux_ext.c +++ b/xserver/Xext/xselinux_ext.c @@ -528,12 +528,6 @@ ProcSELinuxDispatch(ClientPtr client) static int SProcSELinuxQueryVersion(ClientPtr client) { - REQUEST(SELinuxQueryVersionReq); - int n; - - REQUEST_SIZE_MATCH(SELinuxQueryVersionReq); - swaps(&stuff->client_major, n); - swaps(&stuff->client_minor, n); return ProcSELinuxQueryVersion(client); } diff --git a/xserver/Xext/xselinux_hooks.c b/xserver/Xext/xselinux_hooks.c index f1d8e5d2f..0d4c9ab11 100644 --- a/xserver/Xext/xselinux_hooks.c +++ b/xserver/Xext/xselinux_hooks.c @@ -263,8 +263,8 @@ SELinuxAudit(void *auditdata, if (client) { REQUEST(xReq); if (stuff) { - major = stuff->reqType; - minor = MinorOpcodeOfRequest(client); + major = client->majorOp; + minor = client->minorOp; } } if (audit->id) diff --git a/xserver/Xi/exevents.c b/xserver/Xi/exevents.c index dcb496fd4..9d43564f8 100644 --- a/xserver/Xi/exevents.c +++ b/xserver/Xi/exevents.c @@ -927,7 +927,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device) for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++) if (BitIsOn(mouse->button->down, i)) - SetBit(event->buttons, i); + SetBit(event->buttons, mouse->button->map[i]); if (kbd && kbd->key) { diff --git a/xserver/Xi/xichangehierarchy.c b/xserver/Xi/xichangehierarchy.c index 96ead6fcd..3facadd92 100644 --- a/xserver/Xi/xichangehierarchy.c +++ b/xserver/Xi/xichangehierarchy.c @@ -202,6 +202,19 @@ unwind: return rc; } +static void +disable_clientpointer(DeviceIntPtr dev) +{ + int i; + + for (i = 0; i < currentMaxClients; i++) + { + ClientPtr client = clients[i]; + if (client && client->clientPtr == dev) + client->clientPtr = NULL; + } +} + static int remove_master(ClientPtr client, xXIRemoveMasterInfo *r, int flags[MAXDEVICES]) @@ -252,6 +265,8 @@ remove_master(ClientPtr client, xXIRemoveMasterInfo *r, if (rc != Success) goto unwind; + disable_clientpointer(ptr); + /* Disabling sends the devices floating, reattach them if * desired. */ if (r->return_mode == XIAttachToMaster) diff --git a/xserver/Xi/xipassivegrab.c b/xserver/Xi/xipassivegrab.c index 5cdd8aca6..af46282c8 100644 --- a/xserver/Xi/xipassivegrab.c +++ b/xserver/Xi/xipassivegrab.c @@ -140,11 +140,17 @@ ProcXIPassiveGrabDevice(ClientPtr client) memset(¶m, 0, sizeof(param)); param.grabtype = GRABTYPE_XI2; param.ownerEvents = stuff->owner_events; - param.this_device_mode = stuff->grab_mode; - param.other_devices_mode = stuff->paired_device_mode; param.grabWindow = stuff->grab_window; param.cursor = stuff->cursor; + if (IsKeyboardDevice(dev)) { + param.this_device_mode = stuff->grab_mode; + param.other_devices_mode = stuff->paired_device_mode; + } else { + param.this_device_mode = stuff->paired_device_mode; + param.other_devices_mode = stuff->grab_mode; + } + if (stuff->cursor != None) { status = dixLookupResourceByType(&tmp, stuff->cursor, diff --git a/xserver/configure b/xserver/configure index 6eaada34b..c7beed901 100644 --- a/xserver/configure +++ b/xserver/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.62 for xorg-server 1.11.3. +# Generated by GNU Autoconf 2.62 for xorg-server 1.11.4. # # Report bugs to . # @@ -676,8 +676,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='xorg-server' PACKAGE_TARNAME='xorg-server' -PACKAGE_VERSION='1.11.3' -PACKAGE_STRING='xorg-server 1.11.3' +PACKAGE_VERSION='1.11.4' +PACKAGE_STRING='xorg-server 1.11.4' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' ac_unique_file="Makefile.am" @@ -2016,7 +2016,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xorg-server 1.11.3 to adapt to many kinds of systems. +\`configure' configures xorg-server 1.11.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2086,7 +2086,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xorg-server 1.11.3:";; + short | recursive ) echo "Configuration of xorg-server 1.11.4:";; esac cat <<\_ACEOF @@ -2480,7 +2480,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xorg-server configure 1.11.3 +xorg-server configure 1.11.4 generated by GNU Autoconf 2.62 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -2494,7 +2494,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xorg-server $as_me 1.11.3, which was +It was created by xorg-server $as_me 1.11.4, which was generated by GNU Autoconf 2.62. Invocation command line was $ $0 $@ @@ -2860,7 +2860,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -RELEASE_DATE="2011-12-16" +RELEASE_DATE="2012-01-27" am__api_version="1.9" ac_aux_dir= @@ -3145,7 +3145,7 @@ fi # Define the identity of the package. PACKAGE='xorg-server' - VERSION='1.11.3' + VERSION='1.11.4' cat >>confdefs.h <<_ACEOF @@ -25039,6 +25039,13 @@ _ACEOF else CLIENTIDS=no fi +if test "x$CLIENTIDS" = xyes; then + case $host_os in + openbsd*) + SYS_LIBS="$SYS_LIBS -lkvm" + ;; + esac +fi { $as_echo "$as_me:$LINENO: result: $CLIENTIDS" >&5 $as_echo "$CLIENTIDS" >&6; } @@ -32864,6 +32871,7 @@ _ACEOF XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS $LIBGL libdrm" fi + if test "x$XEPHYR" = xauto; then pkg_failed=no { $as_echo "$as_me:$LINENO: checking for XEPHYR" >&5 @@ -32925,23 +32933,128 @@ fi { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } - xephyr="no" + XEPHYR="no" elif test $pkg_failed = untried; then - xephyr="no" + XEPHYR="no" else XEPHYR_CFLAGS=$pkg_cv_XEPHYR_CFLAGS XEPHYR_LIBS=$pkg_cv_XEPHYR_LIBS { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } - xephyr="yes" + XEPHYR="yes" +fi + elif test "x$XEPHYR" = xyes ; then + +pkg_failed=no +{ $as_echo "$as_me:$LINENO: checking for XEPHYR" >&5 +$as_echo_n "checking for XEPHYR... " >&6; } + +if test -n "$PKG_CONFIG"; then + if test -n "$XEPHYR_CFLAGS"; then + pkg_cv_XEPHYR_CFLAGS="$XEPHYR_CFLAGS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$XEPHYR_REQUIRED_LIBS\"") >&5 + ($PKG_CONFIG --exists --print-errors "$XEPHYR_REQUIRED_LIBS") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_XEPHYR_CFLAGS=`$PKG_CONFIG --cflags "$XEPHYR_REQUIRED_LIBS" 2>/dev/null` +else + pkg_failed=yes fi - if test "x$XEPHYR" = xauto; then - XEPHYR=$xephyr fi - if test "x$XEPHYR" = xyes && test "x$xephyr" = xno; then - { { $as_echo "$as_me:$LINENO: error: Xephyr dependencies missing" >&5 -$as_echo "$as_me: error: Xephyr dependencies missing" >&2;} +else + pkg_failed=untried +fi +if test -n "$PKG_CONFIG"; then + if test -n "$XEPHYR_LIBS"; then + pkg_cv_XEPHYR_LIBS="$XEPHYR_LIBS" + else + if test -n "$PKG_CONFIG" && \ + { ($as_echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$XEPHYR_REQUIRED_LIBS\"") >&5 + ($PKG_CONFIG --exists --print-errors "$XEPHYR_REQUIRED_LIBS") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + pkg_cv_XEPHYR_LIBS=`$PKG_CONFIG --libs "$XEPHYR_REQUIRED_LIBS" 2>/dev/null` +else + pkg_failed=yes +fi + fi +else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + XEPHYR_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$XEPHYR_REQUIRED_LIBS"` + else + XEPHYR_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$XEPHYR_REQUIRED_LIBS"` + fi + # Put the nasty error message in config.log where it belongs + echo "$XEPHYR_PKG_ERRORS" >&5 + + { { $as_echo "$as_me:$LINENO: error: Package requirements ($XEPHYR_REQUIRED_LIBS) were not met: + +$XEPHYR_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables XEPHYR_CFLAGS +and XEPHYR_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&5 +$as_echo "$as_me: error: Package requirements ($XEPHYR_REQUIRED_LIBS) were not met: + +$XEPHYR_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables XEPHYR_CFLAGS +and XEPHYR_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" >&2;} + { (exit 1); exit 1; }; } +elif test $pkg_failed = untried; then + { { $as_echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables XEPHYR_CFLAGS +and XEPHYR_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +Alternatively, you may set the environment variables XEPHYR_CFLAGS +and XEPHYR_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } +else + XEPHYR_CFLAGS=$pkg_cv_XEPHYR_CFLAGS + XEPHYR_LIBS=$pkg_cv_XEPHYR_LIBS + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi fi # Xephyr needs nanosleep() which is in librt on Solaris @@ -34588,7 +34701,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xorg-server $as_me 1.11.3, which was +This file was extended by xorg-server $as_me 1.11.4, which was generated by GNU Autoconf 2.62. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -34641,7 +34754,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -xorg-server config.status 1.11.3 +xorg-server config.status 1.11.4 configured by $0, generated by GNU Autoconf 2.62, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/xserver/configure.ac b/xserver/configure.ac index 3079f4999..a82812d9b 100644 --- a/xserver/configure.ac +++ b/xserver/configure.ac @@ -26,8 +26,8 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.57) -AC_INIT([xorg-server], 1.11.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2011-12-16" +AC_INIT([xorg-server], 1.11.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2012-01-27" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE @@ -1048,6 +1048,13 @@ if test "x$RES" = xyes && test "x$CLIENTIDS" = xyes; then else CLIENTIDS=no fi +if test "x$CLIENTIDS" = xyes; then + case $host_os in + openbsd*) + SYS_LIBS="$SYS_LIBS -lkvm" + ;; + esac +fi AC_MSG_RESULT([$CLIENTIDS]) AM_CONDITIONAL(CLIENTIDS, [test "x$CLIENTIDS" = xyes]) @@ -2097,12 +2104,10 @@ if test "$KDRIVE" = yes; then XEPHYR_REQUIRED_LIBS="$XEPHYR_REQUIRED_LIBS $LIBGL libdrm" fi - PKG_CHECK_MODULES(XEPHYR, $XEPHYR_REQUIRED_LIBS, [xephyr="yes"], [xephyr="no"]) if test "x$XEPHYR" = xauto; then - XEPHYR=$xephyr - fi - if test "x$XEPHYR" = xyes && test "x$xephyr" = xno; then - AC_MSG_ERROR([Xephyr dependencies missing]) + PKG_CHECK_MODULES(XEPHYR, $XEPHYR_REQUIRED_LIBS, [XEPHYR="yes"], [XEPHYR="no"]) + elif test "x$XEPHYR" = xyes ; then + PKG_CHECK_MODULES(XEPHYR, $XEPHYR_REQUIRED_LIBS) fi # Xephyr needs nanosleep() which is in librt on Solaris diff --git a/xserver/dix/dispatch.c b/xserver/dix/dispatch.c index f8200b188..316384abc 100644 --- a/xserver/dix/dispatch.c +++ b/xserver/dix/dispatch.c @@ -337,8 +337,6 @@ DisableLimitedSchedulingLatency(void) SmartScheduleLatencyLimited = 0; } -#define MAJOROP ((xReq *)client->requestBuffer)->reqType - void Dispatch(void) { @@ -419,22 +417,33 @@ Dispatch(void) } client->sequence++; + client->majorOp = ((xReq *)client->requestBuffer)->reqType; + client->minorOp = 0; + if (client->majorOp >= EXTENSION_BASE) { + ExtensionEntry *ext = GetExtensionEntry(client->majorOp); + if (ext) + client->minorOp = ext->MinorOpcode(client); + } #ifdef XSERVER_DTRACE - XSERVER_REQUEST_START(LookupMajorName(MAJOROP), MAJOROP, - ((xReq *)client->requestBuffer)->length, - client->index, client->requestBuffer); + if (XSERVER_REQUEST_START_ENABLED()) + XSERVER_REQUEST_START(LookupMajorName(client->majorOp), + client->majorOp, + ((xReq *)client->requestBuffer)->length, + client->index, client->requestBuffer); #endif if (result > (maxBigRequestSize << 2)) result = BadLength; else { - result = XaceHookDispatch(client, MAJOROP); + result = XaceHookDispatch(client, client->majorOp); if (result == Success) - result = (* client->requestVector[MAJOROP])(client); + result = (* client->requestVector[client->majorOp])(client); XaceHookAuditEnd(client, result); } #ifdef XSERVER_DTRACE - XSERVER_REQUEST_DONE(LookupMajorName(MAJOROP), MAJOROP, - client->sequence, client->index, result); + if (XSERVER_REQUEST_DONE_ENABLED()) + XSERVER_REQUEST_DONE(LookupMajorName(client->majorOp), + client->majorOp, client->sequence, + client->index, result); #endif if (client->noClientException != Success) @@ -444,8 +453,8 @@ Dispatch(void) } else if (result != Success) { - SendErrorToClient(client, MAJOROP, - MinorOpcodeOfRequest(client), + SendErrorToClient(client, client->majorOp, + client->minorOp, client->errorValue, result); break; } @@ -466,8 +475,6 @@ Dispatch(void) SmartScheduleLatencyLimited = 0; } -#undef MAJOROP - static int VendorRelease = VENDOR_RELEASE; static char *VendorString = VENDOR_NAME; diff --git a/xserver/dix/dixutils.c b/xserver/dix/dixutils.c index 1e3134663..cfb03974d 100644 --- a/xserver/dix/dixutils.c +++ b/xserver/dix/dixutils.c @@ -202,13 +202,12 @@ dixLookupDrawable(DrawablePtr *pDraw, XID id, ClientPtr client, int rc; *pDraw = NULL; - client->errorValue = id; - - if (id == INVALID) - return BadDrawable; rc = dixLookupResourceByClass((pointer *)&pTmp, id, RC_DRAWABLE, client, access); + if (rc != Success) + client->errorValue = id; + if (rc == BadValue) return BadDrawable; if (rc != Success) diff --git a/xserver/dix/events.c b/xserver/dix/events.c index 8e7f9c324..7d2d0e3ee 100644 --- a/xserver/dix/events.c +++ b/xserver/dix/events.c @@ -1356,7 +1356,7 @@ ScreenRestructured (ScreenPtr pScreen) for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { - if (!DevHasCursor(pDev)) + if (!IsFloating(pDev) && !DevHasCursor(pDev)) continue; /* GrabDevice doesn't have a confineTo field, so we don't need to diff --git a/xserver/dix/extension.c b/xserver/dix/extension.c index 2db5695f3..d595b8057 100644 --- a/xserver/dix/extension.c +++ b/xserver/dix/extension.c @@ -230,20 +230,6 @@ StandardMinorOpcode(ClientPtr client) return ((xReq *)client->requestBuffer)->data; } -unsigned short -MinorOpcodeOfRequest(ClientPtr client) -{ - unsigned char major; - - major = ((xReq *)client->requestBuffer)->reqType; - if (major < EXTENSION_BASE) - return 0; - major -= EXTENSION_BASE; - if (major >= NumExtensions) - return 0; - return (*extensions[major]->MinorOpcode)(client); -} - void CloseDownExtensions(void) { diff --git a/xserver/hw/dmx/examples/Makefile.am b/xserver/hw/dmx/examples/Makefile.am index 229bb57fc..d055ddc71 100644 --- a/xserver/hw/dmx/examples/Makefile.am +++ b/xserver/hw/dmx/examples/Makefile.am @@ -10,60 +10,60 @@ bin_PROGRAMS = \ noinst_PROGRAMS = xinput xtest evi res xled xbell $(EV_PROG) dmxinfo_SOURCES = dmxinfo.c -dmxinfo_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxinfo_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxinfo_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxinfo_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxwininfo_SOURCES = dmxwininfo.c -dmxwininfo_LDADD = @DMXXMUEXAMPLES_DEP_LIBS@ -dmxwininfo_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@ +dmxwininfo_LDADD = $(DMXXMUEXAMPLES_DEP_LIBS) +dmxwininfo_CFLAGS = $(DMXXMUEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxreconfig_SOURCES = dmxreconfig.c -dmxreconfig_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxreconfig_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxreconfig_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxreconfig_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxresize_SOURCES = dmxresize.c -dmxresize_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxresize_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxresize_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxresize_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxaddscreen_SOURCES = dmxaddscreen.c -dmxaddscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxaddscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxaddscreen_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxaddscreen_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxrmscreen_SOURCES = dmxrmscreen.c -dmxrmscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxrmscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxrmscreen_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxrmscreen_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxaddinput_SOURCES = dmxaddinput.c -dmxaddinput_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxaddinput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxaddinput_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxaddinput_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxrminput_SOURCES = dmxrminput.c -dmxrminput_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxrminput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxrminput_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxrminput_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xinput_SOURCES = xinput.c -xinput_LDADD = @DMXXIEXAMPLES_DEP_LIBS@ -xinput_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@ +xinput_LDADD = $(DMXXIEXAMPLES_DEP_LIBS) +xinput_CFLAGS = $(DMXXIEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xtest_SOURCES = xtest.c -xtest_LDADD = @XTSTEXAMPLES_DEP_LIBS@ -xtest_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@ +xtest_LDADD = $(XTSTEXAMPLES_DEP_LIBS) +xtest_CFLAGS = $(XTSTEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) evi_SOURCES = evi.c -evi_LDADD = @X11EXAMPLES_DEP_LIBS@ -evi_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +evi_LDADD = $(X11EXAMPLES_DEP_LIBS) +evi_CFLAGS = $(X11EXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) res_SOURCES = res.c -res_LDADD = @XRESEXAMPLES_DEP_LIBS@ -res_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@ +res_LDADD = $(XRESEXAMPLES_DEP_LIBS) +res_CFLAGS = $(XRESEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xled_SOURCES = xled.c -xled_LDADD = @X11EXAMPLES_DEP_LIBS@ -xled_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +xled_LDADD = $(X11EXAMPLES_DEP_LIBS) +xled_CFLAGS = $(X11EXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xbell_SOURCES = xbell.c -xbell_LDADD = @X11EXAMPLES_DEP_LIBS@ -xbell_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +xbell_LDADD = $(X11EXAMPLES_DEP_LIBS) +xbell_CFLAGS = $(X11EXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) ev_SOURCES = ev.c ev_LDADD = diff --git a/xserver/hw/dmx/examples/Makefile.in b/xserver/hw/dmx/examples/Makefile.in index 407f2da08..ecdfc0f44 100644 --- a/xserver/hw/dmx/examples/Makefile.in +++ b/xserver/hw/dmx/examples/Makefile.in @@ -67,49 +67,50 @@ binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_dmxaddinput_OBJECTS = dmxaddinput-dmxaddinput.$(OBJEXT) dmxaddinput_OBJECTS = $(am_dmxaddinput_OBJECTS) -dmxaddinput_DEPENDENCIES = +am__DEPENDENCIES_1 = +dmxaddinput_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxaddscreen_OBJECTS = dmxaddscreen-dmxaddscreen.$(OBJEXT) dmxaddscreen_OBJECTS = $(am_dmxaddscreen_OBJECTS) -dmxaddscreen_DEPENDENCIES = +dmxaddscreen_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxinfo_OBJECTS = dmxinfo-dmxinfo.$(OBJEXT) dmxinfo_OBJECTS = $(am_dmxinfo_OBJECTS) -dmxinfo_DEPENDENCIES = +dmxinfo_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxreconfig_OBJECTS = dmxreconfig-dmxreconfig.$(OBJEXT) dmxreconfig_OBJECTS = $(am_dmxreconfig_OBJECTS) -dmxreconfig_DEPENDENCIES = +dmxreconfig_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxresize_OBJECTS = dmxresize-dmxresize.$(OBJEXT) dmxresize_OBJECTS = $(am_dmxresize_OBJECTS) -dmxresize_DEPENDENCIES = +dmxresize_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxrminput_OBJECTS = dmxrminput-dmxrminput.$(OBJEXT) dmxrminput_OBJECTS = $(am_dmxrminput_OBJECTS) -dmxrminput_DEPENDENCIES = +dmxrminput_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxrmscreen_OBJECTS = dmxrmscreen-dmxrmscreen.$(OBJEXT) dmxrmscreen_OBJECTS = $(am_dmxrmscreen_OBJECTS) -dmxrmscreen_DEPENDENCIES = +dmxrmscreen_DEPENDENCIES = $(am__DEPENDENCIES_1) am_dmxwininfo_OBJECTS = dmxwininfo-dmxwininfo.$(OBJEXT) dmxwininfo_OBJECTS = $(am_dmxwininfo_OBJECTS) -dmxwininfo_DEPENDENCIES = +dmxwininfo_DEPENDENCIES = $(am__DEPENDENCIES_1) am_ev_OBJECTS = ev-ev.$(OBJEXT) ev_OBJECTS = $(am_ev_OBJECTS) ev_DEPENDENCIES = am_evi_OBJECTS = evi-evi.$(OBJEXT) evi_OBJECTS = $(am_evi_OBJECTS) -evi_DEPENDENCIES = +evi_DEPENDENCIES = $(am__DEPENDENCIES_1) am_res_OBJECTS = res-res.$(OBJEXT) res_OBJECTS = $(am_res_OBJECTS) -res_DEPENDENCIES = +res_DEPENDENCIES = $(am__DEPENDENCIES_1) am_xbell_OBJECTS = xbell-xbell.$(OBJEXT) xbell_OBJECTS = $(am_xbell_OBJECTS) -xbell_DEPENDENCIES = +xbell_DEPENDENCIES = $(am__DEPENDENCIES_1) am_xinput_OBJECTS = xinput-xinput.$(OBJEXT) xinput_OBJECTS = $(am_xinput_OBJECTS) -xinput_DEPENDENCIES = +xinput_DEPENDENCIES = $(am__DEPENDENCIES_1) am_xled_OBJECTS = xled-xled.$(OBJEXT) xled_OBJECTS = $(am_xled_OBJECTS) -xled_DEPENDENCIES = +xled_DEPENDENCIES = $(am__DEPENDENCIES_1) am_xtest_OBJECTS = xtest-xtest.$(OBJEXT) xtest_OBJECTS = $(am_xtest_OBJECTS) -xtest_DEPENDENCIES = +xtest_DEPENDENCIES = $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -676,47 +677,47 @@ target_alias = @target_alias@ # Requires @DMX_BUILD_USB_TRUE@EV_PROG = ev dmxinfo_SOURCES = dmxinfo.c -dmxinfo_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxinfo_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxinfo_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxinfo_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxwininfo_SOURCES = dmxwininfo.c -dmxwininfo_LDADD = @DMXXMUEXAMPLES_DEP_LIBS@ -dmxwininfo_CFLAGS = @DMXXMUEXAMPLES_DEP_CFLAGS@ +dmxwininfo_LDADD = $(DMXXMUEXAMPLES_DEP_LIBS) +dmxwininfo_CFLAGS = $(DMXXMUEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxreconfig_SOURCES = dmxreconfig.c -dmxreconfig_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxreconfig_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxreconfig_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxreconfig_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxresize_SOURCES = dmxresize.c -dmxresize_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxresize_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxresize_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxresize_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxaddscreen_SOURCES = dmxaddscreen.c -dmxaddscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxaddscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxaddscreen_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxaddscreen_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxrmscreen_SOURCES = dmxrmscreen.c -dmxrmscreen_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxrmscreen_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxrmscreen_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxrmscreen_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxaddinput_SOURCES = dmxaddinput.c -dmxaddinput_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxaddinput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxaddinput_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxaddinput_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) dmxrminput_SOURCES = dmxrminput.c -dmxrminput_LDADD = @DMXEXAMPLES_DEP_LIBS@ -dmxrminput_CFLAGS = @DMXEXAMPLES_DEP_CFLAGS@ +dmxrminput_LDADD = $(DMXEXAMPLES_DEP_LIBS) +dmxrminput_CFLAGS = $(DMXEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xinput_SOURCES = xinput.c -xinput_LDADD = @DMXXIEXAMPLES_DEP_LIBS@ -xinput_CFLAGS = @DMXXIEXAMPLES_DEP_CFLAGS@ +xinput_LDADD = $(DMXXIEXAMPLES_DEP_LIBS) +xinput_CFLAGS = $(DMXXIEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xtest_SOURCES = xtest.c -xtest_LDADD = @XTSTEXAMPLES_DEP_LIBS@ -xtest_CFLAGS = @XTSTEXAMPLES_DEP_CFLAGS@ +xtest_LDADD = $(XTSTEXAMPLES_DEP_LIBS) +xtest_CFLAGS = $(XTSTEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) evi_SOURCES = evi.c -evi_LDADD = @X11EXAMPLES_DEP_LIBS@ -evi_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +evi_LDADD = $(X11EXAMPLES_DEP_LIBS) +evi_CFLAGS = $(X11EXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) res_SOURCES = res.c -res_LDADD = @XRESEXAMPLES_DEP_LIBS@ -res_CFLAGS = @XRESEXAMPLES_DEP_CFLAGS@ +res_LDADD = $(XRESEXAMPLES_DEP_LIBS) +res_CFLAGS = $(XRESEXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xled_SOURCES = xled.c -xled_LDADD = @X11EXAMPLES_DEP_LIBS@ -xled_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +xled_LDADD = $(X11EXAMPLES_DEP_LIBS) +xled_CFLAGS = $(X11EXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) xbell_SOURCES = xbell.c -xbell_LDADD = @X11EXAMPLES_DEP_LIBS@ -xbell_CFLAGS = @X11EXAMPLES_DEP_CFLAGS@ +xbell_LDADD = $(X11EXAMPLES_DEP_LIBS) +xbell_CFLAGS = $(X11EXAMPLES_DEP_CFLAGS) $(CWARNFLAGS) ev_SOURCES = ev.c ev_LDADD = ev_CFLAGS = diff --git a/xserver/hw/kdrive/linux/keyboard.c b/xserver/hw/kdrive/linux/keyboard.c index f5f9d9b8a..ba2637b58 100644 --- a/xserver/hw/kdrive/linux/keyboard.c +++ b/xserver/hw/kdrive/linux/keyboard.c @@ -692,7 +692,7 @@ LinuxKeyboardEnable (KdKeyboardInfo *ki) return !Success; fd = LinuxConsoleFd; - ki->driverPrivate = (void *) fd; + ki->driverPrivate = (void *) (intptr_t) fd; ioctl (fd, KDGKBMODE, &LinuxKbdTrans); tcgetattr (fd, &LinuxTermios); @@ -724,7 +724,7 @@ LinuxKeyboardDisable (KdKeyboardInfo *ki) if (!ki) return; - fd = (int) ki->driverPrivate; + fd = (int) (intptr_t) ki->driverPrivate; KdUnregisterFd(ki, fd, FALSE); ioctl(fd, KDSKBMODE, LinuxKbdTrans); @@ -753,7 +753,7 @@ LinuxKeyboardLeds (KdKeyboardInfo *ki, int leds) if (!ki) return; - ioctl ((int)ki->driverPrivate, KDSETLED, leds & 7); + ioctl ((int)(intptr_t)ki->driverPrivate, KDSETLED, leds & 7); } KdKeyboardDriver LinuxKeyboardDriver = { diff --git a/xserver/hw/kdrive/linux/ms.c b/xserver/hw/kdrive/linux/ms.c index b6151cd90..176e12550 100644 --- a/xserver/hw/kdrive/linux/ms.c +++ b/xserver/hw/kdrive/linux/ms.c @@ -152,7 +152,7 @@ MsEnable (KdPointerInfo *pi) } if (KdRegisterFd (port, MsRead, pi)) return TRUE; - pi->driverPrivate = (void *)port; + pi->driverPrivate = (void *)(intptr_t)port; return Success; @@ -164,7 +164,7 @@ MsEnable (KdPointerInfo *pi) static void MsDisable (KdPointerInfo *pi) { - KdUnregisterFd (pi, (int)pi->driverPrivate, TRUE); + KdUnregisterFd (pi, (int)(intptr_t)pi->driverPrivate, TRUE); } static void diff --git a/xserver/hw/kdrive/linux/ps2.c b/xserver/hw/kdrive/linux/ps2.c index 465b963f2..b62d769f2 100644 --- a/xserver/hw/kdrive/linux/ps2.c +++ b/xserver/hw/kdrive/linux/ps2.c @@ -159,7 +159,7 @@ Ps2Enable (KdPointerInfo *pi) return BadAlloc; } - pi->driverPrivate = (void *)fd; + pi->driverPrivate = (void *)(intptr_t)fd; return Success; } @@ -168,7 +168,7 @@ Ps2Enable (KdPointerInfo *pi) static void Ps2Disable (KdPointerInfo *pi) { - KdUnregisterFd (pi, (int)pi->driverPrivate, TRUE); + KdUnregisterFd (pi, (int)(intptr_t)pi->driverPrivate, TRUE); } static void diff --git a/xserver/hw/xfree86/common/xf86Xinput.c b/xserver/hw/xfree86/common/xf86Xinput.c index ba7f85da2..5d20c32a0 100644 --- a/xserver/hw/xfree86/common/xf86Xinput.c +++ b/xserver/hw/xfree86/common/xf86Xinput.c @@ -940,15 +940,16 @@ NewInputDeviceRequest (InputOption *options, InputAttributes *attrs, pInfo->attrs = DuplicateInputAttributes(attrs); } - if (!pInfo->driver || !pInfo->name) { - xf86Msg(X_INFO, "No input driver/identifier specified (ignoring)\n"); + if (!pInfo->name) { + xf86Msg(X_INFO, "No identifier specified, ignoring this device.\n"); rval = BadRequest; goto unwind; } - if (!pInfo->name) { - xf86Msg(X_ERROR, "No device identifier specified (ignoring)\n"); - rval = BadMatch; + if (!pInfo->driver) { + xf86Msg(X_INFO, "No input driver specified, ignoring this device.\n"); + xf86Msg(X_INFO, "This device may have been added with another device file.\n"); + rval = BadRequest; goto unwind; } diff --git a/xserver/hw/xquartz/bundle/Info.plist.cpp b/xserver/hw/xquartz/bundle/Info.plist.cpp index a4b8e1926..60251f76a 100644 --- a/xserver/hw/xquartz/bundle/Info.plist.cpp +++ b/xserver/hw/xquartz/bundle/Info.plist.cpp @@ -19,9 +19,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.0 + 2.7.1 CFBundleVersion - 2.7.0 + 2.7.1 CFBundleSignature x11a CSResourcesFileMapped @@ -37,9 +37,9 @@ LSApplicationCategoryType public.app-category.utilities NSHumanReadableCopyright - © 2003-2011 Apple Inc. + © 2003-2012 Apple Inc. © 2003 XFree86 Project, Inc. -© 2003-2011 X.org Foundation, Inc. +© 2003-2012 X.org Foundation, Inc. NSMainNibFile main diff --git a/xserver/include/dixstruct.h b/xserver/include/dixstruct.h index 443e8b0ae..94eb526c5 100644 --- a/xserver/include/dixstruct.h +++ b/xserver/include/dixstruct.h @@ -123,6 +123,7 @@ typedef struct _Client { DeviceIntPtr clientPtr; ClientIdPtr clientIds; + unsigned short majorOp, minorOp; } ClientRec; /* diff --git a/xserver/include/extension.h b/xserver/include/extension.h index 29a11c300..9249951a8 100644 --- a/xserver/include/extension.h +++ b/xserver/include/extension.h @@ -52,8 +52,6 @@ _XFUNCPROTOBEGIN extern _X_EXPORT unsigned short StandardMinorOpcode(ClientPtr /*client*/); -extern _X_EXPORT unsigned short MinorOpcodeOfRequest(ClientPtr /*client*/); - extern _X_EXPORT Bool EnableDisableExtension(char *name, Bool enable); extern _X_EXPORT void EnableDisableExtensionError(char *name, Bool enable); diff --git a/xserver/mi/mibitblt.c b/xserver/mi/mibitblt.c index 49e17bde6..6e0055758 100644 --- a/xserver/mi/mibitblt.c +++ b/xserver/mi/mibitblt.c @@ -648,7 +648,7 @@ miGetImage( DrawablePtr pDraw, int sx, int sy, int w, int h, depth = pDraw->depth; if(format == ZPixmap) { - if ( (((1< +#include +#endif + +#ifdef __OpenBSD__ +#include +#include +#include + +#include +#include +#endif + /** * Try to determine a PID for a client from its connection * information. This should be called only once when new client has @@ -117,8 +131,6 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) { char path[PATH_MAX + 1]; int totsize = 0; - int cmdsize = 0; - int argsize = 0; int fd = 0; if (cmdname) @@ -129,6 +141,80 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) if (pid == -1) return; +#ifdef __sun /* Solaris */ + /* Solaris does not support /proc/pid/cmdline, but makes information + * similar to what ps shows available in a binary structure in the + * /proc/pid/psinfo file. */ + if (snprintf(path, sizeof(path), "/proc/%d/psinfo", pid) < 0) + return; + fd = open(path, O_RDONLY); + if (fd < 0) + { + ErrorF ("Failed to open %s: %s\n", path, strerror(errno)); + return; + } + else + { + psinfo_t psinfo = { 0 }; + char *sp; + + totsize = read(fd, &psinfo, sizeof(psinfo_t)); + close(fd); + if (totsize <= 0) + return; + + /* pr_psargs is the first PRARGSZ (80) characters of the command + * line string - assume up to the first space is the command name, + * since it's not delimited. While there is also pr_fname, that's + * more limited, giving only the first 16 chars of the basename of + * the file that was exec'ed, thus cutting off many long gnome + * command names, or returning "isapython2.6" for all python scripts. + */ + psinfo.pr_psargs[PRARGSZ-1] = '\0'; + sp = strchr(psinfo.pr_psargs, ' '); + if (sp) + *sp++ = '\0'; + + if (cmdname) + *cmdname = strdup(psinfo.pr_psargs); + + if (cmdargs && sp) + *cmdargs = strdup(sp); + } +#elif defined(__OpenBSD__) + /* on OpenBSD use kvm_getargv() */ + { + kvm_t *kd; + char errbuf[_POSIX2_LINE_MAX]; + char **argv; + struct kinfo_proc *kp; + size_t len = 0; + int i, n; + + kd = kvm_open(NULL, NULL, NULL, KVM_NO_FILES, errbuf); + if (kd == NULL) + return; + kp = kvm_getprocs(kd, KERN_PROC_PID, pid, sizeof(struct kinfo_proc), &n); + if (n != 1) + return; + argv = kvm_getargv(kd, kp, 0); + *cmdname = strdup(argv[0]); + i = 1; + while (argv[i] != NULL) { + len += strlen(argv[i]) + 1; + i++; + } + *cmdargs = calloc(1, len); + i = 1; + while (argv[i] != NULL) { + strlcat(*cmdargs, argv[i], len); + strlcat(*cmdargs, " ", len); + i++; + } + kvm_close(kd); + } +#else /* Linux using /proc/pid/cmdline */ + /* Check if /proc/pid/cmdline exists. It's not supported on all * operating systems. */ if (snprintf(path, sizeof(path), "/proc/%d/cmdline", pid) < 0) @@ -146,23 +232,20 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) path[totsize - 1] = '\0'; /* Contruct the process name without arguments. */ - cmdsize = strlen(path) + 1; if (cmdname) { - char *name = malloc(cmdsize); - if (name) - { - strncpy(name, path, cmdsize); - name[cmdsize - 1] = '\0'; - *cmdname = name; - } + *cmdname = strdup(path); } /* Construct the arguments for client process. */ - argsize = totsize - cmdsize; - if (cmdargs && (argsize > 0)) + if (cmdargs) { - char *args = malloc(argsize); + int cmdsize = strlen(path) + 1; + int argsize = totsize - cmdsize; + char *args = NULL; + + if (argsize > 0) + args = malloc(argsize); if (args) { int i = 0; @@ -175,6 +258,7 @@ void DetermineClientCmd(pid_t pid, const char **cmdname, const char **cmdargs) *cmdargs = args; } } +#endif } /** @@ -198,9 +282,9 @@ void ReserveClientIds(struct _Client *client) DetermineClientCmd(client->clientIds->pid, &client->clientIds->cmdname, &client->clientIds->cmdargs); DebugF("client(%lx): Reserved pid(%d).\n", - client->clientAsMask, client->clientIds->pid); + (unsigned long) client->clientAsMask, client->clientIds->pid); DebugF("client(%lx): Reserved cmdname(%s) and cmdargs(%s).\n", - client->clientAsMask, + (unsigned long) client->clientAsMask, client->clientIds->cmdname ? client->clientIds->cmdname : "NULL", client->clientIds->cmdargs ? client->clientIds->cmdargs : "NULL"); #endif /* CLIENTIDS */ @@ -222,9 +306,9 @@ void ReleaseClientIds(struct _Client *client) return; DebugF("client(%lx): Released pid(%d).\n", - client->clientAsMask, client->clientIds->pid); + (unsigned long) client->clientAsMask, client->clientIds->pid); DebugF("client(%lx): Released cmdline(%s) and cmdargs(%s).\n", - client->clientAsMask, + (unsigned long) client->clientAsMask, client->clientIds->cmdname ? client->clientIds->cmdname : "NULL", client->clientIds->cmdargs ? client->clientIds->cmdargs : "NULL"); diff --git a/xserver/record/record.c b/xserver/record/record.c index 93383cee4..778849a6e 100644 --- a/xserver/record/record.c +++ b/xserver/record/record.c @@ -554,7 +554,7 @@ RecordARequest(ClientPtr client) } else /* extension, check minor opcode */ { - int minorop = MinorOpcodeOfRequest(client); + int minorop = client->minorOp; int numMinOpInfo; RecordMinorOpPtr pMinorOpInfo = pRCAP->pRequestMinOpInfo; @@ -611,12 +611,9 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata) RecordContextPtr pContext; RecordClientsAndProtocolPtr pRCAP; int eci; - int majorop; ReplyInfoRec *pri = (ReplyInfoRec *)calldata; ClientPtr client = pri->client; - REQUEST(xReq); - majorop = stuff->reqType; for (eci = 0; eci < numEnabledContexts; eci++) { pContext = ppAllContexts[eci]; @@ -624,6 +621,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata) NULL); if (pRCAP) { + int majorop = client->majorOp; if (pContext->continuedReply) { RecordAProtocolElement(pContext, client, XRecordFromServer, @@ -644,7 +642,7 @@ RecordAReply(CallbackListPtr *pcbl, pointer nulldata, pointer calldata) } else /* extension, check minor opcode */ { - int minorop = MinorOpcodeOfRequest(client); + int minorop = client->minorOp; int numMinOpInfo; RecordMinorOpPtr pMinorOpInfo = pRCAP->pReplyMinOpInfo; assert (pMinorOpInfo); diff --git a/xserver/render/animcur.c b/xserver/render/animcur.c index 31cbab9a6..8d4a9c2ef 100644 --- a/xserver/render/animcur.c +++ b/xserver/render/animcur.c @@ -208,6 +208,9 @@ AnimCurDisplayCursor (DeviceIntPtr pDev, AnimCurScreenPtr as = GetAnimCurScreen(pScreen); Bool ret; + if (IsFloating(pDev)) + return FALSE; + Unwrap (as, pScreen, DisplayCursor); if (IsAnimCur(pCursor)) { diff --git a/xserver/xfixes/cursor.c b/xserver/xfixes/cursor.c index ecbed4016..7b01c8b52 100644 --- a/xserver/xfixes/cursor.c +++ b/xserver/xfixes/cursor.c @@ -179,9 +179,9 @@ CursorDisplayCursor (DeviceIntPtr pDev, ev.type = XFixesEventBase + XFixesCursorNotify; ev.subtype = XFixesDisplayCursorNotify; ev.window = e->pWindow->drawable.id; - ev.cursorSerial = pCursor->serialNumber; + ev.cursorSerial = pCursor ? pCursor->serialNumber : 0; ev.timestamp = currentTime.milliseconds; - ev.name = pCursor->name; + ev.name = pCursor ? pCursor->name : None; WriteEventsToClient (e->pClient, 1, (xEvent *) &ev); } } -- cgit v1.2.3