diff options
Diffstat (limited to 'platform/default')
-rw-r--r-- | platform/default/application_root.cpp | 5 | ||||
-rw-r--r-- | platform/default/asset_request_libuv.cpp | 14 |
2 files changed, 15 insertions, 4 deletions
diff --git a/platform/default/application_root.cpp b/platform/default/application_root.cpp index f25a44d46b..654d105c70 100644 --- a/platform/default/application_root.cpp +++ b/platform/default/application_root.cpp @@ -5,11 +5,10 @@ namespace mbgl { namespace platform { -// Returns the path the application root. -std::string applicationRoot() { +// Returns the path to the root folder of the application. +const std::string &applicationRoot() { static const std::string root = uv::cwd(); return root; } - } } diff --git a/platform/default/asset_request_libuv.cpp b/platform/default/asset_request_libuv.cpp index 006e573631..4a6fc88eb6 100644 --- a/platform/default/asset_request_libuv.cpp +++ b/platform/default/asset_request_libuv.cpp @@ -3,6 +3,7 @@ #include <mbgl/util/std.hpp> #include <mbgl/util/util.hpp> #include <mbgl/util/uv.hpp> +#include <mbgl/platform/platform.hpp> #include <uv.h> #include <boost/algorithm/string.hpp> @@ -47,7 +48,18 @@ AssetRequestImpl::~AssetRequestImpl() { AssetRequestImpl::AssetRequestImpl(AssetRequest *request_, uv_loop_t *loop) : request(request_) { req.data = this; - uv_fs_open(loop, &req, (request->resource.url.substr(8)).c_str(), O_RDONLY, S_IRUSR, fileOpened); + + const auto &url = request->resource.url; + std::string path; + if (url.size() <= 8 || url[8] == '/') { + // This is an empty or absolute path. + path = url.substr(8); + } else { + // This is a relative path. Prefix with the application root. + path = platform::applicationRoot() + "/" + url.substr(8); + } + + uv_fs_open(loop, &req, path.c_str(), O_RDONLY, S_IRUSR, fileOpened); } void AssetRequestImpl::fileOpened(uv_fs_t *req) { |