81 lines
2.8 KiB
Diff
81 lines
2.8 KiB
Diff
|
cstrahan:
|
||
|
|
||
|
When the X / Xquartz server initiallizes, it starts the XQuartz.app and
|
||
|
hands-off the display FD. To start the XQuartz.app, Xquartz normally uses some
|
||
|
system calls to get the path of the application by app bundle id, and then
|
||
|
executes the Contents/MacOS/X11 script contained inside, which in turn executes
|
||
|
Contents/MacOS/X11.bin (the actual app).
|
||
|
|
||
|
This patch replaces that discovery technique with a simple call to
|
||
|
`getenv'. In order to make Xquartz actually work, we'll need another wrapper
|
||
|
that sets the `XQUARTZ_X11' environment variable to point to the `X11' script.
|
||
|
|
||
|
diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
|
||
|
index 756e4ef..3313a55 100644
|
||
|
--- a/hw/xquartz/mach-startup/stub.c
|
||
|
+++ b/hw/xquartz/mach-startup/stub.c
|
||
|
@@ -61,54 +61,16 @@ aslclient aslc;
|
||
|
static void
|
||
|
set_x11_path(void)
|
||
|
{
|
||
|
-#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
|
||
|
-
|
||
|
- CFURLRef appURL = NULL;
|
||
|
- OSStatus osstatus =
|
||
|
- LSFindApplicationForInfo(kLSUnknownCreator, CFSTR(
|
||
|
- kX11AppBundleId), nil, nil, &appURL);
|
||
|
-
|
||
|
- switch (osstatus) {
|
||
|
- case noErr:
|
||
|
- if (appURL == NULL) {
|
||
|
- asl_log(
|
||
|
- aslc, NULL, ASL_LEVEL_ERR,
|
||
|
- "Xquartz: Invalid response from LSFindApplicationForInfo(%s)",
|
||
|
- kX11AppBundleId);
|
||
|
- exit(1);
|
||
|
- }
|
||
|
-
|
||
|
- if (!CFURLGetFileSystemRepresentation(appURL, true,
|
||
|
- (unsigned char *)x11_path,
|
||
|
- sizeof(x11_path))) {
|
||
|
- asl_log(aslc, NULL, ASL_LEVEL_ERR,
|
||
|
- "Xquartz: Error resolving URL for %s",
|
||
|
- kX11AppBundleId);
|
||
|
- exit(3);
|
||
|
- }
|
||
|
-
|
||
|
- strlcat(x11_path, kX11AppBundlePath, sizeof(x11_path));
|
||
|
- asl_log(aslc, NULL, ASL_LEVEL_INFO, "Xquartz: X11.app = %s", x11_path);
|
||
|
- break;
|
||
|
-
|
||
|
- case kLSApplicationNotFoundErr:
|
||
|
- asl_log(aslc, NULL, ASL_LEVEL_ERR,
|
||
|
- "Xquartz: Unable to find application for %s",
|
||
|
- kX11AppBundleId);
|
||
|
- exit(10);
|
||
|
-
|
||
|
- default:
|
||
|
- asl_log(aslc, NULL, ASL_LEVEL_ERR,
|
||
|
- "Xquartz: Unable to find application for %s, error code = %d",
|
||
|
- kX11AppBundleId,
|
||
|
- (int)osstatus);
|
||
|
- exit(11);
|
||
|
+ char *xquartzX11 = getenv("XQUARTZ_X11");
|
||
|
+ if (xquartzX11) {
|
||
|
+ strlcpy(x11_path, xquartzX11,
|
||
|
+ sizeof(x11_path));
|
||
|
+ } else {
|
||
|
+ asl_log(
|
||
|
+ aslc, NULL, ASL_LEVEL_ERR,
|
||
|
+ "Xquartz: XQUARTZ_X11 environment variable not set");
|
||
|
+ exit(1);
|
||
|
}
|
||
|
-#else
|
||
|
- /* TODO: Make Tiger smarter... but TBH, this should never get called on Tiger... */
|
||
|
- strlcpy(x11_path, "/Applications/Utilities/X11.app/Contents/MacOS/X11",
|
||
|
- sizeof(x11_path));
|
||
|
-#endif
|
||
|
}
|
||
|
|
||
|
static int
|