X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/a0b5606ec769968b10c765f8ff50f312d691ef62..refs/heads/wip:/src/unexcoff.c
diff --git a/src/unexcoff.c b/src/unexcoff.c
index 5ac8ea8c9b..0e47bdd865 100644
--- a/src/unexcoff.c
+++ b/src/unexcoff.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1985-1988, 1992-1994, 2001-2013 Free Software
+/* Copyright (C) 1985-1988, 1992-1994, 2001-2014 Free Software
* Foundation, Inc.
This file is part of GNU Emacs.
@@ -65,6 +65,8 @@ along with GNU Emacs. If not, see . */
#include /* for _crt0_startup_flags and its bits */
#include
static int save_djgpp_startup_flags;
+#include
+static struct __atexit *save_atexit_ptr;
#define filehdr external_filehdr
#define scnhdr external_scnhdr
#define syment external_syment
@@ -82,7 +84,7 @@ struct aouthdr
unsigned long text_start;/* base of text used for this file */
unsigned long data_start;/* base of data used for this file */
};
-#endif /* not MSDOS */
+#endif /* MSDOS */
#else /* not HAVE_COFF_H */
#include
#endif /* not HAVE_COFF_H */
@@ -120,7 +122,7 @@ static int pagemask;
into an int which is the number of a byte.
This is a no-op on ordinary machines, but not on all. */
-#define ADDR_CORRECT(x) ((char *)(x) - (char*)0)
+#define ADDR_CORRECT(x) ((char *) (x) - (char *) 0)
#include "lisp.h"
@@ -368,6 +370,12 @@ copy_text_and_data (int new, int a_out)
and which might change the way that dumped Emacs works. */
save_djgpp_startup_flags = _crt0_startup_flags;
_crt0_startup_flags &= ~(_CRT0_FLAG_NO_LFN | _CRT0_FLAG_NEARPTR);
+
+ /* Zero out the 'atexit' chain in the dumped executable, to avoid
+ calling the atexit functions twice. (emacs.c:main installs an
+ atexit function.) */
+ save_atexit_ptr = __atexit_ptr;
+ __atexit_ptr = NULL;
#endif
lseek (new, (long) text_scnptr, 0);
@@ -386,6 +394,9 @@ copy_text_and_data (int new, int a_out)
/* Restore the startup flags. */
_crt0_startup_flags = save_djgpp_startup_flags;
+
+ /* Restore the atexit chain. */
+ __atexit_ptr = save_atexit_ptr;
#endif