XEmacs 21.4.11 "Native Windows TTY Support".
[chise/xemacs-chise.git.1] / src / dumper.c
index 640309d..b666812 100644 (file)
@@ -29,6 +29,7 @@ Boston, MA 02111-1307, USA.  */
 #include "sysfile.h"
 #include "console-stream.h"
 #include "dumper.h"
+#include "sysdep.h"
 
 #ifdef WIN32_NATIVE
 #include "nt.h"
@@ -414,7 +415,7 @@ pdump_get_indirect_count (EMACS_INT code,
                          const struct lrecord_description *idesc,
                          const void *idata)
 {
-  EMACS_INT count;
+  EMACS_INT count = 0;         /* initialize to shut up GCC */
   const void *irdata;
 
   int line = XD_INDIRECT_VAL (code);
@@ -818,7 +819,7 @@ pdump_scan_by_alignment (void (*f)(pdump_entry_list_elt *,
 
   for (align = ALIGNOF (max_align_t); align; align>>=1)
     {
-      int i;
+      size_t i;
       pdump_entry_list_elt *elt;
 
       for (i=0; i<lrecord_type_count; i++)
@@ -843,7 +844,7 @@ pdump_scan_by_alignment (void (*f)(pdump_entry_list_elt *,
 static void
 pdump_dump_root_struct_ptrs (void)
 {
-  int i;
+  size_t i;
   size_t count = Dynarr_length (pdump_root_struct_ptrs);
   pdump_static_pointer *data = alloca_array (pdump_static_pointer, count);
   for (i = 0; i < count; i++)
@@ -870,7 +871,7 @@ pdump_dump_opaques (void)
 static void
 pdump_dump_rtables (void)
 {
-  int i;
+  size_t i;
   pdump_entry_list_elt *elt;
   pdump_reloc_table rt;
 
@@ -922,7 +923,7 @@ pdump_dump_root_objects (void)
 {
   size_t count = (Dynarr_length (pdump_root_objects) +
                  Dynarr_length (pdump_weak_object_chains));
-  size_t i;
+  EMACS_INT i;
 
   PDUMP_WRITE_ALIGNED (size_t, count);
   PDUMP_ALIGN_OUTPUT (pdump_static_Lisp_Object);
@@ -969,7 +970,7 @@ pdump_dump_root_objects (void)
 void
 pdump (void)
 {
-  int i;
+  size_t i;
   Lisp_Object t_console, t_device, t_frame;
   int none;
   pdump_header header;
@@ -990,7 +991,7 @@ pdump (void)
   t_frame   = Vterminal_frame;   Vterminal_frame   = Qnil;
   t_device  = Vterminal_device;  Vterminal_device  = Qnil;
 
-  dump_add_opaque (&lrecord_implementations_table,
+  dump_add_opaque ((void *) &lrecord_implementations_table,
                   lrecord_type_count * sizeof (lrecord_implementations_table[0]));
   dump_add_opaque (&lrecord_markers,
                   lrecord_type_count * sizeof (lrecord_markers[0]));
@@ -1027,7 +1028,7 @@ pdump (void)
   if (!none)
     return;
 
-  for (i=0; i<Dynarr_length (pdump_root_struct_ptrs); i++)
+  for (i=0; i<(size_t)Dynarr_length (pdump_root_struct_ptrs); i++)
     {
       pdump_root_struct_ptr info = Dynarr_at (pdump_root_struct_ptrs, i);
       pdump_register_struct (*(info.ptraddress), info.desc, 1);
@@ -1364,9 +1365,11 @@ pdump_file_try (char *exe_path)
 int
 pdump_load (const char *argv0)
 {
-  char exe_path[PATH_MAX];
+  char exe_path[PATH_MAX], real_exe_path[PATH_MAX];
 #ifdef WIN32_NATIVE
   GetModuleFileName (NULL, exe_path, PATH_MAX);
+  /* #### urk, needed for xrealpath() below */
+  Vdirectory_sep_char = make_char ('\\');
 #else /* !WIN32_NATIVE */
   char *w;
   const char *dir, *p;
@@ -1430,7 +1433,11 @@ pdump_load (const char *argv0)
     }
 #endif /* WIN32_NATIVE */
 
-  if (pdump_file_try (exe_path))
+  /* Save exe_path because pdump_file_try() modifies it */
+  strcpy(real_exe_path, exe_path);
+  if (pdump_file_try (exe_path)
+      || (xrealpath(real_exe_path, real_exe_path)
+         && pdump_file_try (real_exe_path)))
     {
       pdump_load_finish ();
       return 1;