Commit 2bb751d9 authored by Denis Krjuchkov's avatar Denis Krjuchkov

StateFile: use file system API, log in UTF-8

parent 3b620112
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment