#include <config.h>
#include "lisp.h"
+
#include "dump-id.h"
#include "specifier.h"
#include "alloc.h"
#include "console-stream.h"
#include "dumper.h"
-#ifdef WINDOWSNT
-#define WINDOWS_LEAN_AND_MEAN
-#include <windows.h>
-#define PATH_MAX MAXPATHLEN
+#ifdef WIN32_NATIVE
+#include "nt.h"
#else
#ifdef HAVE_MMAP
#include <sys/mman.h>
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
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];
case XD_INT:
case XD_LONG:
case XD_BYTECOUNT:
- case XD_LO_RESET_NIL:
case XD_INT_RESET:
case XD_LO_LINK:
break;
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; j<num; j++)
- ((EMACS_INT *)rdata)[j] = pdump_qnil->save_offset;
- break;
- }
case XD_INT_RESET:
{
EMACS_INT val = desc[pos].data1;
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;
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;
}
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;
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. */
{
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;
}
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;
}
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)
{
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)
return 1;
}
-#else /* !WINDOWSNT */
+#else /* !WIN32_NATIVE */
static void *pdump_mallocadr;
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)
return 1;
pdump_free();
}
-
+
sprintf (w, "-%08x.dmp", dump_id);
if (pdump_file_get (exe_path))
{
return 1;
pdump_free();
}
-
+
sprintf (w, ".dmp");
if (pdump_file_get (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;
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;
p = dir + strlen(dir);
while (p != dir && !IS_ANY_SEP (p[-1])) p--;
-
+
if (p != dir)
{
/* invocation-name includes a directory component -- presumably it
*w++ = '/';
}
strcpy(w, name);
-
+
/* ### #$%$#^$^@%$^#%@$ ! */
#ifdef access
#undef access
#endif
-
+
if (!access (exe_path, X_OK))
break;
if (!*p)
sprintf (exe_path, "./%s", name);
break;
}
- path = p+1;
+ path = p+1;
}
}
-#endif /* WINDOWSNT */
+#endif /* WIN32_NATIVE */
if (pdump_file_try (exe_path))
{
return 1;
}
-#ifdef WINDOWSNT
+#ifdef WIN32_NATIVE
if (pdump_resource_get ())
{
if (pdump_load_check ())