XQuartz: Query the BundleIdentifier from the bundle in X11.bin rather than using the configure option.

This lets X11.bin drop into any .app ... the Info.plist and Xquartz binary need to have it hardcoded still.
(cherry picked from commit 9ad16b8e50)
This commit is contained in:
Jeremy Huddleston 2009-09-28 17:47:31 -07:00
parent 11817a881c
commit 9b98b88322

View File

@ -80,7 +80,8 @@ const char *__crashreporter_info__base = "X.Org X Server " XSERVER_VERSION " Bui
char __crashreporter_info__buf[4096]; char __crashreporter_info__buf[4096];
char *__crashreporter_info__ = __crashreporter_info__buf; char *__crashreporter_info__ = __crashreporter_info__buf;
static char *server_bootstrap_name = LAUNCHD_ID_PREFIX".X11"; static char *launchd_id_prefix = NULL;
static char *server_bootstrap_name = NULL;
#define DEBUG 1 #define DEBUG 1
@ -456,6 +457,7 @@ static void setup_env(void) {
char *temp; char *temp;
const char *pds = NULL; const char *pds = NULL;
const char *disp = getenv("DISPLAY"); const char *disp = getenv("DISPLAY");
size_t len;
/* Pass on our prefs domain to startx and its inheritors (mainly for /* Pass on our prefs domain to startx and its inheritors (mainly for
* quartz-wm and the Xquartz stub's MachIPC) * quartz-wm and the Xquartz stub's MachIPC)
@ -465,20 +467,32 @@ static void setup_env(void) {
CFStringRef pd = CFBundleGetIdentifier(bundle); CFStringRef pd = CFBundleGetIdentifier(bundle);
if(pd) { if(pd) {
pds = CFStringGetCStringPtr(pd, 0); pds = CFStringGetCStringPtr(pd, 0);
if(pds) { }
}
/* fallback to hardcoded value if we can't discover it */
if(!pds) {
pds = LAUNCHD_ID_PREFIX".X11";
}
server_bootstrap_name = malloc(sizeof(char) * (strlen(pds) + 1)); server_bootstrap_name = malloc(sizeof(char) * (strlen(pds) + 1));
if(!server_bootstrap_name) {
fprintf(stderr, "Memory allocation error.\n");
exit(1);
}
strcpy(server_bootstrap_name, pds); strcpy(server_bootstrap_name, pds);
setenv("X11_PREFS_DOMAIN", pds, 1); setenv("X11_PREFS_DOMAIN", server_bootstrap_name, 1);
}
} len = strlen(server_bootstrap_name);
launchd_id_prefix = malloc(sizeof(char) * (len - 3));
if(!launchd_id_prefix) {
fprintf(stderr, "Memory allocation error.\n");
exit(1);
} }
strlcpy(launchd_id_prefix, server_bootstrap_name, len - 3);
/* We need to unset DISPLAY if it is not our socket */ /* We need to unset DISPLAY if it is not our socket */
if(disp) { if(disp) {
if(!pds) {
/* If we can't detet our id, we are beyond hope and need to just
* revert to the non-launchd startup */
unsetenv("DISPLAY");
} else {
/* s = basename(disp) */ /* s = basename(disp) */
const char *d, *s; const char *d, *s;
for(s = NULL, d = disp; *d; d++) { for(s = NULL, d = disp; *d; d++) {
@ -487,13 +501,13 @@ static void setup_env(void) {
} }
if(s && *s) { if(s && *s) {
size_t pds_len = strlen(pds); temp = (char *)malloc(sizeof(char) * len);
temp = (char *)malloc(sizeof(char) * pds_len);
if(!temp) { if(!temp) {
fprintf(stderr, "Memory allocation error creating space for socket name test.\n"); fprintf(stderr, "Memory allocation error creating space for socket name test.\n");
exit(1);
} }
strlcpy(temp, pds, pds_len - 3); strlcpy(temp, launchd_id_prefix, len);
strlcat(temp, ":0", pds_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. */
@ -505,7 +519,6 @@ static void setup_env(void) {
unsetenv("DISPLAY"); unsetenv("DISPLAY");
} }
} }
}
/* Make sure PATH is right */ /* Make sure PATH is right */
ensure_path(X11BINDIR); ensure_path(X11BINDIR);