void macrodump(struct macrotable *node, FILE * f) { if (!node) return; macrodump(node->left, f); putstring(f, node->name); putstring(f, node->definition); putref(f, node->implementor); macrodump(node->right, f); }
void panic(const char *message) { char panicfile[2048]; FILE *f; log_status("PANIC: %s", message); fprintf(stderr, "PANIC: %s\n", message); /* shut down interface */ if (!forked_dump_process_flag) { emergency_shutdown(); } /* dump panic file */ snprintf(panicfile, sizeof(panicfile), "%s.PANIC", dumpfile); if ((f = fopen(panicfile, "wb")) == NULL) { perror("CANNOT OPEN PANIC FILE, YOU LOSE"); sync(); #ifdef NOCOREDUMP exit(135); #else /* !NOCOREDUMP */ # ifdef SIGIOT signal(SIGIOT, SIG_DFL); # endif abort(); #endif /* NOCOREDUMP */ } else { log_status("DUMPING: %s", panicfile); fprintf(stderr, "DUMPING: %s\n", panicfile); db_write(f); fclose(f); log_status("DUMPING: %s (done)", panicfile); fprintf(stderr, "DUMPING: %s (done)\n", panicfile); } /* Write out the macros */ snprintf(panicfile, sizeof(panicfile), "%s.PANIC", MACRO_FILE); if ((f = fopen(panicfile, "wb")) != NULL) { macrodump(macrotop, f); fclose(f); } else { perror("CANNOT OPEN MACRO PANIC FILE, YOU LOSE"); sync(); #ifdef NOCOREDUMP exit(135); #else /* !NOCOREDUMP */ #ifdef SIGIOT signal(SIGIOT, SIG_DFL); #endif abort(); #endif /* NOCOREDUMP */ } sync(); #ifdef NOCOREDUMP exit(136); #else /* !NOCOREDUMP */ #ifdef SIGIOT signal(SIGIOT, SIG_DFL); #endif abort(); #endif /* NOCOREDUMP */ }
void panic(const char *message) { char panicfile[2048]; FILE *f; log_status("PANIC: %s\n", message); fprintf(stderr, "PANIC: %s\n", message); /* shut down interface */ emergency_shutdown(); /* dump panic file */ sprintf(panicfile, "%s.PANIC", dumpfile); if ((f = fopen(panicfile, "w")) == NULL) { perror("CANNOT OPEN PANIC FILE, YOU LOSE"); #if defined(NOCOREDUMP) || defined(WINNT) _exit(135); #else /* !NOCOREDUMP */ # ifdef SIGIOT signal(SIGIOT, SIG_DFL); # endif abort(); #endif /* NOCOREDUMP */ } else { log_status("DUMP: %s\n", panicfile); fprintf(stderr, "DUMP: %s\n", panicfile); db_write(f); fclose(f); log_status("DUMP: %s (done)\n", panicfile); fprintf(stderr, "DUMP: %s (done)\n", panicfile); (void) unlink(DELTAFILE_NAME); } /* Write out the macros */ sprintf(panicfile, "%s.PANIC", MACRO_FILE); if ((f = fopen(panicfile, "w")) != NULL) { macrodump(macrotop, f); fclose(f); } else { perror("CANNOT OPEN MACRO PANIC FILE, YOU LOSE"); #if defined(NOCOREDUMP) || defined(WINNT) _exit(135); #else /* !NOCOREDUMP */ # ifdef SIGIOT signal(SIGIOT, SIG_DFL); # endif abort(); #endif /* NOCOREDUMP */ } #if defined(NOCOREDUMP) || defined(WINNT) _exit(136); #else /* !NOCOREDUMP */ # ifdef SIGIOT signal(SIGIOT, SIG_DFL); # endif abort(); #endif /* NOCOREDUMP */ }
static void dump_database_internal(void) { char tmpfile[2048]; FILE *f; snprintf(tmpfile, sizeof(tmpfile), "%s.#%d#", dumpfile, epoch - 1); (void) unlink(tmpfile); /* nuke our predecessor */ snprintf(tmpfile, sizeof(tmpfile), "%s.#%d#", dumpfile, epoch); if ((f = fopen(tmpfile, "wb")) != NULL) { db_write(f); fclose(f); #ifdef DISKBASE fclose(input_file); #endif #ifdef WIN32 (void) unlink(dumpfile); /* Delete old file before rename */ #endif if (rename(tmpfile, dumpfile) < 0) perror(tmpfile); #ifdef DISKBASE free((void *) in_filename); in_filename = string_dup(dumpfile); if ((input_file = fopen(in_filename, "rb")) == NULL) perror(dumpfile); #endif } else { perror(tmpfile); } /* Write out the macros */ snprintf(tmpfile, sizeof(tmpfile), "%s.#%d#", MACRO_FILE, epoch - 1); (void) unlink(tmpfile); snprintf(tmpfile, sizeof(tmpfile), "%s.#%d#", MACRO_FILE, epoch); if ((f = fopen(tmpfile, "wb")) != NULL) { macrodump(macrotop, f); fclose(f); #ifdef WIN32 unlink(MACRO_FILE); #endif if (rename(tmpfile, MACRO_FILE) < 0) perror(tmpfile); } else { perror(tmpfile); } sync(); #ifdef DISKBASE /* Only show dumpdone mesg if not doing background saves. */ if (tp_dbdump_warning && tp_dumpdone_warning) wall_and_flush(tp_dumpdone_mesg); propcache_hits = 0L; propcache_misses = 1L; #endif }
static void dump_database_internal(void) { char tmpfile[2048]; char timestring[1024]; struct tm *timestamp; time_t curtime; FILE *f; curtime = time((time_t *)NULL); timestamp = localtime(&curtime); tune_save_parmsfile(); format_time(timestring, 1024, "%Y.%m.%d", timestamp); if (tp_dbdump_warning) wall_and_flush(tp_dumping_mesg); #ifndef KEEPDUMPS sprintf(tmpfile, "%s.#%d#", dumpfile, epoch - 1); (void) unlink(tmpfile); /* nuke our predecessor */ #else /* sprintf(tmpfile, "backup/%s.%s.#%d#", dumpfile, timestring, epoch - 1); */ sprintf(tmpfile, "backup/%s.#%d#", dumpfile, epoch - 1); (void) rename(dumpfile, tmpfile); sprintf(tmpfile, "backup/%s.#%d#", dumpfile, epoch - 10); (void) unlink(tmpfile); #endif sprintf(tmpfile, "%s.#%d#", dumpfile, epoch); if ((f = fopen(tmpfile, "w")) != NULL) { db_write(f); fclose(f); #ifdef WIN32 if (unlink(dumpfile)) perror(dumpfile); #endif if (rename(tmpfile, dumpfile) < 0) perror(tmpfile); #ifdef DISKBASE #ifdef FLUSHCHANGED fclose(input_file); free((void *)in_filename); in_filename = string_dup(dumpfile); if ((input_file = fopen(in_filename, "r")) == NULL) perror(dumpfile); #ifdef DELTADUMPS fclose(delta_outfile); if ((delta_outfile = fopen(DELTAFILE_NAME, "w")) == NULL) perror(DELTAFILE_NAME); fclose(delta_infile); if ((delta_infile = fopen(DELTAFILE_NAME, "r")) == NULL) perror(DELTAFILE_NAME); #endif #endif #endif } else { perror(tmpfile); } /* Write out the macros */ sprintf(tmpfile, "%s.#%d#", MACRO_FILE, epoch - 1); (void) unlink(tmpfile); sprintf(tmpfile, "%s.#%d#", MACRO_FILE, epoch); if ((f = fopen(tmpfile, "w")) != NULL) { macrodump(macrotop, f); fclose(f); #ifdef WIN32 if (unlink(MACRO_FILE)) perror(MACRO_FILE); #endif if (rename(tmpfile, MACRO_FILE) < 0) perror(tmpfile); } else { perror(tmpfile); } if (tp_dbdump_warning) wall_and_flush(tp_dumpdone_mesg); #ifdef DISKBASE propcache_hits = 0L; propcache_misses = 1L; #endif if (tp_periodic_program_purge) free_unused_programs(); #ifdef DISKBASE dispose_all_oldprops(); #endif }