xserver: Branch 'xorg-server-1.5-apple' - 2 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Fri Sep 4 00:41:16 PDT 2009


 configure.ac                          |    6 ++--
 hw/xquartz/mach-startup/bundle-main.c |   44 +++++++++++++++++++++++++++-------
 hw/xquartz/mach-startup/launchd_fd.c  |    8 ++++--
 3 files changed, 45 insertions(+), 13 deletions(-)

New commits:
commit 649b8dc1a93dd8feb23666e1e2cae95266d346d4
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Sep 4 00:40:36 2009 -0700

    1.5.3-apple16

diff --git a/configure.ac b/configure.ac
index c6765f6..aa12d5b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,9 +26,9 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.5.3-apple15, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="31 August 2009"
-REMEMBER_REMEMBER="The Thirty-first of August"
+AC_INIT([xorg-server], 1.5.3-apple16, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="4 Sept 2009"
+REMEMBER_REMEMBER="The Fourth of September"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
commit 3d5e10cce360a04bf917227615fb9b825675124f
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Fri Sep 4 00:38:58 2009 -0700

    XQuartz: Check the DISPLAY environment variable to see if the socket at startup is ours.  If not, ignore it and fork/exec startx.

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index 583d67e..be5d24b 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -355,7 +355,7 @@ kern_return_t do_start_x11_server(mach_port_t port, string_array_t argv,
         return KERN_FAILURE;
 }
 
-int startup_trigger(int argc, char **argv, char **envp) {
+static int startup_trigger(int argc, char **argv, char **envp) {
     Display *display;
     const char *s;
     
@@ -392,9 +392,9 @@ int startup_trigger(int argc, char **argv, char **envp) {
         kr = bootstrap_look_up(bootstrap_port, server_bootstrap_name, &mp);
         if (kr != KERN_SUCCESS) {
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
-            fprintf(stderr, "bootstrap_look_up(): %s\n", bootstrap_strerror(kr));
+            fprintf(stderr, "bootstrap_look_up(%s): %s\n", server_bootstrap_name, bootstrap_strerror(kr));
 #else
-            fprintf(stderr, "bootstrap_look_up(): %ul\n", (unsigned long)kr);
+            fprintf(stderr, "bootstrap_look_up(%s): %ul\n", server_bootstrap_name, (unsigned long)kr);
 #endif
             exit(EXIT_FAILURE);
         }
@@ -452,6 +452,7 @@ static void ensure_path(const char *dir) {
 static void setup_env() {
     char *temp;
     const char *pds = NULL;
+    const char *disp = getenv("DISPLAY");
 
     /* Pass on our prefs domain to startx and its inheritors (mainly for
      * quartz-wm and the Xquartz stub's MachIPC)
@@ -468,12 +469,39 @@ static void setup_env() {
             }
         }
     }
+    /* We need to unset DISPLAY if it is not our socket */
+    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) */
+            const char *d, *s;
+	    for(s = NULL, d = disp; *d; d++) {
+                if(*d == '/')
+                     s = d + 1;
+            }
 
-    /* If we're not org.x.X11, we want to unset DISPLAY, so we don't
-     * use the launchd DISPLAY socket.
-     */
-    if(pds == NULL || strcmp(pds, "org.x.X11") != 0)
-        unsetenv("DISPLAY");
+            if(s && *s) {
+                temp = (char *)malloc(sizeof(char) * (strlen(pds) + 3));
+                if(!temp) {
+                    fprintf(stderr, "Memory allocation error creating space for socket name test.\n");
+                }
+                strcpy(temp, pds);
+                strcat(temp, ":0");
+
+                if(strcpy(temp, s) != 0) {
+                    /* If we don't have a match, unset it. */
+                    unsetenv("DISPLAY");
+                }
+                free(temp);
+            } else {
+                /* The DISPLAY environment variable is not formatted like a launchd socket, so reset. */
+                unsetenv("DISPLAY");
+            }
+        }
+    }
 
     /* Make sure PATH is right */
     ensure_path(X11BINDIR);
diff --git a/hw/xquartz/mach-startup/launchd_fd.c b/hw/xquartz/mach-startup/launchd_fd.c
index 44a243a..51017d6 100644
--- a/hw/xquartz/mach-startup/launchd_fd.c
+++ b/hw/xquartz/mach-startup/launchd_fd.c
@@ -26,6 +26,10 @@
  * prior written authorization.
  */
 
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
 #include <launch.h>
 #include <stdio.h>
 #include <errno.h>
@@ -65,9 +69,9 @@ int launchd_display_fd() {
         return ERROR_FD;
     }
     
-    listening_fd_array = launch_data_dict_lookup(sockets_dict, ":0");
+    listening_fd_array = launch_data_dict_lookup(sockets_dict, LAUNCHD_ID_PREFIX":0");
     if (NULL == listening_fd_array) {
-        fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!\n");
+        fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!  %s failed.\n", LAUNCHD_ID_PREFIX".startx:0");
         return ERROR_FD;
     }
     


More information about the xorg-commit mailing list