commit:     edcb8e142ee18f19f8e9aa9ab7bbccab39fc63c1
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 10 13:29:52 2019 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Mon Jun 10 13:29:52 2019 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=edcb8e14

qmerge: avoid nested vdb entries

while writing a new vdb dir, ensure we removed any existing one, for
rename will only overwrite an empty directory.  This also means the `mv`
fallback is pointless, because rename now no longer will fail, and mv no
longer will put the vdb dir inside the target dir.

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

 qmerge.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/qmerge.c b/qmerge.c
index ce45628..8644ddc 100644
--- a/qmerge.c
+++ b/qmerge.c
@@ -1342,6 +1342,7 @@ pkg_merge(int level, const depend_atom *atom, const 
struct pkg_t *pkg)
 
        if ((contents = fopen("vdb/CONTENTS", "w")) == NULL)
                errf("come on wtf?");
+
        objs = NULL;
        {
                char *cpath;
@@ -1415,6 +1416,7 @@ pkg_merge(int level, const depend_atom *atom, const 
struct pkg_t *pkg)
        free(T);
 
        /* Update the magic counter */
+       /* FIXME: check Portage's get_counter_tick_core */
        if ((fp = fopen("vdb/COUNTER", "w")) != NULL) {
                fputs("0", fp);
                fclose(fp);
@@ -1426,11 +1428,9 @@ pkg_merge(int level, const depend_atom *atom, const 
struct pkg_t *pkg)
                                portroot, portvdb, pkg->CATEGORY);
                mkdir_p(buf, 0755);
                strcat(buf, pkg->PF);
-               if (rename("vdb", buf)) {
-                       xasprintf(&p, "mv vdb '%s'", buf);
-                       xsystem(p);
-                       free(p);
-               }
+               rm_rf(buf);  /* get rid of existing dir, empty dir is fine */
+               if (rename("vdb", buf) != 0)
+                       warn("failed to move 'vdb' to '%s': %s", buf, 
strerror(errno));
        }
 
        /* clean up our local temp dir */

Reply via email to