PAX
view release on metacpan or search on metacpan
lib/PAX/AppImage.pm view on Meta::CPAN
mkdir($asset_root, 0700);
for (unsigned long i = 0; i < pax_asset_count; i++) {
char path[4096];
snprintf(path, sizeof(path), "%s/%s", $asset_root, pax_assets[i].path);
ensure_parent_dirs(path);
FILE *out = fopen(path, "wb");
if (!out) continue;
fwrite(pax_assets[i].data, 1, pax_assets[i].len, out);
fclose(out);
}
setenv("PAX_EMBEDDED_ASSET_ROOT", $asset_root, 1);
}
static void json_string(FILE *out, const char *s) {
fputc('"', out);
for (; *s; s++) {
if (*s == '"' || *s == '\\\\') { fputc('\\\\', out); fputc(*s, out); }
else if (*s == '\\n') fputs("\\\\n", out);
else fputc(*s, out);
}
fputc('"', out);
}
static int fallback_exec(int argc, char **argv) {
extract_embedded_assets();
if (strlen($perl5lib) > 0) {
const char *old = getenv("PERL5LIB");
char merged[8192];
if (old && strlen(old) > 0) snprintf(merged, sizeof(merged), "%s:%s", $perl5lib, old);
else snprintf(merged, sizeof(merged), "%s", $perl5lib);
setenv("PERL5LIB", merged, 1);
}
char **next = calloc((size_t)argc + 2, sizeof(char *));
if (!next) return 111;
next[0] = "perl";
next[1] = $entrypoint;
for (int i = 1; i < argc; i++) next[i + 1] = argv[i];
execvp("perl", next);
perror("execvp perl");
return 111;
}
lib/PAX/StandaloneImage.pm view on Meta::CPAN
char top[4096];
if (snprintf(top, sizeof(top), "%s/%s", code_root, pax_code_lib_roots[i]) >= (int)sizeof(top)) return 111;
if (append_path(libpath, lib_size, top) != 0) return 111;
}
for (unsigned long i = 0; i < pax_runtime_inc_roots_count; i++) {
char top[4096];
if (snprintf(top, sizeof(top), "%s/%s", runtime_root, pax_runtime_inc_roots[i]) >= (int)sizeof(top)) return 111;
if (append_path(libpath, lib_size, top) != 0) return 111;
}
setenv("PAX_EMBEDDED_ASSET_ROOT", asset_root, 1);
setenv("PAX_STANDALONE_TMPDIR", tmpdir, 1);
setenv("PAX_STANDALONE_MANIFEST_PATH", manifest_path, 1);
if (access(runtime_lib_root, F_OK) == 0) {
const char *old_ld = getenv("LD_LIBRARY_PATH");
char merged_ld[16384];
if (old_ld && *old_ld) snprintf(merged_ld, sizeof(merged_ld), "%s:%s", runtime_lib_root, old_ld);
else snprintf(merged_ld, sizeof(merged_ld), "%s", runtime_lib_root);
setenv("LD_LIBRARY_PATH", merged_ld, 1);
}
return 0;
}
int main(int argc, char **argv) {
if (argc > 1 && strcmp(argv[1], "--pax-standalone-inspect") == 0) {
puts($manifest_literal);
return 0;
}
if (argc == 2 && strcmp(argv[1], "version") == 0 && strlen($fast_version) > 0) {
lib/PAX/StandaloneImage.pm view on Meta::CPAN
char tmpdir[4096];
char entrypoint[4096];
char perl_exec[4096];
char libpath[8192];
char asset_root[4096];
if (extract_runtime(tmpdir, sizeof(tmpdir), entrypoint, sizeof(entrypoint), perl_exec, sizeof(perl_exec), libpath, sizeof(libpath), asset_root, sizeof(asset_root)) != 0) {
fprintf(stderr, "failed to extract standalone payload\\n");
return 111;
}
if (argc > 0 && argv[0] && *argv[0]) {
setenv("PAX_STANDALONE_EXECUTABLE", argv[0], 1);
}
if (strlen(libpath) > 0) {
const char *old = getenv("PERL5LIB");
char merged[16384];
if (old && *old) snprintf(merged, sizeof(merged), "%s:%s", libpath, old);
else snprintf(merged, sizeof(merged), "%s", libpath);
setenv("PERL5LIB", merged, 1);
}
char **next = calloc((size_t)argc + 5, sizeof(char *));
if (!next) return 111;
next[0] = perl_exec;
next[1] = "-MPAX::StandaloneRuntime";
next[2] = "-e";
next[3] = $bootstrap_code;
next[4] = entrypoint;
for (int i = 1; i < argc; i++) next[i + 4] = argv[i];
( run in 1.233 second using v1.01-cache-2.11-cpan-6aa56a78535 )