Fix #95: replace \ with / on Windows when saving file paths.

... and do vice versa on restore.
This commit is contained in:
Atsushi Eno 2023-09-21 00:43:39 +09:00 committed by Paul Ferrand
parent bfad6519a1
commit 5afabd4429
4 changed files with 31 additions and 3 deletions

View file

@ -12,6 +12,28 @@
#include <cstdlib>
#include <fstream>
#if defined(_WIN32)
const fs::path toPlatformAgnosticPath(std::string& filePath)
{
return fs::u8path(filePath.replace(filePath.begin(), filePath.end(), '\\', '/'));
}
const fs::path fromPlatformAgnosticPath(const char *filePath)
{
std::string p{filePath};
return fs::u8path(p.replace(p.begin(), p.end(), '/', '\\'));
}
#else
const fs::path toPlatformAgnosticPath(std::string& filePath)
{
return fs::u8path(filePath);
}
const fs::path fromPlatformAgnosticPath(const char *filePath)
{
return fs::u8path(filePath);
}
#endif
#if defined(_WIN32)
#include <windows.h>
#include <shlobj.h>

View file

@ -13,6 +13,9 @@
const fs::path& getUserDocumentsDirectory();
const fs::path toPlatformAgnosticPath(std::string& filePath);
const fs::path fromPlatformAgnosticPath(const char *filePath);
#if !defined(_WIN32) && !defined(__APPLE__)
const fs::path& getUserHomeDirectory();
const fs::path& getXdgConfigHome();

View file

@ -12,6 +12,7 @@
#include "sfizz/import/sfizz_import.h"
#include "plugin/SfizzFileScan.h"
#include "plugin/InstrumentDescription.h"
#include "plugin/NativeHelpers.h"
#include "base/source/fstreamer.h"
#include "base/source/updatehandler.h"
#include "pluginterfaces/vst/ivstevents.h"
@ -178,7 +179,8 @@ tresult PLUGIN_API SfizzVstProcessor::setState(IBStream* stream)
if (statePath->empty())
continue;
fs::path pathOrig = fs::u8path(*statePath);
// save file path in platform-agnostic way. See sfizz-ui issue #95
fs::path pathOrig = toPlatformAgnosticPath(*statePath);
std::error_code ec;
if (fs::is_regular_file(pathOrig, ec))
continue;

View file

@ -5,6 +5,7 @@
// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz
#include "SfizzVstState.h"
#include "plugin/NativeHelpers.h"
#include <sfizz.h>
#include <mutex>
#include <cstring>
@ -21,7 +22,7 @@ tresult SfizzVstState::load(IBStream* state)
return kResultFalse;
if (const char* str = s.readStr8())
sfzFile = str;
sfzFile = fromPlatformAgnosticPath(str);
else
return kResultFalse;
@ -41,7 +42,7 @@ tresult SfizzVstState::load(IBStream* state)
if (version >= 1) {
if (const char* str = s.readStr8())
scalaFile = str;
scalaFile = fromPlatformAgnosticPath(str);
else
return kResultFalse;