aboutsummaryrefslogtreecommitdiff
path: root/qpkg.c
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2019-09-28 15:05:13 +0200
committerFabian Groffen <grobian@gentoo.org>2019-09-28 15:05:13 +0200
commit03912c73fb68cdfe6f45f26fc4f5efd099e41262 (patch)
treeea771e1b31b656db87956f6f1d12b15ba5f550a7 /qpkg.c
parentqmanifest: squash warning about extra tokens after ifdef directive (diff)
downloadportage-utils-03912c73fb68cdfe6f45f26fc4f5efd099e41262.tar.gz
portage-utils-03912c73fb68cdfe6f45f26fc4f5efd099e41262.tar.bz2
portage-utils-03912c73fb68cdfe6f45f26fc4f5efd099e41262.zip
qpkg: fix tbz2 xpak generation
The xpak footer was missing causing files not to contain their metadata (even though present in the file). Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Diffstat (limited to 'qpkg.c')
-rw-r--r--qpkg.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/qpkg.c b/qpkg.c
index 85e0940..0ac6e92 100644
--- a/qpkg.c
+++ b/qpkg.c
@@ -105,12 +105,11 @@ qpkg_clean_dir(char *dirp, set *vdb)
if ((st.st_size / KILOBYTE) > 1000)
disp_units = MEGABYTE;
num_all_bytes += st.st_size;
- qprintf(" %s[%s%s %3s %s %s%s]%s %s%s/%s%s\n",
- DKBLUE, NORM, GREEN,
+ qprintf(" %s[%s %3s %s %s] %s%s%s\n",
+ DKBLUE, GREEN,
make_human_readable_str(st.st_size, 1, disp_units),
- disp_units == MEGABYTE ? "M" : "K",
- NORM, DKBLUE, NORM, CYAN,
- basename(dirp), fnames[i]->d_name, NORM);
+ disp_units == MEGABYTE ? "MiB" : "KiB",
+ DKBLUE, BLUE, fnames[i]->d_name, NORM);
}
if (!pretend)
unlink(buf);
@@ -211,6 +210,7 @@ qpkg_make(depend_atom *atom)
char filelist[BUFSIZE + 32];
char tbz2[BUFSIZE + 32];
size_t buflen;
+ size_t xpaksize;
char *buf;
int i;
char *xpak_argv[2];
@@ -286,12 +286,25 @@ qpkg_make(depend_atom *atom)
}
pclose(fp);
+ /* get offset where xpak will start */
+ stat(tbz2, &st);
+ xpaksize = st.st_size;
+
snprintf(buf, buflen, "%s/%s/%s",
portvdb, atom->CATEGORY, atom_to_pvr(atom));
xpak_argv[0] = buf;
xpak_argv[1] = NULL;
xpak_create(AT_FDCWD, tbz2, 1, xpak_argv, 1, verbose);
+ stat(tbz2, &st);
+
+ /* save tbz2 tail: OOOOSTOP */
+ fp = fopen(tbz2, "a");
+ WRITE_BE_INT32(buf, st.st_size - xpaksize);
+ fwrite(buf, 1, 4, fp);
+ fwrite("STOP", 1, 4, fp);
+ fclose(fp);
+
unlink(filelist);
snprintf(buf, buflen, "%s/%s.tbz2", qpkg_bindir, atom_to_pvr(atom));