commit:     81aa2a0e9619cf3491c28bb16a285bbc77264cea
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Sun Jan  4 09:19:15 2026 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Sun Jan  4 09:19:15 2026 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=81aa2a0e

qpkg: fix toplevel dir to match gpkg package name

include build-id when present, like in the filename

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 qpkg.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/qpkg.c b/qpkg.c
index 1fe85dd..2296fff 100644
--- a/qpkg.c
+++ b/qpkg.c
@@ -481,13 +481,19 @@ qgpkg_make(tree_pkg_ctx *pkg, qpkg_cb_args *args)
        a = archive_write_new();
        archive_write_set_format_ustar(a);  /* as required by GLEP-78 */
        archive_write_open_filename(a, gpkg);
+
+       if (atom->BUILDID > 0)
+               i = snprintf(ename, sizeof(ename), "%s-%u", atom->PF, 
atom->BUILDID);
+       else
+               i = snprintf(ename, sizeof(ename), "%s", atom->PF);
+
        /* 3.1 the package format identifier file gpkg-1 */
        snprintf(buf, sizeof(buf), "%s/gpkg-1", tmpdir);
        if ((fd = open(buf, O_RDONLY)) >= 0 &&
                fstat(fd, &st) >= 0)
        {
                entry = archive_entry_new();
-               snprintf(ename, sizeof(ename), "%s/gpkg-1", atom->PF);
+               snprintf(ename + i, sizeof(ename) - i, "/gpkg-1");
                archive_entry_set_pathname(entry, ename);
                archive_entry_set_size(entry, st.st_size);
                archive_entry_set_mtime(entry, st.st_mtime, 0);
@@ -506,7 +512,7 @@ qgpkg_make(tree_pkg_ctx *pkg, qpkg_cb_args *args)
                fstat(fd, &st) >= 0)
        {
                entry = archive_entry_new();
-               snprintf(ename, sizeof(ename), "%s/metadata.tar%s", atom->PF, 
filter);
+               snprintf(ename + i, sizeof(ename) - i, "/metadata.tar%s", 
filter);
                archive_entry_set_pathname(entry, ename);
                archive_entry_set_size(entry, st.st_size);
                archive_entry_set_mtime(entry, st.st_mtime, 0);
@@ -526,7 +532,7 @@ qgpkg_make(tree_pkg_ctx *pkg, qpkg_cb_args *args)
                fstat(fd, &st) >= 0)
        {
                entry = archive_entry_new();
-               snprintf(ename, sizeof(ename), "%s/image.tar%s", atom->PF, 
filter);
+               snprintf(ename + i, sizeof(ename) - i, "/image.tar%s", filter);
                archive_entry_set_pathname(entry, ename);
                archive_entry_set_size(entry, st.st_size);
                archive_entry_set_mtime(entry, st.st_mtime, 0);
@@ -547,7 +553,7 @@ qgpkg_make(tree_pkg_ctx *pkg, qpkg_cb_args *args)
                fstat(fd, &st) >= 0)
        {
                entry = archive_entry_new();
-               snprintf(ename, sizeof(ename), "%s/Manifest", atom->PF);
+               snprintf(ename + i, sizeof(ename) - i, "/Manifest");
                archive_entry_set_pathname(entry, ename);
                archive_entry_set_size(entry, st.st_size);
                archive_entry_set_mtime(entry, st.st_mtime, 0);
@@ -576,6 +582,7 @@ qgpkg_make(tree_pkg_ctx *pkg, qpkg_cb_args *args)
                                 atom->PF, atom->BUILDID);
        else
                snprintf(buf + i, sizeof(buf) - i, "/%s.gpkg.tar", atom->PF);
+
        if (rename(gpkg, buf)) {
                warnp("could not move '%s' to '%s'", gpkg, buf);
                return 1;

Reply via email to