From 6191ca0b1f86807c9f726a31b351dc2e4260b780 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Tue, 2 Feb 2010 22:25:54 +0200 Subject: [PATCH] Ticket #1921: Fix lslR VFS The lslR VFS does not work with ls-lR files created in en_US.UTF-8 locale and with files and directories started with whitespaces. Followed patch fixes both issues. Signed-off-by: Slava Zanko --- lib/vfs/mc-vfs/extfs/lslR.in | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/vfs/mc-vfs/extfs/lslR.in b/lib/vfs/mc-vfs/extfs/lslR.in index 2bc2bd059..8b6833a64 100644 --- a/lib/vfs/mc-vfs/extfs/lslR.in +++ b/lib/vfs/mc-vfs/extfs/lslR.in @@ -24,26 +24,42 @@ esac $MYCAT "$1" | $AWK ' BEGIN { dir=""; - # Pattern to match 8 first fields. + empty=1; rx = "[^ ]+[ ]+"; - rx = "^" rx rx rx rx rx rx rx 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 } -/^$/ { 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; } -( $9 != "" ) { +( NF > 7 ) { + empty=0 # gensub() is not portable. name=$0 - sub(rx, "", name) - # Cannot assign to $9, or spaces in the filename would be reduced. - attr=substr($0, 1, length($0)-length(name)) - printf "%s%s%s\n", attr, dir, name + 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 }' }