diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2011-06-24 22:52:59 -0700 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-06-27 08:45:00 +1000 |
commit | b12fa0d5ab23237bc2ac02143739ef6861e55146 (patch) | |
tree | 014389af681ee9ff1237460656996cf61cd29a4e | |
parent | 1780667854d73bbd0e0596271b09f93321cd0b1d (diff) |
Fix Solaris issues with new ABI12 init process.
Based on BSD changes in commit a22879c6779283684fe4a61543fc95179b4f5d0b
by Alexandr Shadchin
Fix segfaults when mouse device fails to open.
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/mouse.c | 2 | ||||
-rw-r--r-- | src/mouse.h | 1 | ||||
-rw-r--r-- | src/sun_mouse.c | 68 |
3 files changed, 3 insertions, 68 deletions
diff --git a/src/mouse.c b/src/mouse.c index c3498ea..d981f6f 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -253,6 +253,7 @@ static MouseProtocolRec mouseProtocols[] = { /* Misc (usually OS-specific) */ { "SysMouse", MSE_MISC, mlDefaults, PROT_SYSMOUSE }, { "WSMouse", MSE_MISC, NULL, PROT_WSMOUSE }, + { "VUID", MSE_MISC, NULL, PROT_VUID }, /* end of list */ { NULL, MSE_NONE, NULL, PROT_UNKNOWN } @@ -819,6 +820,7 @@ MousePickProtocol(InputInfoPtr pInfo, const char* device, switch (protocolID) { case PROT_WSMOUSE: + case PROT_VUID: if (osInfo->PreInit) osInfo->PreInit(pInfo, protocol, 0); break; diff --git a/src/mouse.h b/src/mouse.h index 6e63c54..2cc588a 100644 --- a/src/mouse.h +++ b/src/mouse.h @@ -78,6 +78,7 @@ typedef enum { PROT_AUTO, PROT_SYSMOUSE, PROT_WSMOUSE, + PROT_VUID, PROT_NUMPROTOS /* This must always be last. */ } MouseProtocolID; diff --git a/src/sun_mouse.c b/src/sun_mouse.c index dd545c7..b0d53e8 100644 --- a/src/sun_mouse.c +++ b/src/sun_mouse.c @@ -212,77 +212,9 @@ vuidPreInit(InputInfoPtr pInfo, const char *protocol, int flags) return FALSE; } - pMse->protocol = protocol; - xf86Msg(X_CONFIG, "%s: Protocol: %s\n", pInfo->name, protocol); - - /* Collect the options, and process the common options. */ - COLLECT_INPUT_OPTIONS(pInfo, NULL); - xf86ProcessCommonOptions(pInfo, pInfo->options); - pVuidMse->buffer = (unsigned char *)&pVuidMse->event; pVuidMse->strmod = xf86SetStrOption(pInfo->options, "StreamsModule", NULL); - /* Check if the device can be opened. */ - pInfo->fd = xf86OpenSerial(pInfo->options); - if (pInfo->fd == -1) { - if (xf86GetAllowMouseOpenFail()) { - xf86Msg(X_WARNING, "%s: cannot open input device\n", pInfo->name); - } else { - xf86Msg(X_ERROR, "%s: cannot open input device\n", pInfo->name); - free(pVuidMse->strmod); - free(pVuidMse); - free(pMse); - return FALSE; - } - } else { - if (pVuidMse->strmod) { - /* Check to see if module is already pushed */ - SYSCALL(i = ioctl(pInfo->fd, I_FIND, pVuidMse->strmod)); - - if (i == 0) { /* Not already pushed */ - SYSCALL(i = ioctl(pInfo->fd, I_PUSH, pVuidMse->strmod)); - if (i < 0) { - xf86Msg(X_ERROR, - "%s: cannot push module '%s' onto mouse device: %s\n", - pInfo->name, pVuidMse->strmod, strerror(errno)); - xf86CloseSerial(pInfo->fd); - pInfo->fd = -1; - free(pVuidMse->strmod); - free(pVuidMse); - free(pMse); - return FALSE; - } - } - } - - buttons = xf86SetIntOption(pInfo->options, "Buttons", 0); - if (buttons == 0) { - SYSCALL(i = ioctl(pInfo->fd, MSIOBUTTONS, &buttons)); - if (i == 0) { - pInfo->options = - xf86ReplaceIntOption(pInfo->options, - "Buttons", buttons); - xf86Msg(X_INFO, "%s: Setting Buttons option to \"%d\"\n", - pInfo->name, buttons); - } - } - - if (pVuidMse->strmod) { - SYSCALL(i = ioctl(pInfo->fd, I_POP, pVuidMse->strmod)); - if (i == -1) { - xf86Msg(X_WARNING, - "%s: cannot pop module '%s' off mouse device: %s\n", - pInfo->name, pVuidMse->strmod, strerror(errno)); - } - } - - xf86CloseSerial(pInfo->fd); - pInfo->fd = -1; - } - - /* Process common mouse options (like Emulate3Buttons, etc). */ - pMse->CommonOptions(pInfo); - /* Setup the local procs. */ pVuidMse->wrapped_device_control = pInfo->device_control; pInfo->device_control = vuidMouseProc; |