- FILE * file = fopen(savefile_tmp, "w");
- exit_err(0 == file, world, err_open);
- if ( write_uint32_bigendian(world->seed, file)
- || write_uint32_bigendian(world->turn, file)
- || write_uint16_bigendian(world->score, file)
- || write_uint16_bigendian(world->player->pos.y + 1, file)
- || write_uint16_bigendian(world->player->pos.x + 1, file)
- || write_uint8(world->player->hitpoints, file)
- || write_map_objects(world, world->monster, file)
- || write_map_objects(world, world->item, file))
- {
- exit_err(1, world, err_write);
- }
- exit_err(fclose(file), world, err_close);
- if (!access(savefile, F_OK))
- {
- exit_err(unlink(savefile), world, err_unl);
- }
- exit_err(rename(savefile_tmp, savefile), world, err_move);
+ FILE * file = try_fopen(savefile_tmp, "w", f_name);
+ char line[12];
+ sprintf(line, "%u\n", world.mapseed);
+ try_fwrite(line, strlen(line), 1, file, f_name);
+ sprintf(line, "%u\n", world.seed);
+ try_fwrite(line, strlen(line), 1, file, f_name);
+ sprintf(line, "%u\n", world.turn);
+ try_fwrite(line, strlen(line), 1, file, f_name);
+ sprintf(line, "%u\n", world.score);
+ try_fwrite(line, strlen(line), 1, file, f_name);
+ write_map_objects(file);
+ try_fclose_unlink_rename(file, savefile_tmp, savefile, f_name);