X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/4f8a4547454e24304b4182fbf4ae4b34a7bdc92b..333f9019e29e9b6de3a7ec07448be1d364ba540b:/src/emacs.c?ds=inline
diff --git a/src/emacs.c b/src/emacs.c
index 39870ec007..12a48b2655 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -82,6 +82,10 @@ along with GNU Emacs. If not, see . */
#include
#endif
+#ifdef HAVE_LIBXML2
+#include
+#endif
+
#ifndef O_RDWR
#define O_RDWR 2
#endif
@@ -150,6 +154,8 @@ Lisp_Object Qfile_name_handler_alist;
Lisp_Object Qrisky_local_variable;
+Lisp_Object Qkill_emacs;
+
/* If non-zero, Emacs should not attempt to use a window-specific code,
but instead should use the virtual terminal under which it was started. */
int inhibit_window_system;
@@ -158,7 +164,7 @@ int inhibit_window_system;
data on the first attempt to change it inside asynchronous code. */
int running_asynch_code;
-#if defined(HAVE_X_WINDOWS) || defined(HAVE_NS)
+#if defined (HAVE_X_WINDOWS) || defined (HAVE_NS)
/* If non-zero, -d was specified, meaning we're using some window system. */
int display_arg;
#endif
@@ -167,8 +173,10 @@ int display_arg;
Tells GC how to save a copy of the stack. */
char *stack_bottom;
+#if defined (DOUG_LEA_MALLOC) || defined (GNU_LINUX)
/* The address where the heap starts (from the first sbrk (0) call). */
static void *my_heap_start;
+#endif
#ifdef GNU_LINUX
/* The gap between BSS end and heap start as far as we can tell. */
@@ -802,7 +810,7 @@ main (int argc, char **argv)
{
static char heapexec[] = "EMACS_HEAP_EXEC=true";
/* Set this so we only do this once. */
- putenv(heapexec);
+ putenv (heapexec);
/* A flag to turn off address randomization which is introduced
in linux kernel shipped with fedora core 4 */
@@ -842,7 +850,7 @@ main (int argc, char **argv)
stack allocation routine for new process that the allocation
fails if stack limit is not on page boundary. So, round up the
new limit to page boundary. */
- newlim = (newlim + getpagesize () - 1) / getpagesize () * getpagesize();
+ newlim = (newlim + getpagesize () - 1) / getpagesize () * getpagesize ();
#endif
if (newlim > rlim.rlim_max)
{
@@ -943,7 +951,7 @@ main (int argc, char **argv)
}
/* Command line option --no-windows is deprecated and thus not mentioned
- in the manual and usage informations. */
+ in the manual and usage information. */
if (argmatch (argv, argc, "-nw", "--no-window-system", 6, NULL, &skip_args)
|| argmatch (argv, argc, "-nw", "--no-windows", 6, NULL, &skip_args))
inhibit_window_system = 1;
@@ -1068,15 +1076,17 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
if (!dname_arg || !strchr (dname_arg, '\n'))
{ /* In orig, child: now exec w/special daemon name. */
char fdStr[80];
+ int fdStrlen =
+ snprintf (fdStr, sizeof fdStr,
+ "--daemon=\n%d,%d\n%s", daemon_pipe[0],
+ daemon_pipe[1], dname_arg ? dname_arg : "");
- if (dname_arg && strlen (dname_arg) > 70)
+ if (! (0 <= fdStrlen && fdStrlen < sizeof fdStr))
{
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);
@@ -1089,7 +1099,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
|| strlen (dname_arg) < 1 || strlen (dname_arg) > 70)
{
fprintf (stderr, "emacs daemon: daemon name absent or too long\n");
- exit(1);
+ exit (1);
}
dname_arg2[0] = '\0';
sscanf (dname_arg, "\n%d,%d\n%s", &(daemon_pipe[0]), &(daemon_pipe[1]),
@@ -1107,7 +1117,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
fcntl (daemon_pipe[1], F_SETFD, FD_CLOEXEC);
#ifdef HAVE_SETSID
- setsid();
+ setsid ();
#endif
#else /* DOS_NT */
fprintf (stderr, "This platform does not support the -daemon flag.\n");
@@ -1120,7 +1130,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
#if defined (USG5) && defined (INTERRUPT_INPUT)
setpgrp ();
#endif
-#if defined (HAVE_GTK_AND_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
+#if defined (HAVE_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC)
{
extern void malloc_enable_thread (void);
@@ -1308,7 +1318,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
= argmatch (argv, argc, "-nsl", "--no-site-lisp", 11, NULL, &skip_args);
#ifdef HAVE_NS
- ns_alloc_autorelease_pool();
+ ns_alloc_autorelease_pool ();
if (!noninteractive)
{
#ifdef NS_IMPL_COCOA
@@ -1316,12 +1326,12 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
{
/* FIXME: Do the right thing if getenv returns NULL, or if
chdir fails. */
- if (!strncmp(argv[skip_args], "-psn", 4))
+ if (!strncmp (argv[skip_args], "-psn", 4))
{
skip_args += 1;
chdir (getenv ("HOME"));
}
- else if (skip_args+1 < argc && !strncmp(argv[skip_args+1], "-psn", 4))
+ else if (skip_args+1 < argc && !strncmp (argv[skip_args+1], "-psn", 4))
{
skip_args += 2;
chdir (getenv ("HOME"));
@@ -1358,24 +1368,17 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
/* If we have the form --display=NAME,
convert it into -d name.
This requires inserting a new element into argv. */
- if (displayname != 0 && skip_args - count_before == 1)
+ if (displayname && count_before < skip_args)
{
- char **new = (char **) xmalloc (sizeof (char *) * (argc + 2));
- int j;
-
- for (j = 0; j < count_before + 1; j++)
- new[j] = argv[j];
- new[count_before + 1] = (char *) "-d";
- new[count_before + 2] = displayname;
- for (j = count_before + 2; j count_before
- && argv[count_before + 1][1] == '-')
- argv[count_before + 1] = (char *) "-d";
if (! no_site_lisp)
{
@@ -1401,7 +1404,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
#endif
/* argmatch must not be used after here,
- except when bulding temacs
+ except when building temacs
because the -d argument has not been skipped in skip_args. */
#ifdef MSDOS
@@ -1553,9 +1556,9 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
#ifdef MSDOS
syms_of_xmenu ();
- syms_of_dosfns();
- syms_of_msdos();
- syms_of_win16select();
+ syms_of_dosfns ();
+ syms_of_msdos ();
+ syms_of_win16select ();
#endif /* MSDOS */
#ifdef HAVE_NS
@@ -1590,6 +1593,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
/* Initialization that must be done even if the global variable
initialized is non zero. */
#ifdef HAVE_NTGUI
+ globals_of_w32font ();
globals_of_w32fns ();
globals_of_w32menu ();
globals_of_w32select ();
@@ -1654,7 +1658,7 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
GNU/Linux and MinGW. It might work on some other systems too.
Give it a try and tell us if it works on your system. To compile
for profiling, use the configure option --enable-profiling. */
-#if defined (__FreeBSD__) || defined (GNU_LINUX) || defined(__MINGW32__)
+#if defined (__FreeBSD__) || defined (GNU_LINUX) || defined (__MINGW32__)
#ifdef PROFILING
if (initialized)
{
@@ -1838,8 +1842,8 @@ sort_args (int argc, char **argv)
0 for an option that takes no arguments,
1 for an option that takes one argument, etc.
-1 for an ordinary non-option argument. */
- int *options = (int *) xmalloc (sizeof (int) * argc);
- int *priority = (int *) xmalloc (sizeof (int) * argc);
+ int *options = xnmalloc (argc, sizeof *options);
+ int *priority = xnmalloc (argc, sizeof *priority);
int to = 1;
int incoming_used = 1;
int from;
@@ -1992,6 +1996,7 @@ all of which are called before Emacs is actually killed. */)
{
struct gcpro gcpro1;
Lisp_Object hook;
+ int exit_code;
GCPRO1 (arg);
@@ -2016,7 +2021,10 @@ all of which are called before Emacs is actually killed. */)
if (STRINGP (Vauto_save_list_file_name))
unlink (SSDATA (Vauto_save_list_file_name));
- exit (INTEGERP (arg) ? XINT (arg) : EXIT_SUCCESS);
+ exit_code = EXIT_SUCCESS;
+ if (noninteractive && (fflush (stdout) || ferror (stdout)))
+ exit_code = EXIT_FAILURE;
+ exit (INTEGERP (arg) ? XINT (arg) : exit_code);
}
@@ -2104,6 +2112,10 @@ shut_down_emacs (int sig, int no_x, Lisp_Object stuff)
#ifdef HAVE_NS
ns_term_shutdown (sig);
#endif
+
+#ifdef HAVE_LIBXML2
+ xmlCleanupParser ();
+#endif
}
@@ -2185,7 +2197,7 @@ You must run Emacs in batch mode in order to dump it. */)
memory_warnings (my_edata, malloc_warning);
}
#endif /* not WINDOWSNT */
-#if defined (HAVE_GTK_AND_PTHREAD) && !defined SYNC_INPUT
+#if defined (HAVE_PTHREAD) && !defined SYNC_INPUT
/* Pthread may call malloc before main, and then we will get an endless
loop, because pthread_self (see alloc.c) calls malloc the first time
it is called on some systems. */
@@ -2384,6 +2396,7 @@ syms_of_emacs (void)
{
DEFSYM (Qfile_name_handler_alist, "file-name-handler-alist");
DEFSYM (Qrisky_local_variable, "risky-local-variable");
+ DEFSYM (Qkill_emacs, "kill-emacs");
#ifndef CANNOT_DUMP
defsubr (&Sdump_emacs);