[PATCH libX11] xcb: Add TCP fallback

Jeremy Huddleston jeremyhu at apple.com
Wed May 12 18:10:30 PDT 2010


I don't like this.  Please ignore.  I have a better version coming.

On May 12, 2010, at 16:47, Jeremy Huddleston wrote:

> 
> If we fail to connect to a UNIX socket and the transport isn't specified,
> fallback on TCP.  This matches behavior with the xtrans codepath and the
> Xlib spec.
> 
> http://lists.x.org/archives/xorg-devel/2010-April/007915.html
> 
> Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
> ---
> src/OpenDis.c |   35 ++++++++++++++++++++++++++++-------
> 1 files changed, 28 insertions(+), 7 deletions(-)
> 
> diff --git a/src/OpenDis.c b/src/OpenDis.c
> index 46e1026..cd628f1 100644
> --- a/src/OpenDis.c
> +++ b/src/OpenDis.c
> @@ -93,8 +93,8 @@ XOpenDisplay (
> 	register Display *dpy;		/* New Display object being created. */
> 	register int i;
> 	int j, k;			/* random iterator indexes */
> -#if !USE_XCB
> 	char *display_name;		/* pointer to display name */
> +#if !USE_XCB
> 	int endian;			/* to determine which endian. */
> 	xConnClientPrefix client;	/* client information */
> 	int idisplay;			/* display number */
> @@ -119,12 +119,13 @@ XOpenDisplay (
> 	long setuplength;	/* number of bytes in setup message */
> 	long usedbytes = 0;     /* number of bytes we have processed */
> 	unsigned long mask;
> -       long int conn_buf_size;
> -       char *xlib_buffer_size;
> +	long int conn_buf_size;
> +	char *xlib_buffer_size;
> 
> #if !USE_XCB
> 	bzero((char *) &client, sizeof(client));
> 	bzero((char *) &prefix, sizeof(prefix));
> +#endif /* !USE_XCB */
> 
> 	/*
> 	 * If the display specifier string supplied as an argument to this
> @@ -140,7 +141,6 @@ XOpenDisplay (
> 		/* Display is non-NULL, copy the pointer */
> 		display_name = (char *)display;
> 	}
> -#endif /* !USE_XCB */
> 
> /*
>  * Set the default error handlers.  This allows the global variables to
> @@ -164,9 +164,30 @@ XOpenDisplay (
> 
> #if USE_XCB
> 	if(!_XConnectXCB(dpy, display, &fullname, &iscreen)) {
> -		dpy->display_name = fullname;
> -		OutOfMemory(dpy, NULL);
> -		return NULL;
> +		/* Try falling back on TCP if no transport specified */
> +		if(*display_name == ':') {
> +			size_t buf_size = strlen(display_name) + 10;
> +			char *buf = (char *)Xcalloc(buf_size, sizeof(char));
> +
> +			if(!buf) {
> +				dpy->display_name = fullname;
> +				OutOfMemory(dpy, NULL);
> +				return NULL;
> +			}
> +			
> +			strcpy(buf, "localhost");
> +			strlcat(buf, display_name, buf_size);
> +
> +			if(!_XConnectXCB(dpy, buf, &fullname, &iscreen)) {
> +				dpy->display_name = fullname;
> +				OutOfMemory(dpy, NULL);
> +				return NULL;
> +			}
> +		} else {
> +			dpy->display_name = fullname;
> +			OutOfMemory(dpy, NULL);
> +			return NULL;
> +		}
> 	}
> #else /* !USE_XCB */
> 	if ((dpy->trans_conn = _X11TransConnectDisplay (
> -- 
> 1.5.6.6
> 
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel



More information about the xorg-devel mailing list