commit: 03912c73fb68cdfe6f45f26fc4f5efd099e41262 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> AuthorDate: Sat Sep 28 13:05:13 2019 +0000 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> CommitDate: Sat Sep 28 13:05:13 2019 +0000 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=03912c73
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 <AT> gentoo.org> qpkg.c | 23 ++++++++++++++++++----- 1 file 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));