XQuartz: Allow better compatability with older versions of xinit

If we are id="org.x" and the launchd socket is ":0", we will claim
the socket to match the old behavior before we prefixed the
socket name with our id.

Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org>
This commit is contained in:
Jeremy Huddleston 2009-11-23 16:33:00 -08:00
parent ec16357eda
commit 4677b5a800
2 changed files with 23 additions and 14 deletions

View File

@ -333,8 +333,10 @@ kern_return_t do_start_x11_server(mach_port_t port, string_array_t argv,
/* If we didn't get handed a launchd DISPLAY socket, we should /* If we didn't get handed a launchd DISPLAY socket, we should
* unset DISPLAY or we can run into problems with pbproxy * unset DISPLAY or we can run into problems with pbproxy
*/ */
if(!launchd_socket_handed_off) if(!launchd_socket_handed_off) {
fprintf(stderr, "X11.app: No launchd socket handed off, unsetting DISPLAY\n");
unsetenv("DISPLAY"); unsetenv("DISPLAY");
}
if(!_argv || !_envp) { if(!_argv || !_envp) {
return KERN_FAILURE; return KERN_FAILURE;
@ -473,7 +475,7 @@ static void setup_env(void) {
server_bootstrap_name = malloc(sizeof(char) * (strlen(pds) + 1)); server_bootstrap_name = malloc(sizeof(char) * (strlen(pds) + 1));
if(!server_bootstrap_name) { if(!server_bootstrap_name) {
fprintf(stderr, "Memory allocation error.\n"); fprintf(stderr, "X11.app: Memory allocation error.\n");
exit(1); exit(1);
} }
strcpy(server_bootstrap_name, pds); strcpy(server_bootstrap_name, pds);
@ -482,7 +484,7 @@ static void setup_env(void) {
len = strlen(server_bootstrap_name); len = strlen(server_bootstrap_name);
launchd_id_prefix = malloc(sizeof(char) * (len - 3)); launchd_id_prefix = malloc(sizeof(char) * (len - 3));
if(!launchd_id_prefix) { if(!launchd_id_prefix) {
fprintf(stderr, "Memory allocation error.\n"); fprintf(stderr, "X11.app: Memory allocation error.\n");
exit(1); exit(1);
} }
strlcpy(launchd_id_prefix, server_bootstrap_name, len - 3); strlcpy(launchd_id_prefix, server_bootstrap_name, len - 3);
@ -497,21 +499,27 @@ static void setup_env(void) {
} }
if(s && *s) { if(s && *s) {
temp = (char *)malloc(sizeof(char) * len); if(strcmp(launchd_id_prefix, "org.x") == 0 && strcmp(s, ":0") == 0) {
if(!temp) { fprintf(stderr, "X11.app: Detected old style launchd DISPLAY, please update xinit.\n");
fprintf(stderr, "Memory allocation error creating space for socket name test.\n"); } else {
exit(1); temp = (char *)malloc(sizeof(char) * len);
} if(!temp) {
strlcpy(temp, launchd_id_prefix, len); fprintf(stderr, "X11.app: Memory allocation error creating space for socket name test.\n");
strlcat(temp, ":0", len); exit(1);
}
strlcpy(temp, launchd_id_prefix, len);
strlcat(temp, ":0", len);
if(strcmp(temp, s) != 0) { if(strcmp(temp, s) != 0) {
/* If we don't have a match, unset it. */ /* If we don't have a match, unset it. */
unsetenv("DISPLAY"); fprintf(stderr, "X11.app: DISPLAY (\"%s\") does not match our id (\"%s\"), unsetting.\n", disp, launchd_id_prefix);
unsetenv("DISPLAY");
}
free(temp);
} }
free(temp);
} else { } else {
/* The DISPLAY environment variable is not formatted like a launchd socket, so reset. */ /* The DISPLAY environment variable is not formatted like a launchd socket, so reset. */
fprintf(stderr, "X11.app: DISPLAY does not look like a launchd set variable, unsetting.\n");
unsetenv("DISPLAY"); unsetenv("DISPLAY");
} }
} }

View File

@ -232,6 +232,7 @@ int main(int argc, char **argv, char **envp) {
kr = bootstrap_look_up(bootstrap_port, server_bootstrap_name, &mp); kr = bootstrap_look_up(bootstrap_port, server_bootstrap_name, &mp);
if(kr != KERN_SUCCESS) { if(kr != KERN_SUCCESS) {
fprintf(stderr, "Xquartz: Unable to locate waiting server: %s\n", server_bootstrap_name);
pid_t child; pid_t child;
set_x11_path(); set_x11_path();