]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
fix(install): extend hwcaps library handling to libraries under glibc-hwcaps/
authorDavid Tardon <dtardon@redhat.com>
Mon, 30 Aug 2021 08:02:22 +0000 (10:02 +0200)
committerJóhann B. Guðmundsson <johannbg@gmail.com>
Mon, 13 Sep 2021 12:26:14 +0000 (12:26 +0000)
src/install/dracut-install.c

index f1e76bef15dacc74d4b1e0d589c0302cc9369463..401c09d70953cc8ab28c3a7fc630e278dcd43b8c 100644 (file)
@@ -354,8 +354,8 @@ normal_copy:
 static int library_install(const char *src, const char *lib)
 {
         _cleanup_free_ char *p = NULL;
-        _cleanup_free_ char *pdir = NULL, *ppdir = NULL, *clib = NULL;
-        char *q;
+        _cleanup_free_ char *pdir = NULL, *ppdir = NULL, *pppdir = NULL, *clib = NULL;
+        char *q, *clibdir;
         int r, ret = 0;
 
         p = strdup(lib);
@@ -377,7 +377,8 @@ static int library_install(const char *src, const char *lib)
                         log_debug("Lib install: '%s'", p);
         }
 
-        /* Also try to install the same library from one directory above.
+        /* Also try to install the same library from one directory above
+         * or from one directory above glibc-hwcaps.
            This fixes the case, where only the HWCAP lib would be installed
            # ldconfig -p|grep -F libc.so
            libc.so.6 (libc6,64bit, hwcap: 0x0000001000000000, OS ABI: Linux 2.6.32) => /lib64/power6/libc.so.6
@@ -398,10 +399,18 @@ static int library_install(const char *src, const char *lib)
                 return ret;
 
         ppdir = strdup(ppdir);
+        pppdir = dirname(ppdir);
+        if (!pppdir)
+                return ret;
+
+        pppdir = strdup(pppdir);
+        if (!pppdir)
+                return ret;
 
         strcpy(p, lib);
 
-        clib = strjoin(ppdir, "/", basename(p), NULL);
+        clibdir = streq(basename(ppdir), "glibc-hwcaps") ? pppdir : ppdir;
+        clib = strjoin(clibdir, "/", basename(p), NULL);
         if (dracut_install(clib, clib, false, false, true) == 0)
                 log_debug("Lib install: '%s'", clib);
         /* also install lib.so for lib.so.* files */