OSDN Git Service

[Refactor] #40467 Moved load_floor() from load.c/load.h to floor-loader.c/h
authorHourier <hourier@users.sourceforge.jp>
Sun, 5 Jul 2020 10:05:04 +0000 (19:05 +0900)
committerHourier <hourier@users.sourceforge.jp>
Sun, 5 Jul 2020 10:05:04 +0000 (19:05 +0900)
src/floor/floor-save.c
src/savedata/dungeon-loader.c
src/savedata/floor-loader.c
src/savedata/floor-loader.h
src/savedata/load.c
src/savedata/load.h
src/savedata/save.c

index 9a33b61..28d5708 100644 (file)
@@ -55,7 +55,7 @@
 #include "player/player-class.h"
 #include "player/player-personalities-types.h"
 #include "player/special-defense-types.h"
-#include "savedata/load.h"
+#include "savedata/floor-loader.h"
 #include "savedata/save.h"
 #include "spell-kind/spells-floor.h"
 #include "system/system-variables.h"
index 436ddf3..751e580 100644 (file)
@@ -5,7 +5,6 @@
 #include "savedata/floor-loader.h"
 #include "savedata/load-util.h"
 #include "savedata/load-v1-5-0.h"
-#include "savedata/load.h" // 暫定、load_floor().
 #include "savedata/save.h"
 #include "world/world.h"
 
index cf9815a..eadd750 100644 (file)
@@ -4,6 +4,8 @@
 #include "game-option/birth-options.h"
 #include "grid/feature.h"
 #include "grid/grid.h"
+#include "io/files-util.h"
+#include "io/uid-checker.h"
 #include "monster-race/monster-race.h"
 #include "monster/monster-info.h"
 #include "monster/monster-list.h"
 #include "savedata/load-util.h"
 #include "savedata/load-v1-5-0.h"
 #include "savedata/old-feature-types.h"
+#include "savedata/save.h"
+#include "system/angband-version.h"
 #include "system/object-type-definition.h"
+#include "util/angband-files.h"
 #include "world/world-object.h"
 #include "world/world.h"
 
@@ -218,3 +223,131 @@ errr rd_saved_floor(player_type *player_ptr, saved_floor_type *sf_ptr)
 
     return 0;
 }
+
+/*!
+ * @brief 保存フロア読み込みのサブ関数 / Actually load and verify a floor save data
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param sf_ptr 保存フロア読み込み先
+ * @return 成功したらtrue
+ */
+static bool load_floor_aux(player_type *player_ptr, saved_floor_type *sf_ptr)
+{
+    u32b n_x_check, n_v_check;
+    u32b o_x_check, o_v_check;
+
+    load_xor_byte = 0;
+    byte tmp8u;
+    rd_byte(&tmp8u);
+
+    v_check = 0L;
+    x_check = 0L;
+
+    current_world_ptr->h_ver_extra = H_VER_EXTRA;
+    current_world_ptr->h_ver_patch = H_VER_PATCH;
+    current_world_ptr->h_ver_minor = H_VER_MINOR;
+    current_world_ptr->h_ver_major = H_VER_MAJOR;
+
+    u32b tmp32u;
+    rd_u32b(&tmp32u);
+    if (saved_floor_file_sign != tmp32u)
+        return FALSE;
+
+    if (rd_saved_floor(player_ptr, sf_ptr))
+        return FALSE;
+
+    n_v_check = v_check;
+    rd_u32b(&o_v_check);
+
+    if (o_v_check != n_v_check)
+        return FALSE;
+
+    n_x_check = x_check;
+    rd_u32b(&o_x_check);
+
+    if (o_x_check != n_x_check)
+        return FALSE;
+    return TRUE;
+}
+
+/*!
+ * @brief 一時保存フロア情報を読み込む / Attempt to load the temporarily saved-floor data
+ * @param player_ptr プレーヤーへの参照ポインタ
+ * @param sf_ptr 保存フロア読み込み先
+ * @param mode オプション
+ * @return 成功したらtrue
+ */
+bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode)
+{
+    /*
+     * Temporary files are always written in system depended kanji
+     * code.
+     */
+#ifdef JP
+#ifdef EUC
+    kanji_code = 2;
+#endif
+#ifdef SJIS
+    kanji_code = 3;
+#endif
+#else
+    kanji_code = 1;
+#endif
+
+    FILE *old_fff = NULL;
+    byte old_xor_byte = 0;
+    u32b old_v_check = 0;
+    u32b old_x_check = 0;
+    byte old_h_ver_major = 0;
+    byte old_h_ver_minor = 0;
+    byte old_h_ver_patch = 0;
+    byte old_h_ver_extra = 0;
+    if (mode & SLF_SECOND) {
+        old_fff = loading_savefile;
+        old_xor_byte = load_xor_byte;
+        old_v_check = v_check;
+        old_x_check = x_check;
+        old_h_ver_major = current_world_ptr->h_ver_major;
+        old_h_ver_minor = current_world_ptr->h_ver_minor;
+        old_h_ver_patch = current_world_ptr->h_ver_patch;
+        old_h_ver_extra = current_world_ptr->h_ver_extra;
+    }
+
+    char floor_savefile[1024];
+    sprintf(floor_savefile, "%s.F%02d", savefile, (int)sf_ptr->savefile_id);
+
+    safe_setuid_grab(player_ptr);
+    loading_savefile = angband_fopen(floor_savefile, "rb");
+    safe_setuid_drop();
+
+    bool is_save_successful = TRUE;
+    if (!loading_savefile)
+        is_save_successful = FALSE;
+
+    if (is_save_successful) {
+        is_save_successful = load_floor_aux(player_ptr, sf_ptr);
+        if (ferror(loading_savefile))
+            is_save_successful = FALSE;
+
+        angband_fclose(loading_savefile);
+        safe_setuid_grab(player_ptr);
+        if (!(mode & SLF_NO_KILL))
+            (void)fd_kill(floor_savefile);
+
+        safe_setuid_drop();
+    }
+
+    if (mode & SLF_SECOND) {
+        loading_savefile = old_fff;
+        load_xor_byte = old_xor_byte;
+        v_check = old_v_check;
+        x_check = old_x_check;
+        current_world_ptr->h_ver_major = old_h_ver_major;
+        current_world_ptr->h_ver_minor = old_h_ver_minor;
+        current_world_ptr->h_ver_patch = old_h_ver_patch;
+        current_world_ptr->h_ver_extra = old_h_ver_extra;
+    }
+
+    byte old_kanji_code = kanji_code;
+    kanji_code = old_kanji_code;
+    return is_save_successful;
+}
index 7223652..928f436 100644 (file)
@@ -4,3 +4,4 @@
 #include "floor/floor-save.h"
 
 errr rd_saved_floor(player_type *player_ptr, saved_floor_type *sf_ptr);
+bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode);
index 5ea5756..23cd376 100644 (file)
@@ -617,138 +617,11 @@ errr rd_savefile_new(player_type *player_ptr)
     safe_setuid_drop();
     if (!loading_savefile)
         return -1;
-    errr err = rd_savefile_new_aux(player_ptr);
 
+    errr err = rd_savefile_new_aux(player_ptr);
     if (ferror(loading_savefile))
         err = -1;
+
     angband_fclose(loading_savefile);
     return err;
 }
-
-/*!
- * @brief 保存フロア読み込みのサブ関数 / Actually load and verify a floor save data
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param sf_ptr 保存フロア読み込み先
- * @return 成功したらtrue
- */
-static bool load_floor_aux(player_type *player_ptr, saved_floor_type *sf_ptr)
-{
-    u32b n_x_check, n_v_check;
-    u32b o_x_check, o_v_check;
-
-    load_xor_byte = 0;
-    byte tmp8u;
-    rd_byte(&tmp8u);
-
-    v_check = 0L;
-    x_check = 0L;
-
-    current_world_ptr->h_ver_extra = H_VER_EXTRA;
-    current_world_ptr->h_ver_patch = H_VER_PATCH;
-    current_world_ptr->h_ver_minor = H_VER_MINOR;
-    current_world_ptr->h_ver_major = H_VER_MAJOR;
-
-    u32b tmp32u;
-    rd_u32b(&tmp32u);
-    if (saved_floor_file_sign != tmp32u)
-        return FALSE;
-
-    if (rd_saved_floor(player_ptr, sf_ptr))
-        return FALSE;
-
-    n_v_check = v_check;
-    rd_u32b(&o_v_check);
-
-    if (o_v_check != n_v_check)
-        return FALSE;
-
-    n_x_check = x_check;
-    rd_u32b(&o_x_check);
-
-    if (o_x_check != n_x_check)
-        return FALSE;
-    return TRUE;
-}
-
-/*!
- * @brief 一時保存フロア情報を読み込む / Attempt to load the temporarily saved-floor data
- * @param player_ptr プレーヤーへの参照ポインタ
- * @param sf_ptr 保存フロア読み込み先
- * @param mode オプション
- * @return 成功したらtrue
- */
-bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode)
-{
-    /*
-     * Temporary files are always written in system depended kanji
-     * code.
-     */
-#ifdef JP
-#ifdef EUC
-    kanji_code = 2;
-#endif
-#ifdef SJIS
-    kanji_code = 3;
-#endif
-#else
-    kanji_code = 1;
-#endif
-
-    FILE *old_fff = NULL;
-    byte old_xor_byte = 0;
-    u32b old_v_check = 0;
-    u32b old_x_check = 0;
-    byte old_h_ver_major = 0;
-    byte old_h_ver_minor = 0;
-    byte old_h_ver_patch = 0;
-    byte old_h_ver_extra = 0;
-    if (mode & SLF_SECOND) {
-        old_fff = loading_savefile;
-        old_xor_byte = load_xor_byte;
-        old_v_check = v_check;
-        old_x_check = x_check;
-        old_h_ver_major = current_world_ptr->h_ver_major;
-        old_h_ver_minor = current_world_ptr->h_ver_minor;
-        old_h_ver_patch = current_world_ptr->h_ver_patch;
-        old_h_ver_extra = current_world_ptr->h_ver_extra;
-    }
-
-    char floor_savefile[1024];
-    sprintf(floor_savefile, "%s.F%02d", savefile, (int)sf_ptr->savefile_id);
-
-    safe_setuid_grab(player_ptr);
-    loading_savefile = angband_fopen(floor_savefile, "rb");
-    safe_setuid_drop();
-
-    bool is_save_successful = TRUE;
-    if (!loading_savefile)
-        is_save_successful = FALSE;
-
-    if (is_save_successful) {
-        is_save_successful = load_floor_aux(player_ptr, sf_ptr);
-        if (ferror(loading_savefile))
-            is_save_successful = FALSE;
-        angband_fclose(loading_savefile);
-
-        safe_setuid_grab(player_ptr);
-        if (!(mode & SLF_NO_KILL))
-            (void)fd_kill(floor_savefile);
-
-        safe_setuid_drop();
-    }
-
-    if (mode & SLF_SECOND) {
-        loading_savefile = old_fff;
-        load_xor_byte = old_xor_byte;
-        v_check = old_v_check;
-        x_check = old_x_check;
-        current_world_ptr->h_ver_major = old_h_ver_major;
-        current_world_ptr->h_ver_minor = old_h_ver_minor;
-        current_world_ptr->h_ver_patch = old_h_ver_patch;
-        current_world_ptr->h_ver_extra = old_h_ver_extra;
-    }
-
-    byte old_kanji_code = kanji_code;
-    kanji_code = old_kanji_code;
-    return is_save_successful;
-}
index ac98a23..e78d3db 100644 (file)
@@ -4,4 +4,3 @@
 #include "system/angband.h"
 
 errr rd_savefile_new(player_type *player_ptr);
-bool load_floor(player_type *player_ptr, saved_floor_type *sf_ptr, BIT_FLAGS mode);
index 90936a4..5ed2486 100644 (file)
@@ -37,6 +37,7 @@
 #include "monster/monster-status.h"
 #include "object-enchant/artifact.h"
 #include "object/object-kind.h"
+#include "savedata/floor-loader.h"
 #include "savedata/load.h"
 #include "savedata/savedata-flag-types.h"
 #include "store/store-util.h"