summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2009-04-07 14:18:40 +0200
committerJulien Danjou <julien@danjou.info>2009-04-10 09:59:49 +0200
commitcc191431412d8764c645a51b0f106c0dfe652213 (patch)
tree04e0932dd7e2595044b6c5362e9581c9f22e9670
parent8797e053b2b2ee989f47490c7687b9a2fbdb0021 (diff)
util: merge common code for xcb_connect
Many code was duplicated between xcb_connect_to_display_with_auth_info and xcb_connect(). We merge both, since the difference is just about the xcb_auth_info_t pointer being supplied, or not. Signed-off-by: Julien Danjou <julien@danjou.info>
-rw-r--r--src/xcb_util.c50
1 files changed, 16 insertions, 34 deletions
diff --git a/src/xcb_util.c b/src/xcb_util.c
index 008a38b..54361f4 100644
--- a/src/xcb_util.c
+++ b/src/xcb_util.c
@@ -317,39 +317,7 @@ static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen)
xcb_connection_t *xcb_connect(const char *displayname, int *screenp)
{
- int fd, display = 0;
- char *host;
- char *protocol;
- xcb_connection_t *c;
- xcb_auth_info_t auth;
-
- int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp);
-
-#ifdef HAVE_LAUNCHD
- if(!displayname)
- displayname = getenv("DISPLAY");
- if(displayname && strlen(displayname)>11 && !strncmp(displayname, "/tmp/launch", 11))
- fd = _xcb_open_unix(NULL, displayname);
- else
-#endif
- if(!parsed)
- return (xcb_connection_t *) &error_connection;
- else
- fd = _xcb_open(host, protocol, display);
- free(host);
-
- if(fd == -1)
- return (xcb_connection_t *) &error_connection;
-
- if(_xcb_get_auth_info(fd, &auth, display))
- {
- c = xcb_connect_to_fd(fd, &auth);
- free(auth.name);
- free(auth.data);
- }
- else
- c = xcb_connect_to_fd(fd, 0);
- return c;
+ return xcb_connect_to_display_with_auth_info(displayname, NULL, screenp);
}
xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname, xcb_auth_info_t *auth, int *screenp)
@@ -357,6 +325,8 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname,
int fd, display = 0;
char *host;
char *protocol;
+ xcb_auth_info_t ourauth;
+ xcb_connection_t *c;
int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp);
@@ -376,5 +346,17 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname,
if(fd == -1)
return (xcb_connection_t *) &error_connection;
- return xcb_connect_to_fd(fd, auth);
+ if(auth)
+ return xcb_connect_to_fd(fd, auth);
+
+ if(_xcb_get_auth_info(fd, &ourauth, display))
+ {
+ c = xcb_connect_to_fd(fd, &ourauth);
+ free(ourauth.name);
+ free(ourauth.data);
+ }
+ else
+ c = xcb_connect_to_fd(fd, 0);
+
+ return c;
}