/* Fully extensible Emacs, running on Unix, intended for GNU.
-Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2012
- Free Software Foundation, Inc.
+Copyright (C) 1985-1987, 1993-1995, 1997-1999, 2001-2013 Free Software
+Foundation, Inc.
This file is part of GNU Emacs.
#include "w32common.h"
#endif
-#if defined HAVE_NTGUI && defined CYGWIN
+#if defined CYGWIN
#include "cygw32.h"
#endif
/* True if the MALLOC_CHECK_ environment variable was set while
dumping. Used to work around a bug in glibc's malloc. */
static bool malloc_using_checking;
+#elif defined HAVE_PTHREAD && !defined SYSTEM_MALLOC
+extern void malloc_enable_thread (void);
#endif
Lisp_Object Qfile_name_handler_alist;
Lisp_Object Qrisky_local_variable;
Lisp_Object Qkill_emacs;
+static Lisp_Object Qkill_emacs_hook;
/* If true, Emacs should not attempt to use a window-specific code,
but instead should use the virtual terminal under which it was started. */
static void *ns_pool;
#endif
+#if !HAVE_SETLOCALE
+static char *
+setlocale (int cat, char const *locale)
+{
+ return 0;
+}
+#endif
/* Report a fatal error due to signal SIG, output a backtrace of at
/* This shouldn't be executed, but it prevents a warning. */
exit (1);
}
-
-#ifdef SIGDANGER
-
-/* Handler for SIGDANGER. */
-static void
-handle_danger_signal (int sig)
-{
- malloc_warning ("Operating system warns that virtual memory is running low.\n");
-
- /* It might be unsafe to call do_auto_save now. */
- force_auto_save_soon ();
-}
-
-static void
-deliver_danger_signal (int sig)
-{
- deliver_process_signal (sig, handle_danger_signal);
-}
-#endif
\f
/* Code for dealing with Lisp access to the Unix command line. */
static char const dump_tz[] = "UtC0";
#endif
-#ifndef ORDINARY_LINK
-/* We don't include crtbegin.o and crtend.o in the link,
- so these functions and variables might be missed.
- Provide dummy definitions to avoid error.
- (We don't have any real constructors or destructors.) */
-#ifdef __GNUC__
-
-/* Define a dummy function F. Declare F too, to pacify gcc
- -Wmissing-prototypes. */
-#define DEFINE_DUMMY_FUNCTION(f) \
- void f (void) ATTRIBUTE_CONST EXTERNALLY_VISIBLE; void f (void) {}
-
-#ifndef GCC_CTORS_IN_LIBC
-DEFINE_DUMMY_FUNCTION (__do_global_ctors)
-DEFINE_DUMMY_FUNCTION (__do_global_ctors_aux)
-DEFINE_DUMMY_FUNCTION (__do_global_dtors)
-/* GNU/Linux has a bug in its library; avoid an error. */
-#ifndef GNU_LINUX
-char * __CTOR_LIST__[2] EXTERNALLY_VISIBLE = { (char *) (-1), 0 };
-#endif
-char * __DTOR_LIST__[2] EXTERNALLY_VISIBLE = { (char *) (-1), 0 };
-#endif /* GCC_CTORS_IN_LIBC */
-DEFINE_DUMMY_FUNCTION (__main)
-#endif /* __GNUC__ */
-#endif /* ORDINARY_LINK */
-
/* Test whether the next argument in ARGV matches SSTR or a prefix of
LSTR (at least MINLEN characters). If so, then if VALPTR is non-null
(the argument is supposed to have a value) store in *VALPTR either
argv[skip_args] = fdStr;
- execv (argv[0], argv);
+ execvp (argv[0], argv);
fprintf (stderr, "emacs daemon: exec failed: %d\n", errno);
exit (1);
}
#endif /* DOS_NT */
}
-#if defined (HAVE_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
- if (! noninteractive)
- {
- extern void malloc_enable_thread (void);
-
- malloc_enable_thread ();
- }
+#if defined HAVE_PTHREAD && !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC
+# ifndef CANNOT_DUMP
+ /* Do not make gmalloc thread-safe when creating bootstrap-emacs, as
+ that causes an infinite recursive loop with FreeBSD. But do make
+ it thread-safe when creating emacs, otherwise bootstrap-emacs
+ fails on Cygwin. See Bug#14569. */
+ if (!noninteractive || initialized)
+# endif
+ malloc_enable_thread ();
#endif
init_signals (dumping);
noninteractive1 = noninteractive;
-/* Perform basic initializations (not merely interning symbols). */
+ /* Perform basic initializations (not merely interning symbols). */
if (!initialized)
{
init_coding_once ();
init_syntax_once (); /* Create standard syntax table. */
init_category_once (); /* Create standard category table. */
- /* Must be done before init_buffer. */
- init_casetab_once ();
+ init_casetab_once (); /* Must be done before init_buffer_once. */
init_buffer_once (); /* Create buffer table and some buffers. */
init_minibuf_once (); /* Create list of minibuffers. */
/* Must precede init_window_once. */
syms_of_fileio ();
/* Before syms_of_coding to initialize Vgc_cons_threshold. */
syms_of_alloc ();
+ /* May call Ffuncall and so GC, thus the latter should be initialized. */
+ init_print_once ();
/* Before syms_of_coding because it initializes Qcharsetp. */
syms_of_charset ();
/* Before init_window_once, because it sets up the
tzset ();
#endif /* MSDOS */
+#ifdef HAVE_GFILENOTIFY
+ globals_of_gfilenotify ();
+#endif
+
#ifdef WINDOWSNT
globals_of_w32 ();
+#ifdef HAVE_W32NOTIFY
globals_of_w32notify ();
+#endif
/* Initialize environment from registry settings. */
init_environment (argv);
init_ntproc (dumping); /* must precede init_editfns. */
}
init_callproc (); /* Must follow init_cmdargs but not init_sys_modes. */
+ init_fileio ();
init_lread ();
#ifdef WINDOWSNT
/* Check to see if Emacs has been installed correctly. */
#ifdef WINDOWSNT
syms_of_ntproc ();
#endif /* WINDOWSNT */
-#if defined CYGWIN && defined HAVE_NTGUI
+#if defined CYGWIN
syms_of_cygw32 ();
#endif
syms_of_window ();
syms_of_gnutls ();
#endif
+#ifdef HAVE_GFILENOTIFY
+ syms_of_gfilenotify ();
+#endif /* HAVE_GFILENOTIFY */
+
#ifdef HAVE_INOTIFY
syms_of_inotify ();
#endif /* HAVE_INOTIFY */
#ifdef WINDOWSNT
syms_of_ntterm ();
+#ifdef HAVE_W32NOTIFY
syms_of_w32notify ();
+#endif /* HAVE_W32NOTIFY */
#endif /* WINDOWSNT */
syms_of_profiler ();
(Lisp_Object arg)
{
struct gcpro gcpro1;
- Lisp_Object hook;
int exit_code;
GCPRO1 (arg);
if (feof (stdin))
arg = Qt;
- hook = intern ("kill-emacs-hook");
- Frun_hooks (1, &hook);
-
+ /* Fsignal calls emacs_abort () if it sees that waiting_for_input is
+ set. */
+ waiting_for_input = 0;
+ Frun_hooks (1, &Qkill_emacs_hook);
UNGCPRO;
#ifdef HAVE_X_WINDOWS
kill it because we are exiting Emacs deliberately (not crashing).
Do it after shut_down_emacs, which does an auto-save. */
if (STRINGP (Vauto_save_list_file_name))
- unlink (SSDATA (Vauto_save_list_file_name));
+ {
+ Lisp_Object listfile;
+ listfile = Fexpand_file_name (Vauto_save_list_file_name, Qnil);
+ unlink (SSDATA (listfile));
+ }
if (INTEGERP (arg))
exit_code = (XINT (arg) < 0
{
char *path_copy = alloca (strlen (path) + 1);
strcpy (path_copy, path);
- dostounix_filename (path_copy);
+ dostounix_filename (path_copy, 0);
path = path_copy;
}
#endif
error ("This function can only be called after loading the init files");
/* Get rid of stdin, stdout and stderr. */
- nfd = open ("/dev/null", O_RDWR);
+ nfd = emacs_open ("/dev/null", O_RDWR, 0);
err |= nfd < 0;
err |= dup2 (nfd, 0) < 0;
err |= dup2 (nfd, 1) < 0;
DEFSYM (Qfile_name_handler_alist, "file-name-handler-alist");
DEFSYM (Qrisky_local_variable, "risky-local-variable");
DEFSYM (Qkill_emacs, "kill-emacs");
+ DEFSYM (Qkill_emacs_hook, "kill-emacs-hook");
#ifndef CANNOT_DUMP
defsubr (&Sdump_emacs);