mc/mc-extfs-helpers-urar.patch
Ruediger Oertel dc3c4beda0 Accepting request 208806 from home:dnh:branches:Base:System
- Reimplementation of mcrar5fs_list in vfs/extfs/helpers/urar using
  'unrar vt' fixing the "trailing space" problem with 'unrar [lv]'
  closing http://www.midnight-commander.org/ticket/3073 and bnc#849082

OBS-URL: https://build.opensuse.org/request/show/208806
OBS-URL: https://build.opensuse.org/package/show/Base:System/mc?expand=0&rev=78
2013-11-29 13:47:33 +00:00

91 lines
2.7 KiB
Diff

diff -urN -x '*~' mc-4.8.10.orig/src/vfs/extfs/helpers/urar.in mc-4.8.10/src/vfs/extfs/helpers/urar.in
--- mc-4.8.10.orig/src/vfs/extfs/helpers/urar.in 2013-08-02 17:02:39.000000000 +0200
+++ mc-4.8.10/src/vfs/extfs/helpers/urar.in 2013-11-28 07:14:54.000000000 +0100
@@ -4,6 +4,11 @@
# (C) 1996 2:5020/337.13@fidonet.org
# Updated by christian.gennerat@alcatel.fr 1999
# Andrew V. Samoilov <sav@bcs.zp.ua> 2000
+#
+# Andrew Borodin <aborodin@vmail.ru>
+# David Haller <dnh@opensuse.org>
+# 2013: support unrar5
+#
# beta version 2.0
#
# rar and unrar can be found on http://www.rarlabs.com/
@@ -39,18 +44,62 @@
mcrar5fs_list ()
{
- $UNRAR v -c- -cfg- "$1" | @AWK@ -v uid=`id -u` -v gid=`id -g` '
-BEGIN { flag=0 }
-/^-----------/ { flag++; if (flag > 1) exit 0; next }
-flag==1 {
- split($5, a, "-")
- if (index($1, "D") != 0)
- $1="drwxr-xr-x"
- else
- if (index($1, ".") != 0)
- $1="-rw-r--r--"
- printf "%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n", $1, uid, gid, $2, a[2], a[1], a[3], $6, $8
-}'
+ $UNRAR vt -c- -cfg- "$1" | @AWK@ -F ':' -v uid=`id -u` -v gid=`id -g` '
+ {
+ ### remove space after the ":" of the field name
+ sub ("^ ", "", $2);
+ }
+
+ $1 ~ / *Name$/ {
+ ### next file
+ name = mtime = size = attrs = "";
+ delete date;
+ name = $2;
+ ### if the name contains ":", append the rest of the fields
+ if (NF > 2) {
+ for (i = 3; i <= NF; i++) {
+ name = name ":" $i;
+ }
+ }
+ }
+ $1 ~ /^ *mtime$/ {
+ mtime = $2 ":" $3;
+ }
+ $1 ~ /^ *Size$/ {
+ size = $2;
+ }
+ $1 ~ /^ *Attributes$/ {
+ attrs = $2;
+ }
+
+ $1 ~ /^ *Compression$/ {
+ ### file done, using /^$/ is not so good you
+ ### would have to skip the version stuff first
+
+ ### get date and time
+ split (mtime, date, " ");
+ time = date[2];
+ ### cut off seconds from the time
+ sub (",[0-9]*$", "", time);
+ ### split for reordering of the date in the printf below
+ split (date[1], date, "-");
+ ### mc seems to be able to parse 4 digit years too, so remove if tested
+ # sub ("^..", "", date[1]); ### cut year to 2 digits only
+
+ ### check/adjust rights
+ if (index (attrs, "D") != 0) {
+ attrs = "drwxr-xr-x";
+ } else {
+ if (index (attrs, ".") != 0) {
+ attrs = "-rw-r--r--";
+ }
+ }
+
+ ### and finally
+ printf ("%s 1 %s %s %d %02d/%02d/%02d %s ./%s\n",
+ attrs, uid, gid, size, date[2], date[3], date[1], time, name);
+ }
+'
}
mcrarfs_list ()