OSDN Git Service

[Refactor] #3461 file_character() の引数をconcptr からstring_view へ変更し、ファイルが開けない場合に例外を飛ばすようにした
authorHourier <66951241+Hourier@users.noreply.github.com>
Sun, 25 Jun 2023 04:01:55 +0000 (13:01 +0900)
committerHourier <66951241+Hourier@users.noreply.github.com>
Tue, 27 Jun 2023 08:42:51 +0000 (17:42 +0900)
src/io/files-util.cpp
src/io/files-util.h
src/player/process-death.cpp

index 2d8bf6b..49c995a 100644 (file)
@@ -18,6 +18,7 @@
 #include "io/uid-checker.h"
 #include "monster-race/monster-race.h"
 #include "monster-race/race-flags1.h"
+#include "system/angband-exceptions.h"
 #include "system/monster-race-info.h"
 #include "system/player-type-definition.h"
 #include "term/screen-processor.h"
@@ -58,9 +59,9 @@ std::filesystem::path debug_savefile;
  * Allow the "full" flag to dump additional info,
  * and trigger its usage from various places in the code.
  */
-errr file_character(PlayerType *player_ptr, concptr name)
+void file_character(PlayerType *player_ptr, std::string_view filename)
 {
-    const auto &path = path_build(ANGBAND_DIR_USER, name);
+    const auto &path = path_build(ANGBAND_DIR_USER, filename);
     auto fd = fd_open(path, O_RDONLY);
     if (fd >= 0) {
         const auto &filename = path.string();
@@ -78,9 +79,7 @@ errr file_character(PlayerType *player_ptr, concptr name)
     }
 
     if (!fff) {
-        prt(_("キャラクタ情報のファイルへの書き出しに失敗しました!", "Character dump failed!"), 0, 0);
-        (void)inkey();
-        return -1;
+        THROW_EXCEPTION(std::runtime_error, _("キャラクタ情報のファイルへの書き出しに失敗しました!", "Character dump failed!"));
     }
 
     screen_save();
@@ -90,7 +89,6 @@ errr file_character(PlayerType *player_ptr, concptr name)
     angband_fclose(fff);
     msg_print(_("キャラクタ情報のファイルへの書き出しに成功しました。", "Character dump successful."));
     msg_print(nullptr);
-    return 0;
 }
 
 /*!
index 0c78028..2ea46c8 100644 (file)
@@ -4,6 +4,7 @@
 #include <filesystem>
 #include <optional>
 #include <string>
+#include <string_view>
 
 extern std::filesystem::path savefile; //!< セーブファイルのフルパス
 extern std::string savefile_base; //!< セーブファイル名
@@ -27,7 +28,7 @@ extern std::filesystem::path ANGBAND_DIR_XTRA;
 class PlayerType;
 typedef void (*update_playtime_pf)(void);
 
-errr file_character(PlayerType *player_ptr, concptr name);
+void file_character(PlayerType *player_ptr, std::string_view filename);
 std::optional<std::string> get_random_line(concptr file_name, int entry);
 void read_dead_file();
 
index da3c028..ad64bb7 100644 (file)
@@ -345,7 +345,7 @@ static void export_player_info(PlayerType *player_ptr)
         }
 
         screen_save();
-        (void)file_character(player_ptr, out_val);
+        file_character(player_ptr, out_val);
         screen_load();
     }
 }
@@ -359,13 +359,10 @@ static void file_character_auto(PlayerType *player_ptr)
     struct tm *now_tm = localtime(&now_t);
 
     char datetime[32];
-    char filename[128];
-
     strftime(datetime, sizeof(datetime), "%Y-%m-%d_%H%M%S", now_tm);
-    strnfmt(filename, sizeof(filename), "%s_Autodump_%s.txt", p_ptr->name, datetime);
-
     screen_save();
-    (void)file_character(player_ptr, filename);
+    const auto filename = format("%s_Autodump_%s.txt", player_ptr->name, datetime);
+    file_character(player_ptr, filename);
     screen_load();
 }