summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--launchd/user_startx/launchd_startx.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/launchd/user_startx/launchd_startx.c b/launchd/user_startx/launchd_startx.c
index e3fae76..f83cd61 100644
--- a/launchd/user_startx/launchd_startx.c
+++ b/launchd/user_startx/launchd_startx.c
@@ -34,11 +34,19 @@
#include <unistd.h>
#include <stdio.h>
#include <assert.h>
-#include <spawn.h>
#include <sys/wait.h>
#include <string.h>
#include <stdlib.h>
+/* Using MIN_REQUIRED instead of MAX_ALLOWED logic due to posix_spawn not
+ * being marked with availability macros until 10.7
+ */
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
+#include <spawn.h>
+#else
+#include <errno.h>
+#endif
+
#include "console_redirect.h"
int main(int argc, char **argv, char **envp) {
@@ -56,7 +64,19 @@ int main(int argc, char **argv, char **envp) {
xi_asl_capture_fd(aslc, NULL, ASL_LEVEL_INFO, STDOUT_FILENO);
xi_asl_capture_fd(aslc, NULL, ASL_LEVEL_NOTICE, STDERR_FILENO);
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
assert(posix_spawnp(&child, argv[1], NULL, NULL, &argv[1], envp) == 0);
+#else
+ switch(child = fork()) {
+ case -1:
+ perror("fork");
+ return errno;
+ case 0:
+ return execvp(argv[1], &argv[1]);
+ default:
+ break;
+ }
+#endif
wait4(child, &pstat, 0, (struct rusage *)0);