diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-02-09 17:41:26 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-02-09 17:41:26 +0100 |
commit | a97e2a90a4508dc7936f132aebcccc08fd3305b0 (patch) | |
tree | 866ab5e78a8a7f4d09ba329f49b917caf83e970c /loader | |
parent | 4643a85a171652a25eecfca5a7af4cf4ccb2d580 (diff) |
loader, anim-crop-tool: workaround relative path usage
Diffstat (limited to 'loader')
-rw-r--r-- | loader/filesystem.cpp | 14 | ||||
-rw-r--r-- | loader/impl.hpp | 7 | ||||
-rw-r--r-- | loader/loader.hpp | 1 |
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; |