Use new virtual IO api
[sxemacs] / src / dumper.c
index 1b0d3f8..e894834 100644 (file)
@@ -336,7 +336,7 @@ pdump_get_entry_list(const struct struct_description *sdesc)
        }
        pdump_struct_table.list[pdump_struct_table.count].list.first = 0;
        pdump_struct_table.list[pdump_struct_table.count].list.align =
-           ALIGNOF(max_align_t);
+           ALIGNOF(sxe_max_align_t);
        pdump_struct_table.list[pdump_struct_table.count].list.count = 0;
        pdump_struct_table.list[pdump_struct_table.count].sdesc = sdesc;
 
@@ -831,7 +831,7 @@ pdump_scan_by_alignment(void (*f) (pdump_entry_list_elt *,
 {
        int align;
 
-       for (align = ALIGNOF(max_align_t); align; align >>= 1) {
+       for (align = ALIGNOF(sxe_max_align_t); align; align >>= 1) {
                size_t i;
                pdump_entry_list_elt *elt;
 
@@ -994,11 +994,11 @@ pdump(const char *dumpfile)
        pdump_object_table = xnew_array(pdump_entry_list, lrecord_type_count);
        pdump_alert_undump_object = xnew_array(int, lrecord_type_count);
 
-       assert(ALIGNOF(max_align_t) <= pdump_align_table[0]);
+       assert(ALIGNOF(sxe_max_align_t) <= pdump_align_table[0]);
 
        for (i = 0; i < countof(pdump_align_table); i++)
-               if (pdump_align_table[i] > ALIGNOF(max_align_t))
-                       pdump_align_table[i] = ALIGNOF(max_align_t);
+               if (pdump_align_table[i] > ALIGNOF(sxe_max_align_t))
+                       pdump_align_table[i] = ALIGNOF(sxe_max_align_t);
 
        flush_all_buffer_local_cache();
 
@@ -1020,7 +1020,7 @@ pdump(const char *dumpfile)
 
        for (i = 0; i < lrecord_type_count; i++) {
                pdump_object_table[i].first = 0;
-               pdump_object_table[i].align = ALIGNOF(max_align_t);
+               pdump_object_table[i].align = ALIGNOF(sxe_max_align_t);
                pdump_object_table[i].count = 0;
                pdump_alert_undump_object[i] = 0;
        }
@@ -1028,7 +1028,7 @@ pdump(const char *dumpfile)
        pdump_struct_table.size = -1;
 
        pdump_opaque_data_list.first = 0;
-       pdump_opaque_data_list.align = ALIGNOF(max_align_t);
+       pdump_opaque_data_list.align = ALIGNOF(sxe_max_align_t);
        pdump_opaque_data_list.count = 0;
        depth = 0;
 
@@ -1062,11 +1062,11 @@ pdump(const char *dumpfile)
        header.nb_root_struct_ptrs = Dynarr_length(pdump_root_struct_ptrs);
        header.nb_opaques = Dynarr_length(pdump_opaques);
 
-       cur_offset = ALIGN_SIZE(sizeof(header), ALIGNOF(max_align_t));
+       cur_offset = ALIGN_SIZE(sizeof(header), ALIGNOF(sxe_max_align_t));
        max_size = 0;
 
        pdump_scan_by_alignment(pdump_allocate_offset);
-       cur_offset = ALIGN_SIZE(cur_offset, ALIGNOF(max_align_t));
+       cur_offset = ALIGN_SIZE(cur_offset, ALIGNOF(sxe_max_align_t));
        header.stab_offset = cur_offset;
 
        pdump_buf = xmalloc_atomic(max_size);
@@ -1086,7 +1086,7 @@ pdump(const char *dumpfile)
                } else {
 
                        fwrite(&header, sizeof(header), 1, pdump_out);
-                       PDUMP_ALIGN_OUTPUT(max_align_t);
+                       PDUMP_ALIGN_OUTPUT(sxe_max_align_t);
 
                        pdump_scan_by_alignment(pdump_dump_data);
 
@@ -1269,58 +1269,26 @@ static int pdump_file_get(const char *path)
        return 1;
 }
 
-static int pdump_file_try(char *exe_path, size_t size)
+static int
+pdump_file_try(char *exe_path, size_t size)
 {
-       char *w = exe_path + strlen(exe_path);
-       int sz;
-       size -= strlen(exe_path);
-
-       do {
-
-#ifdef EMACS_PATCH_LEVEL
-               sz = snprintf(w, size, "-%d.%d.%d-%08x.dmp",
-                        EMACS_MAJOR_VERSION, EMACS_MINOR_VERSION,
-                        EMACS_PATCH_LEVEL, dump_id);
-               if (sz >=0 && sz < size && pdump_file_get(exe_path)) {
-                       if (pdump_load_check()) {
-                               return 1;
-                       }
-                       pdump_free();
-               }
-#endif /* EMACS_PATCH_LEVEL */
-#ifdef EMACS_BETA_VERSION
-               sz = snprintf(w, size, "-%d.%d.%d-%08x.dmp",
-                        EMACS_MAJOR_VERSION, EMACS_MINOR_VERSION,
-                        EMACS_BETA_VERSION, dump_id);
-               if (sz >=0 && (size_t)sz < size && pdump_file_get(exe_path)) {
-                       if (pdump_load_check()) {
-                               return 1;
-                       }
-                       pdump_free();
-               }
-#endif /* EMACS_BETA_VERSION */
-
-               sz = snprintf(w, size, "-%08x.dmp", dump_id);
-               if (sz >=0 && (size_t)sz < size && pdump_file_get(exe_path)) {
+       static const char pdump_ext[] = ".dmp";
+       size_t exe_path_len = strlen(exe_path);
+       char *w = exe_path + exe_path_len;
+
+       if (exe_path_len + sizeof(pdump_ext) <= size) {
+               /* just hammer the pdump extension onto w */
+               memcpy(w, pdump_ext, sizeof(pdump_ext));
+               /* exists? */
+               if (pdump_file_get(exe_path)) {
+                       /* works? */
                        if (pdump_load_check()) {
                                return 1;
                        }
+                       /* bugger */
                        pdump_free();
                }
-
-               sz = snprintf(w, size, ".dmp");
-               if (sz >=0 && (size_t)sz < size && pdump_file_get(exe_path)) {
-                       if (pdump_load_check()) {
-                               return 1;
-                       }
-                       pdump_free();
-               }
-
-               do {
-                       w--;
-               } while (w > exe_path && !IS_DIRECTORY_SEP(*w) && (*w != '-')
-                        && (*w != '.'));
-       } while (w > exe_path && !IS_DIRECTORY_SEP(*w));
+       }
        return 0;
 }
 
@@ -1412,7 +1380,6 @@ int pdump_load(const char *argv0)
                        }
                        if (remain > 0) {
                                xstrncpy(w, name, remain);
-                               w[remain]='\0';
                        }
 
                        /* Check that exe_path is executable and not a