bool_t write_player_data(player_db_data_t *db_data) { write_db_file(&db_data->key_data, get_db_file(DB_FILE_KEYS)); write_db_file(&db_data->att_data, get_db_file(DB_FILE_ATTRIBUTES)); write_db_file(&db_data->career_data, get_db_file(DB_FILE_CAREER)); write_db_file(&db_data->season_data, get_db_file(DB_FILE_SEASON)); return TRUE; }
static int dump_database(Dump_Reason reason) { Stream *s = new_stream(100); char *temp_name; FILE *f; int success; retryDumping: stream_printf(s, "%s.#%d#", dump_db_name, dump_generation); remove(reset_stream(s)); /* Remove previous checkpoint */ if (reason == DUMP_PANIC) stream_printf(s, "%s.PANIC", dump_db_name); else { dump_generation++; stream_printf(s, "%s.#%d#", dump_db_name, dump_generation); } temp_name = reset_stream(s); oklog("%s on %s ...\n", reason_names[reason], temp_name); #ifdef UNFORKED_CHECKPOINTS reset_command_history(); #else if (reason == DUMP_CHECKPOINT) { switch (fork_server("checkpointer")) { case FORK_PARENT: reset_command_history(); free_stream(s); return 1; case FORK_ERROR: free_stream(s); return 0; case FORK_CHILD: set_server_cmdline("(MOO checkpointer)"); break; } } #endif success = 1; if ((f = fopen(temp_name, "w")) != 0) { dbpriv_set_dbio_output(f); if (!write_db_file(reason_names[reason])) { log_perror("Trying to dump database"); fclose(f); remove(temp_name); if (reason == DUMP_CHECKPOINT) { errlog("Abandoning checkpoint attempt...\n"); success = 0; } else { int retry_interval = 60; errlog("Waiting %d seconds and retrying dump...\n", retry_interval); timer_sleep(retry_interval); goto retryDumping; } } else { fclose(f); oklog("%s on %s finished\n", reason_names[reason], temp_name); if (reason != DUMP_PANIC) { remove(dump_db_name); if (rename(temp_name, dump_db_name) != 0) { log_perror("Renaming temporary dump file"); success = 0; } } } } else { log_perror("Opening temporary dump file"); success = 0; } free_stream(s); #ifndef UNFORKED_CHECKPOINTS if (reason == DUMP_CHECKPOINT) /* We're a child, so we'd better go away. */ exit(!success); #endif return success; }