diff --git a/src/Main.cxx b/src/Main.cxx index 7c98c956b..9b6630d60 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -243,16 +243,17 @@ glue_state_file_init(GError **error_r) Path path_fs = Path::FromUTF8(path); - g_free(path); - if (path_fs.IsNull()) { + g_free(path); g_set_error(error_r, main_quark(), 0, "Failed to convert state file path to FS encoding"); return false; } - state_file = new StateFile(std::move(path_fs), + state_file = new StateFile(std::move(path_fs), path, *global_partition, *main_loop); + g_free(path); + state_file->Read(); return true; } diff --git a/src/StateFile.cxx b/src/StateFile.cxx index 6f93137a7..a15eb7220 100644 --- a/src/StateFile.cxx +++ b/src/StateFile.cxx @@ -34,8 +34,10 @@ #undef G_LOG_DOMAIN #define G_LOG_DOMAIN "state_file" -StateFile::StateFile(Path &&_path, Partition &_partition, EventLoop &_loop) - :TimeoutMonitor(_loop), path(std::move(_path)), partition(_partition), +StateFile::StateFile(Path &&_path, const char *_path_utf8, + Partition &_partition, EventLoop &_loop) + :TimeoutMonitor(_loop), path(std::move(_path)), path_utf8(_path_utf8), + partition(_partition), prev_volume_version(0), prev_output_version(0), prev_playlist_version(0) { @@ -45,12 +47,12 @@ StateFile::StateFile(Path &&_path, Partition &_partition, EventLoop &_loop) void StateFile::Write() { - g_debug("Saving state file %s", path.c_str()); + g_debug("Saving state file %s", path_utf8.c_str()); - FILE *fp = fopen(path.c_str(), "w"); + FILE *fp = FOpen(path, FOpenMode::WriteText); if (G_UNLIKELY(!fp)) { g_warning("failed to create %s: %s", - path.c_str(), g_strerror(errno)); + path_utf8.c_str(), g_strerror(errno)); return; } @@ -71,12 +73,12 @@ StateFile::Read() { bool success; - g_debug("Loading state file %s", path.c_str()); + g_debug("Loading state file %s", path_utf8.c_str()); TextFile file(path); if (file.HasFailed()) { g_warning("failed to open %s: %s", - path.c_str(), g_strerror(errno)); + path_utf8.c_str(), g_strerror(errno)); return; } diff --git a/src/StateFile.hxx b/src/StateFile.hxx index bb1c382f4..9ec97d518 100644 --- a/src/StateFile.hxx +++ b/src/StateFile.hxx @@ -30,6 +30,7 @@ struct Partition; class StateFile final : private TimeoutMonitor { Path path; + std::string path_utf8; Partition &partition; @@ -41,7 +42,8 @@ class StateFile final : private TimeoutMonitor { prev_playlist_version; public: - StateFile(Path &&path, Partition &partition, EventLoop &loop); + StateFile(Path &&path, const char *path_utf8, + Partition &partition, EventLoop &loop); void Read(); void Write();