File mc-extfs-helpers-urar.patch of Package mc.openSUSE_13.1_Update

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 ()
openSUSE Build Service is sponsored by