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 <[email protected]> > --- > 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 > > > _______________________________________________ > [email protected]: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
