Increase compartmentalization of Nextstep builds rules,
[bpt/emacs.git] / src / unexcw.c
index 046c8f7..96c4b4a 100644 (file)
@@ -1,15 +1,14 @@
 /* unexec() support for Cygwin;
    complete rewrite of xemacs Cygwin unexec() code
 
-   Copyright (C) 2004
-   Free Software Foundation, Inc.
+   Copyright (C) 2004-2012 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,11 +16,11 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
-along with GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
+#include "unexec.h"
+
 #include <lisp.h>
 #include <stdio.h>
 #include <fcntl.h>
@@ -33,6 +32,8 @@ Boston, MA 02111-1307, USA.  */
 
 extern int bss_sbrk_did_unexec;
 
+extern int __malloc_initialized;
+
 /* emacs symbols that indicate where bss and data end for emacs internals */
 extern char my_endbss[];
 extern char my_edata[];
@@ -210,9 +211,12 @@ fixup_executable (int fd)
            lseek (fd, (long) (exe_header->section_header[i].s_scnptr),
                   SEEK_SET);
          assert (ret != -1);
+         /* force the dumped emacs to reinitialize malloc */
+         __malloc_initialized = 0;
          ret =
            write (fd, (char *) start_address,
                   my_endbss - (char *) start_address);
+         __malloc_initialized = 1;
          assert (ret == (my_endbss - (char *) start_address));
          if (debug_unexcw)
            printf ("         .bss, mem start 0x%08x mem length %d\n",
@@ -249,9 +253,8 @@ add_exe_suffix_if_necessary (const char *name, char *modified)
   return (modified);
 }
 
-int
-unexec (char *outfile, char *infile, unsigned start_data, unsigned d1,
-       unsigned d2)
+void
+unexec (const char *outfile, const char *infile)
 {
   char infile_buffer[FILENAME_MAX];
   char outfile_buffer[FILENAME_MAX];
@@ -263,8 +266,8 @@ unexec (char *outfile, char *infile, unsigned start_data, unsigned d1,
   if (bss_sbrk_did_unexec)
     {
       /* can only dump once */
-      printf ("You can only dump emacs once on this platform.\n");
-      return (1);
+      printf ("You can only dump Emacs once on this platform.\n");
+      return;
     }
 
   report_sheap_usage (1);
@@ -299,9 +302,4 @@ unexec (char *outfile, char *infile, unsigned start_data, unsigned d1,
 
   ret = close (fd_out);
   assert (ret == 0);
-
-  return (0);
 }
-
-/* arch-tag: fc44f6c3-ca0a-45e0-a5a2-58b6101b1e65
-   (do not change this comment) */