[Xquartz-changes] xserver: Branch 'master' - 3 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Thu Aug 16 19:44:24 PDT 2012


Rebased ref, commits from common ancestor:
commit ac616d8ed5a634c6b32775eb7b071a13c575fd97
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Thu Aug 16 19:09:42 2012 -0700

    XQuartz: Use asl_log_descriptor for children as well
    
    This change is #if'd out due to a bug in asl_log_descriptor, but
    it is left here as reference to be enabled in the future.
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>

diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 393bc1a..737db42 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -53,6 +53,11 @@
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include <asl.h>
+#include <stdlib.h>
+
+extern aslclient aslc;
+extern char *bundle_id_prefix;
 
 @implementation X11Controller
 
@@ -342,9 +347,12 @@
     const char *newargv[4];
     char buf[128];
     char *s;
+#if 0 && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+    int stdout_pipe[2];
+    int stderr_pipe[2];
+#endif
 
-    newargv[0] =
-        [X11App prefs_get_string:@PREFS_LOGIN_SHELL default:"/bin/sh"];
+    newargv[0] = [X11App prefs_get_string:@PREFS_LOGIN_SHELL default:"/bin/sh"];
     newargv[1] = "-c";
     newargv[2] = [filename UTF8String];
     newargv[3] = NULL;
@@ -355,6 +363,40 @@
         setenv("DISPLAY", buf, TRUE);
     }
 
+#if 0 && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+    if (asl_log_descriptor) {
+        char *asl_sender;
+        aslmsg amsg = asl_new(ASL_TYPE_MSG);
+        assert(amsg);
+
+        asprintf(&asl_sender, "%s.%s", bundle_id_prefix, newargv[2]);
+        assert(asl_sender);
+        for(s = asl_sender + strlen(bundle_id_prefix) + 1; *s; s++) {
+            if(! ((*s >= 'a' && *s <= 'z') ||
+                  (*s >= 'A' && *s <= 'Z') ||
+                  (*s >= '0' && *s <= '9'))) {
+                *s = '_';
+            }
+        }
+
+        (void)asl_set(amsg, ASL_KEY_SENDER, asl_sender);
+        free(asl_sender);
+
+        assert(0 == pipe(stdout_pipe));
+        fcntl(stdout_pipe[0], F_SETFD, FD_CLOEXEC);
+        fcntl(stdout_pipe[0], F_SETFL, O_NONBLOCK);
+
+        assert(0 == pipe(stderr_pipe));
+        fcntl(stderr_pipe[0], F_SETFD, FD_CLOEXEC);
+        fcntl(stderr_pipe[0], F_SETFL, O_NONBLOCK);
+
+        asl_log_descriptor(aslc, amsg, ASL_LEVEL_INFO, stdout_pipe[0], ASL_LOG_DESCRIPTOR_READ);
+        asl_log_descriptor(aslc, amsg, ASL_LEVEL_NOTICE, stderr_pipe[0], ASL_LOG_DESCRIPTOR_READ);
+
+        asl_free(amsg);
+    }
+#endif
+
     /* Do the fork-twice trick to avoid having to reap zombies */
     child1 = fork();
     switch (child1) {
@@ -371,6 +413,14 @@
             _exit(1);
 
         case 0:                                     /* child2 */
+#if 0 && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+            if (asl_log_descriptor) {
+                /* Replace our stdout/stderr */
+                dup2(stdout_pipe[1], STDOUT_FILENO);
+                dup2(stderr_pipe[1], STDERR_FILENO);
+            }
+#endif
+
             /* close all open files except for standard streams */
             max_files = sysconf(_SC_OPEN_MAX);
             for (i = 3; i < max_files; i++)
@@ -391,6 +441,14 @@
     default:                                    /* parent */
         waitpid(child1, &status, 0);
     }
+
+#if 0 && MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+    if (asl_log_descriptor) {
+        /* Close the write ends of the pipe */
+        close(stdout_pipe[1]);
+        close(stderr_pipe[1]);
+    }
+#endif
 }
 
 - (void) app_selected:sender
commit ad123071e54d890d36d1373f59b8a6eb4937e936
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Thu Aug 16 13:02:28 2012 -0700

    XQuartz: Use asl_log_descriptor on Mountain Lion
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index cabdf1e..b403662 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -563,8 +563,25 @@ setup_console_redirect(const char *bundle_id)
     free(asl_facility);
 
     asl_set_filter(aslc, ASL_FILTER_MASK_UPTO(ASL_LEVEL_WARNING));
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
+# if MAC_OS_X_VERSION_MIN_REQUIRED < 1080
+    if (asl_log_descriptor)
+# endif
+    {
+        asl_log_descriptor(aslc, NULL, ASL_LEVEL_INFO, STDOUT_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
+        asl_log_descriptor(aslc, NULL, ASL_LEVEL_NOTICE, STDERR_FILENO, ASL_LOG_DESCRIPTOR_WRITE);
+    }
+# if MAC_OS_X_VERSION_MIN_REQUIRED < 1080
+    else {
+        xq_asl_capture_fd(aslc, NULL, ASL_LEVEL_INFO, STDOUT_FILENO);
+        xq_asl_capture_fd(aslc, NULL, ASL_LEVEL_NOTICE, STDERR_FILENO);
+    }
+# endif
+#else
     xq_asl_capture_fd(aslc, NULL, ASL_LEVEL_INFO, STDOUT_FILENO);
     xq_asl_capture_fd(aslc, NULL, ASL_LEVEL_NOTICE, STDERR_FILENO);
+#endif
 }
 
 static void
commit 7c3d2e4828deb4e8ec38e8ef88d6f92b2d931033
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Thu Aug 16 19:42:54 2012 -0700

    XQuartz: console_redirect: Properly zero-out the tail of the array on realloc()
    
    We forgot to multiply by sizeof(), so it wasn't fully zeroed out.
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>

diff --git a/hw/xquartz/console_redirect.c b/hw/xquartz/console_redirect.c
index 30e397a..8fdce46 100644
--- a/hw/xquartz/console_redirect.c
+++ b/hw/xquartz/console_redirect.c
@@ -365,8 +365,8 @@ xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int fd)
                               BLOCK_DONE;
                           }
                           redirect_fds = new_array;
-                          memset(redirect_fds + n_redirect_fds, 0, new_n -
-                                 n_redirect_fds);
+                          memset(redirect_fds + n_redirect_fds, 0, (new_n -
+                                 n_redirect_fds) * sizeof(*redirect_fds));
                           n_redirect_fds = new_n;
                       }
 


More information about the Xquartz-changes mailing list