summaryrefslogtreecommitdiffhomepage
path: root/loader
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-02-09 17:41:26 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-02-09 17:41:26 +0100
commita97e2a90a4508dc7936f132aebcccc08fd3305b0 (patch)
tree866ab5e78a8a7f4d09ba329f49b917caf83e970c /loader
parent4643a85a171652a25eecfca5a7af4cf4ccb2d580 (diff)
loader, anim-crop-tool: workaround relative path usage
Diffstat (limited to 'loader')
-rw-r--r--loader/filesystem.cpp14
-rw-r--r--loader/impl.hpp7
-rw-r--r--loader/loader.hpp1
3 files changed, 20 insertions, 2 deletions
diff --git a/loader/filesystem.cpp b/loader/filesystem.cpp
index 850ec84f..f3a72365 100644
--- a/loader/filesystem.cpp
+++ b/loader/filesystem.cpp
@@ -38,12 +38,26 @@ bool loader_impl::chdir(StringView pathname)
return !ret;
}
+StringView loader_impl::startup_directory() noexcept
+{
+ fm_debug_assert(!original_working_directory.isEmpty());
+ return original_working_directory;
+}
+
void loader_impl::set_application_working_directory()
{
static bool once = false;
if (once)
return;
once = true;
+ if (auto loc = Path::currentDirectory(); loc)
+ original_working_directory = std::move(*loc);
+ else
+ {
+ Error err; err << "can't get original working directory:";
+ Corrade::Utility::Implementation::printErrnoErrorString(err, errno);
+ original_working_directory = "."_s;
+ }
if (const auto loc = Path::executableLocation())
{
String path;
diff --git a/loader/impl.hpp b/loader/impl.hpp
index e1d6d649..8fa650ea 100644
--- a/loader/impl.hpp
+++ b/loader/impl.hpp
@@ -28,6 +28,8 @@ struct loader_impl final : loader_
std::vector<serialized_scenery> sceneries_array;
std::unordered_map<StringView, const serialized_scenery*> sceneries_map;
+ String original_working_directory;
+
StringView shader(StringView filename) noexcept override;
Trade::ImageData2D texture(StringView prefix, StringView filename) noexcept(false);
std::shared_ptr<struct tile_atlas> tile_atlas(StringView filename, Vector2ub size, Optional<pass_mode> pass) noexcept(false) override;
@@ -39,9 +41,10 @@ struct loader_impl final : loader_
void get_anim_atlas_list();
void get_scenery_list();
-
- static void set_application_working_directory();
static anim_def deserialize_anim(StringView filename);
+
+ void set_application_working_directory();
+ StringView startup_directory() noexcept override;
static void system_init();
static bool chdir(StringView pathname);
[[nodiscard]] static bool check_atlas_name(StringView name);
diff --git a/loader/loader.hpp b/loader/loader.hpp
index 1189a02d..fadccb45 100644
--- a/loader/loader.hpp
+++ b/loader/loader.hpp
@@ -25,6 +25,7 @@ struct loader_
static std::vector<std::shared_ptr<struct tile_atlas>> tile_atlases(StringView filename, pass_mode p);
virtual const std::vector<serialized_scenery>& sceneries() = 0;
virtual const scenery_proto& scenery(StringView name) noexcept(false) = 0;
+ virtual StringView startup_directory() noexcept = 0;
loader_(const loader_&) = delete;
loader_& operator=(const loader_&) = delete;