aboutsummaryrefslogtreecommitdiff
path: root/install.c
diff options
context:
space:
mode:
Diffstat (limited to 'install.c')
-rw-r--r--install.c63
1 files changed, 0 insertions, 63 deletions
diff --git a/install.c b/install.c
deleted file mode 100644
index e647d31..0000000
--- a/install.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "spm.h"
-
-int install(const char *destroot, const char *_package) {
- char *package = find_package(_package);
- if (!package) {
- fprintf(SYSERROR);
- return -1;
- }
-
- if (exists(destroot) != 0) {
- if (mkdirs(destroot, 0755) != 0) {
- fprintf(SYSERROR);
- return -2;
- }
- }
-
- char cwd[PATH_MAX];
- char source[PATH_MAX];
- char template[PATH_MAX];
- char suffix[PATH_MAX] = "spm_destroot_XXXXXX";
- sprintf(template, "%s%c%s", TMP_DIR, DIRSEP, suffix);
-
- // Create a new temporary directory and extract the requested package into it
- char *tmpdir = mkdtemp(template);
- tar_extract_archive(package, tmpdir);
-
- getcwd(cwd, sizeof(cwd));
-
- RelocationEntry **b_record = NULL;
- RelocationEntry **t_record = NULL;
- chdir(tmpdir);
- {
- // Rewrite binary prefixes
- RelocationEntry **b_record = prefixes_read(".SPM_PREFIX_BIN");
- if (b_record) {
- for (int i = 0; b_record[i] != NULL; i++) {
- relocate(b_record[i]->path, b_record[i]->prefix, destroot);
- }
- }
-
- // Rewrite text prefixes
- RelocationEntry **t_record = prefixes_read(".SPM_PREFIX_TEXT");
- if (t_record) {
- for (int i = 0; t_record[i] != NULL; i++) {
- file_replace_text(t_record[i]->path, t_record[i]->prefix, destroot);
- }
- }
-
- prefixes_free(b_record);
- prefixes_free(t_record);
- }
- chdir(cwd);
-
-
- // Append a trailing slash to tmpdir to direct rsync to copy files, not the directory, into destroot
- sprintf(source, "%s%c", tmpdir, DIRSEP);
- if (rsync(NULL, source, destroot) != 0) {
- exit(1);
- }
- rmdirs(tmpdir);
-
- free(package);
-}