[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs/src emacs.c ChangeLog
From: |
Adrian Robert |
Subject: |
[Emacs-diffs] emacs/src emacs.c ChangeLog |
Date: |
Fri, 23 Jan 2009 09:12:55 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Adrian Robert <arobert> 09/01/23 09:12:54
Modified files:
src : emacs.c ChangeLog
Log message:
* emacs.c (main): Do fork+exec under --daemon in Cocoa.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/emacs.c?cvsroot=emacs&r1=1.458&r2=1.459
http://cvs.savannah.gnu.org/viewcvs/emacs/src/ChangeLog?cvsroot=emacs&r1=1.7304&r2=1.7305
Patches:
Index: emacs.c
===================================================================
RCS file: /sources/emacs/emacs/src/emacs.c,v
retrieving revision 1.458
retrieving revision 1.459
diff -u -b -r1.458 -r1.459
--- emacs.c 8 Jan 2009 03:15:35 -0000 1.458
+++ emacs.c 23 Jan 2009 09:12:53 -0000 1.459
@@ -797,6 +797,9 @@
int no_loadup = 0;
char *junk = 0;
char *dname_arg = 0;
+#ifdef NS_IMPL_COCOA
+ char dname_arg2[80];
+#endif
#if GC_MARK_STACK
extern Lisp_Object *stack_base;
@@ -1108,7 +1111,19 @@
exit (1);
}
+#ifndef NS_IMPL_COCOA
f = fork ();
+#else
+ /* Under Cocoa we must do fork+exec:
+ (http://developer.apple.com/ReleaseNotes/CoreFoundation/CoreFoundation.html)
+ We mark being in the exec'd process by a daemon name argument of
+ form "--daemon=\nFD0,FD1\nNAME" where FD are the pipe file
descriptors,
+ NAME is the original daemon name, if any. */
+ if (!dname_arg || !strchr (dname_arg, '\n'))
+ f = fork (); /* in orig */
+ else
+ f = 0; /* in exec'd */
+#endif
if (f > 0)
{
int retval;
@@ -1144,6 +1159,42 @@
exit (1);
}
+#ifdef NS_IMPL_COCOA
+ {
+ /* in orig process, forked as child, OR in exec'd */
+ if (!dname_arg || !strchr (dname_arg, '\n'))
+ { /* in orig, child: now exec w/special daemon name */
+ char fdStr[80];
+
+ if (dname_arg && strlen (dname_arg) > 70)
+ {
+ fprintf (stderr, "daemon: child name too long\n");
+ exit (1);
+ }
+
+ sprintf (fdStr, "--daemon=\n%d,%d\n%s", daemon_pipe[0],
+ daemon_pipe[1], dname_arg ? dname_arg : "");
+ argv[skip_args] = fdStr;
+
+ execv (argv[0], argv);
+ fprintf (stderr, "emacs daemon: exec failed: %d\t%d\n", errno);
+ exit (1);
+ }
+
+ /* in exec'd: parse special dname into pipe and name info */
+ if (!dname_arg || !strchr (dname_arg, '\n')
+ || strlen (dname_arg) < 1 || strlen (dname_arg) > 70)
+ {
+ fprintf (stderr, "emacs daemon: daemon name absent or too long\n");
+ exit(1);
+ }
+ dname_arg2[0] = '\0';
+ sscanf (dname_arg, "\n%d,%d\n%s", &(daemon_pipe[0]), &(daemon_pipe[1]),
+ dname_arg2);
+ dname_arg = strlen (dname_arg2) ? dname_arg2 : NULL;
+ }
+#endif
+
if (dname_arg)
daemon_name = xstrdup (dname_arg);
/* Close unused reading end of the pipe. */
Index: ChangeLog
===================================================================
RCS file: /sources/emacs/emacs/src/ChangeLog,v
retrieving revision 1.7304
retrieving revision 1.7305
diff -u -b -r1.7304 -r1.7305
--- ChangeLog 23 Jan 2009 04:37:58 -0000 1.7304
+++ ChangeLog 23 Jan 2009 09:12:53 -0000 1.7305
@@ -1,3 +1,7 @@
+2009-01-23 Adrian Robert <address@hidden>
+
+ * emacs.c (main): Do fork+exec under --daemon in Cocoa.
+
2009-01-23 Giorgos Keramidas <address@hidden> (tiny change)
* alloc.c (mark_stack): Use "flushw" instead of "ta 3" assembly
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs/src emacs.c ChangeLog,
Adrian Robert <=