X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fdumper.c;h=93083dac33641ebc61847cbfe6cbc516ec657ffb;hb=8fe5a019c2a25ef6394edc6eb477a6f69b828682;hp=0f426423f262826672bd60b061ef4f719aab2a1c;hpb=a1655b870904de973c366d85ebdc8adde4ef5e1e;p=chise%2Fxemacs-chise.git- diff --git a/src/dumper.c b/src/dumper.c index 0f42642..93083da 100644 --- a/src/dumper.c +++ b/src/dumper.c @@ -22,6 +22,7 @@ Boston, MA 02111-1307, USA. */ #include #include "lisp.h" + #include "dump-id.h" #include "specifier.h" #include "alloc.h" @@ -30,10 +31,8 @@ Boston, MA 02111-1307, USA. */ #include "console-stream.h" #include "dumper.h" -#ifdef WINDOWSNT -#define WINDOWS_LEAN_AND_MEAN -#include -#define PATH_MAX MAXPATHLEN +#ifdef WIN32_NATIVE +#include "nt.h" #else #ifdef HAVE_MMAP #include @@ -107,7 +106,7 @@ typedef struct char *pdump_start, *pdump_end; static size_t pdump_length; -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE // Handle for the dump file HANDLE pdump_hFile = INVALID_HANDLE_VALUE; // Handle for the file mapping object for the dump file @@ -169,7 +168,6 @@ typedef struct static pdump_entry_list pdump_object_table[256]; static pdump_entry_list pdump_opaque_data_list; static pdump_struct_list pdump_struct_table; -static pdump_entry_list_elmt *pdump_qnil; static int pdump_alert_undump_object[256]; @@ -358,7 +356,6 @@ pdump_register_sub (const void *data, const struct lrecord_description *desc, in case XD_INT: case XD_LONG: case XD_BYTECOUNT: - case XD_LO_RESET_NIL: case XD_INT_RESET: case XD_LO_LINK: break; @@ -543,16 +540,6 @@ pdump_dump_data (pdump_entry_list_elmt *elmt, const struct lrecord_description * case XD_LONG: case XD_BYTECOUNT: break; - case XD_LO_RESET_NIL: - { - EMACS_INT num = desc[pos].data1; - int j; - if (XD_IS_INDIRECT (num)) - num = pdump_get_indirect_count (num, desc, elmt->obj); - for (j=0; jsave_offset; - break; - } case XD_INT_RESET: { EMACS_INT val = desc[pos].data1; @@ -669,12 +656,11 @@ pdump_reloc_one (void *data, EMACS_INT delta, const struct lrecord_description * if (POINTER_TYPE_P (XTYPE (*pobj)) && ! EQ (*pobj, Qnull_pointer)) - XSETOBJ (*pobj, XTYPE (*pobj), (char *) XPNTR (*pobj) + delta); + XSETOBJ (*pobj, (char *) XPNTR (*pobj) + delta); break; } case XD_LISP_OBJECT_ARRAY: - case XD_LO_RESET_NIL: { EMACS_INT num = desc[pos].data1; int j; @@ -687,7 +673,7 @@ pdump_reloc_one (void *data, EMACS_INT delta, const struct lrecord_description * if (POINTER_TYPE_P (XTYPE (*pobj)) && ! EQ (*pobj, Qnull_pointer)) - XSETOBJ (*pobj, XTYPE (*pobj), (char *) XPNTR (*pobj) + delta); + XSETOBJ (*pobj, (char *) XPNTR (*pobj) + delta); } break; } @@ -906,6 +892,8 @@ pdump (void) int none; dump_header hd; + flush_all_buffer_local_cache (); + /* These appear in a DEFVAR_LISP, which does a staticpro() */ t_console = Vterminal_console; t_frame = Vterminal_frame; @@ -963,7 +951,6 @@ pdump (void) max_size = 0; pdump_scan_by_alignment (pdump_allocate_offset); - pdump_qnil = pdump_get_entry (XRECORD_LHEADER (Qnil)); pdump_buf = xmalloc (max_size); /* Avoid use of the `open' macro. We want the real function. */ @@ -1024,7 +1011,7 @@ static int pdump_load_finish (void) { Lisp_Object obj = PDUMP_READ (p, Lisp_Object); if (POINTER_TYPE_P (XTYPE (obj))) - XSETOBJ (obj, XTYPE (obj), (char *) XPNTR (obj) + delta); + XSETOBJ (obj, (char *) XPNTR (obj) + delta); *staticvec[i] = obj; } @@ -1082,7 +1069,7 @@ static int pdump_load_finish (void) Lisp_Object obj = PDUMP_READ (p, Lisp_Object); if (POINTER_TYPE_P (XTYPE (obj))) - XSETOBJ (obj, XTYPE (obj), (char *) XPNTR (obj) + delta); + XSETOBJ (obj, (char *) XPNTR (obj) + delta); *var = obj; } @@ -1104,13 +1091,10 @@ static int pdump_load_finish (void) p += sizeof (Lisp_Object) * rt.count; } - /* Put back noninteractive1 to its real value */ - noninteractive1 = noninteractive; - return 1; } -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE /* Free the mapped file if we decide we don't want it after all */ static void pdump_file_unmap(void) { @@ -1122,11 +1106,11 @@ static void pdump_file_unmap(void) static int pdump_file_get(const char *path) { - pdump_hFile = CreateFile (path, + pdump_hFile = CreateFile (path, GENERIC_READ + GENERIC_WRITE, /* Required for copy on write */ 0, /* Not shared */ NULL, /* Not inheritable */ - OPEN_EXISTING, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); /* No template file */ if (pdump_hFile == INVALID_HANDLE_VALUE) @@ -1198,7 +1182,7 @@ static int pdump_resource_get (void) return 1; } -#else /* !WINDOWSNT */ +#else /* !WIN32_NATIVE */ static void *pdump_mallocadr; @@ -1242,12 +1226,12 @@ static int pdump_file_get(const char *path) pdump_mallocadr = xmalloc(pdump_length+255); pdump_free = pdump_file_free; pdump_start = (char *)((255 + (unsigned long)pdump_mallocadr) & ~255); - read (pdump_fd, pdump_start, pdump_length); + read (fd, pdump_start, pdump_length); - close (pdump_fd); + close (fd); return 1; } -#endif /* !WINDOWSNT */ +#endif /* !WIN32_NATIVE */ static int pdump_file_try(char *exe_path) @@ -1264,7 +1248,7 @@ static int pdump_file_try(char *exe_path) return 1; pdump_free(); } - + sprintf (w, "-%08x.dmp", dump_id); if (pdump_file_get (exe_path)) { @@ -1272,7 +1256,7 @@ static int pdump_file_try(char *exe_path) return 1; pdump_free(); } - + sprintf (w, ".dmp"); if (pdump_file_get (exe_path)) { @@ -1280,10 +1264,10 @@ static int pdump_file_try(char *exe_path) return 1; pdump_free(); } - + do w--; - while (w>exe_path && !IS_DIRECTORY_SEP (*w) && (*w != '-') && (*w != '.')); + while (w>exe_path && !IS_DIRECTORY_SEP (*w) && (*w != '-') && (*w != '.')); } while (w>exe_path && !IS_DIRECTORY_SEP (*w)); return 0; @@ -1292,9 +1276,9 @@ static int pdump_file_try(char *exe_path) int pdump_load(const char *argv0) { char exe_path[PATH_MAX]; -#ifdef WINDOWSNT - GetModuleFileName (NULL, exe_path, PATH_MAX); -#else /* !WINDOWSNT */ +#ifdef WIN32_NATIVE + GetModuleFileName (NULL, exe_path, PATH_MAX); +#else /* !WIN32_NATIVE */ char *w; const char *dir, *p; @@ -1307,7 +1291,7 @@ int pdump_load(const char *argv0) p = dir + strlen(dir); while (p != dir && !IS_ANY_SEP (p[-1])) p--; - + if (p != dir) { /* invocation-name includes a directory component -- presumably it @@ -1338,12 +1322,12 @@ int pdump_load(const char *argv0) *w++ = '/'; } strcpy(w, name); - + /* ### #$%$#^$^@%$^#%@$ ! */ #ifdef access #undef access #endif - + if (!access (exe_path, X_OK)) break; if (!*p) @@ -1352,10 +1336,10 @@ int pdump_load(const char *argv0) sprintf (exe_path, "./%s", name); break; } - path = p+1; + path = p+1; } } -#endif /* WINDOWSNT */ +#endif /* WIN32_NATIVE */ if (pdump_file_try (exe_path)) { @@ -1363,7 +1347,7 @@ int pdump_load(const char *argv0) return 1; } -#ifdef WINDOWSNT +#ifdef WIN32_NATIVE if (pdump_resource_get ()) { if (pdump_load_check ())