Implemented multi-binary app packaging (#648)
This commit is contained in:
committed by
GitHub
parent
2496dea5c2
commit
8556103eb1
@@ -6,6 +6,27 @@
|
||||
#include <tactility/paths.h>
|
||||
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
|
||||
namespace {
|
||||
|
||||
// manifest.location.location is the fully-resolved binary file path
|
||||
// ({install_dir}/bin/<platform>/<binary>.{elf,so} - see app_resolve_binary_path()), not the
|
||||
// install directory itself - strip that fixed 3-segment suffix to recover it.
|
||||
bool app_get_install_dir_from_binary_path(const char* binary_path, std::string& out_install_dir) {
|
||||
std::string path = binary_path;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
auto separator = path.find_last_of('/');
|
||||
if (separator == std::string::npos) {
|
||||
return false;
|
||||
}
|
||||
path = path.substr(0, separator);
|
||||
}
|
||||
out_install_dir = path;
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
extern "C" {
|
||||
|
||||
@@ -46,7 +67,12 @@ error_t app_paths_get_assets_directory(const char* app_id, char* out_path, size_
|
||||
return ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
int written = std::snprintf(out_path, out_path_size, "%s/assets", static_cast<const char*>(manifest.location.location));
|
||||
std::string install_dir;
|
||||
if (!app_get_install_dir_from_binary_path(static_cast<const char*>(manifest.location.location), install_dir)) {
|
||||
return ERROR_NOT_FOUND;
|
||||
}
|
||||
|
||||
int written = std::snprintf(out_path, out_path_size, "%s/assets", install_dir.c_str());
|
||||
if (written < 0 || (size_t)written >= out_path_size) {
|
||||
return ERROR_BUFFER_OVERFLOW;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user