diff options
author | Julien Danjou <julien@danjou.info> | 2009-04-07 14:18:40 +0200 |
---|---|---|
committer | Julien Danjou <julien@danjou.info> | 2009-04-10 09:59:49 +0200 |
commit | cc191431412d8764c645a51b0f106c0dfe652213 (patch) | |
tree | 04e0932dd7e2595044b6c5362e9581c9f22e9670 | |
parent | 8797e053b2b2ee989f47490c7687b9a2fbdb0021 (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.c | 50 |
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; } |