Browse Source

Ticket #1681: extfs for .cab

Added ability for work with Microsoft CAB archives.

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
Yuri Fil 15 years ago
parent
commit
c5fd4aef8e
4 changed files with 49 additions and 1 deletions
  1. 5 0
      misc/mc.ext.in
  2. 1 1
      vfs/extfs/Makefile.am
  3. 3 0
      vfs/extfs/extfs.ini
  4. 40 0
      vfs/extfs/ucab

+ 5 - 0
misc/mc.ext.in

@@ -154,6 +154,11 @@ regex/\.a(rj|[0-9][0-9])$
 	Open=%cd %p#uarj
 	View=%view{ascii} unarj l %f
 
+# cab
+regex/\.([cC][aA][bB])$
+	Open=%cd %p#ucab
+	View=%view{ascii} cabextract -l %f
+
 # ha
 regex/\.([Hh][Aa])$
 	Open=%cd %p#uha

+ 1 - 1
vfs/extfs/Makefile.am

@@ -6,7 +6,7 @@ EXTFSCONFFILES = extfs.ini sfs.ini
 EXTFS_MISC  = README
 
 # Scripts hat don't need adaptation to the local system
-EXTFS_CONST = bpp rpm trpm srpm u7z
+EXTFS_CONST = bpp rpm trpm srpm u7z ucab
 
 # Scripts that need adaptation to the local system - source files
 EXTFS_IN    = 			\

+ 3 - 0
vfs/extfs/extfs.ini

@@ -14,6 +14,9 @@ uarj
 uarc
 uace
 
+# For cab files
+ucab
+
 # ar is used for static libraries
 uar
 

+ 40 - 0
vfs/extfs/ucab

@@ -0,0 +1,40 @@
+#! /bin/sh
+
+CAB=cabextract
+
+mccabfs_list ()
+{
+    $CAB -l "$1" | gawk -v uid=`id -un` -v gid=`id -gn` '
+BEGIN { flag=0 }
+/^-------/ { flag++; if (flag > 1) exit 0; next }
+{
+if (flag == 0) next
+if (length($6) == 0) next
+pr="-rw-r--r--"
+split($3, a, ".")
+split($4, b, ":")
+printf "%s 1 %s %s %d %02d/%02d/%02d %02d:%02d  %s\n", pr, uid, gid, $1, a[2], a[1], a[3], b[1], b[2], $6
+}'
+
+}
+
+mccabfs_copyout ()
+{
+    $CAB -F "$2" -p "$1" > "$3"
+}
+
+LC_ALL=C
+export LC_ALL
+
+umask 077
+
+cmd="$1"
+
+case "$cmd" in
+  # Workaround for a bug in mc - directories must precede files to
+  # avoid duplicate entries, so we sort output by filenames
+  list)    mccabfs_list    "$2" ;;
+  copyout) mccabfs_copyout "$2" "$3" "$4" ;;
+  *) exit 1 ;;
+esac
+exit 0