emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/raeburn-startup 6120138 12/17: Don't get into an e


From: Ken Raeburn
Subject: [Emacs-diffs] scratch/raeburn-startup 6120138 12/17: Don't get into an error loop if dumped.elc isn't found.
Date: Thu, 15 Dec 2016 11:33:18 +0000 (UTC)

branch: scratch/raeburn-startup
commit 6120138143306490a8903cc0cb487fa7b771c050
Author: Ken Raeburn <address@hidden>
Commit: Ken Raeburn <address@hidden>

    Don't get into an error loop if dumped.elc isn't found.
    
    When temacs is run, if dumped.elc isn't in the right place (currently
    $srctop/src/dumped.elc, though it's generated in the build tree's src
    directory), starting in X11 mode will produce a message about not
    finding it, but starting in tty mode will produce an error loop
    because internal-echo-keystrokes-prefix isn't defined.
    
    This patch traps the error and kills the Emacs session with an exit
    code of 42, and no message.  This is worse than the X11 behavior, but
    better than the tty behavior.
    
    It's not a long term fix though.
    
    * src/emacs.c (main): If dumped.elc isn't found, exit with an error
    code.
    (syms_of_emacs): Define Qcondition_case.
---
 src/emacs.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/emacs.c b/src/emacs.c
index 50e3abf..6a81194 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -1655,8 +1655,19 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
          Vtop_level = list2 (Qload, build_unibyte_string (file));
        }
       else if (! no_loadup)
-        /* Unless next switch is -nl, load "loadup.el" first thing.  */
-       Vtop_level = list2 (Qload, build_string ("../src/dumped.elc"));
+        /* Unless next switch is -nl, load "dumped.elc" first thing.
+          If it fails, we won't be able to run.  */
+       {
+         Lisp_Object load = list2 (Qload, build_string ("../src/dumped.elc"));
+         /* XXX We need a way for Lisp to cause Emacs to exit, with
+            an error message to stderr after restoring tty modes.  */
+         /* (condition-case nil bodyform (file-missing (kill-emacs 42)))  */
+         Vtop_level = list4 (Qcondition_case,
+                             Qnil,
+                             load,
+                             list2 (Qfile_missing,
+                                    list2 (Qkill_emacs, make_number (42))));
+       }
     }
 
   /* Set up for profiling.  This is known to work on FreeBSD,
@@ -2484,6 +2495,7 @@ syms_of_emacs (void)
   DEFSYM (Qrisky_local_variable, "risky-local-variable");
   DEFSYM (Qkill_emacs, "kill-emacs");
   DEFSYM (Qkill_emacs_hook, "kill-emacs-hook");
+  DEFSYM (Qcondition_case, "condition-case");
 
 #ifndef CANNOT_DUMP
   defsubr (&Sdump_emacs);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]