[PATCH:xf86-input-mouse] Fix Solaris issues with new ABI12 init process.
Peter Hutterer
peter.hutterer at who-t.net
Sun Jun 26 15:44:38 PDT 2011
On Fri, Jun 24, 2011 at 10:52:59PM -0700, Alan Coopersmith wrote:
> 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 at oracle.com>
merged, thanks.
Cheers,
Peter
> ---
> src/mouse.c | 2 +
> src/mouse.h | 1 +
> 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;
> --
> 1.7.3.2
>
More information about the xorg-devel
mailing list