File 1000-lsinitrd_optimize-performance-when-handling-multiple-files.patch of Package dracut

diff --git a/lsinitrd.sh b/lsinitrd.sh
index 61f4106..72eaa03 100755
--- a/lsinitrd.sh
+++ b/lsinitrd.sh
@@ -116,15 +116,25 @@ dracutlibdirs() {
 
 extract_files()
 {
-    (( ${#filenames[@]} == 1 )) && nofileinfo=1
-    for f in "${!filenames[@]}"; do
-        [[ $nofileinfo ]] || echo "initramfs:/$f"
-        [[ $nofileinfo ]] || echo "========================================================================"
-        $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout "$f" 2>/dev/null
-        ((ret+=$?))
-        [[ $nofileinfo ]] || echo "========================================================================"
-        [[ $nofileinfo ]] || echo
-    done
+    if [ "${#filenames[@]}" -eq 1 ]; then
+        for f in "${!filenames[@]}"; do
+            [[ $nofileinfo ]] || echo "initramfs:/$f"
+            [[ $nofileinfo ]] || echo "========================================================================"
+            $CAT "$image" 2>/dev/null | cpio --extract --verbose --quiet --to-stdout "$f" 2>/dev/null
+            ((ret+=$?))
+            [[ $nofileinfo ]] || echo "========================================================================"
+            [[ $nofileinfo ]] || echo
+        done
+    else
+        TMPFILE="$(mktemp -t --suffix=.cpio lsinitrd.XXXXXX)"
+        $CAT "$image" 2>/dev/null > "$TMPFILE"
+        trap "rm -f '$TMPFILE'" EXIT
+        pre_decompress()
+        {
+            cat "$TMPFILE"
+        }
+        CAT=pre_decompress
+    fi
 }
 
 list_modules()
openSUSE Build Service is sponsored by