]> git.ipfire.org Git - thirdparty/linux-firmware.git/commitdiff
copy-firmware: Handle links to uncompressed files
authorJuerg Haefliger <juerg.haefliger@canonical.com>
Fri, 13 Sep 2024 06:15:18 +0000 (08:15 +0200)
committerJuerg Haefliger <juerg.haefliger@canonical.com>
Fri, 13 Sep 2024 06:38:36 +0000 (08:38 +0200)
If copy-firwmware is told to compress files, it blindly assumes that
the target is indeed compressed (unless it's a directory) and creates
any symlinks accordingly.

This leads to broken symlinks for links that point at RawFiles:
adspr.jsn.zst -> ../qcm6490/adspr.jsn.zst
adsps.jsn.zst -> ../qcm6490/adsps.jsn.zst

That should be:
adspr.jsn -> ../qcm6490/adspr.jsn
adsps.jsn -> ../qcm6490/adsps.jsn

Fix that by checking if the target (directory or file) exists. And while
at it, add a check for broken symlinks at the end.

Fixes: 541f96c0fa47b ("qcom: qcm6490: add ADSP and CDSP firmware")
Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com>
copy-firmware.sh

index 6757c6ce03a3086816ce95b0085c281a9afaaf26..6c557f234dd2b90e68ba26429ad3e788f2201c4f 100755 (executable)
@@ -133,7 +133,7 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
         directory="$destdir/$(dirname "$f")"
         install -d "$directory"
         target="$(cd "$directory" && realpath -m -s "$d")"
-        if test -d "$target"; then
+        if test -e "$target"; then
             $verbose "creating link $f -> $d"
             ln -s "$d" "$destdir/$f"
         else
@@ -143,6 +143,13 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
     fi
 done
 
+# Verify no broken symlinks
+if test "$(find "$destdir" -xtype l | wc -l)" -ne 0 ; then
+        echo "ERROR: Broken symlinks found:"
+        find "$destdir" -xtype l
+        exit 1
+fi
+
 exit 0
 
 # vim: et sw=4 sts=4 ts=4