summaryrefslogtreecommitdiffstats
path: root/src/vfs/extfs/helpers/lslR.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/vfs/extfs/helpers/lslR.in')
-rw-r--r--src/vfs/extfs/helpers/lslR.in74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/vfs/extfs/helpers/lslR.in b/src/vfs/extfs/helpers/lslR.in
new file mode 100644
index 0000000..69b663b
--- /dev/null
+++ b/src/vfs/extfs/helpers/lslR.in
@@ -0,0 +1,74 @@
+#! /bin/sh
+
+# Based on previous version of lslR
+# Modified by Tomas Novak <tnovak@ipex.cz> April 2000
+# (to allow spaces in filenames)
+#
+# It's assumed that lslR was generated in C locale.
+LC_ALL=C
+export LC_ALL=C
+
+AWK=@AWK@
+
+mclslRfs_list () {
+case "$1" in
+ *.lz) MYCAT="lzip -dc";;
+ *.lz4) MYCAT="lz4 -dc";;
+ *.lzma) MYCAT="lzma -dc";;
+ *.xz) MYCAT="xz -dc";;
+ *.zst) MYCAT="zstd -dc";;
+ *.bz2) MYCAT="bzip2 -dc";;
+ *.gz) MYCAT="gzip -dc";;
+ *.z) MYCAT="gzip -dc";;
+ *.Z) MYCAT="gzip -dc";;
+ *) MYCAT="cat";;
+esac
+
+MYCAT=${MC_TEST_EXTFS_LIST_CMD:-$MYCAT} # Let the test framework hook in.
+
+$MYCAT "$1" | $AWK '
+BEGIN {
+ dir="";
+ empty=1;
+ rx = "[^ ]+[ ]+";
+ # Pattern to match 7 first fields.
+ rx7 = "^" rx rx rx rx rx rx "[^ ]+[ ]";
+ # Pattern to match 8 first fields.
+ rx8 = "^" rx rx rx rx rx rx rx "[^ ]+[ ]";
+}
+/^total\ [0-9]*$/ { next }
+/^$/ { empty=1; next }
+empty==1 && /:$/ {
+ empty=0
+ if ($0 ~ /^\//) dir=substr($0, 2);
+ else dir=$0;
+ if (dir ~ /\/:$/) sub(/:$/, "", dir);
+ else sub(/:$/, "/", dir);
+ if (dir ~ /^[ ]/) dir="./"dir;
+ next;
+}
+( NF > 7 ) {
+ empty=0
+ # gensub() is not portable.
+ name=$0
+ i=index($6, "-")
+ if (i) {
+ sub(rx7, "", name)
+ NF = 7
+ $6=substr($6,i+1)"-"substr($6,1,i-1)
+ }
+ else {
+ sub(rx8, "", name)
+ NF = 8
+ }
+ printf "%s %s%s\n", $0, dir, name
+}
+ {
+ empty=0
+}'
+}
+
+case "$1" in
+ list) mclslRfs_list "$2"; exit 0;;
+esac
+exit 1