StateFile: use file system API, log in UTF-8
This commit is contained in:
parent
3b620112ca
commit
2bb751d9fa
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue