Ticket #3331: iso9660_UDF_list_extract.patch

File iso9660_UDF_list_extract.patch, 2.7 KB (added by SkyRE, 7 years ago)

diff -rupN /usr/lib/mc/extfs.d/iso9660 ~/.local/share/mc/extfs.d/iso9660

  • mc/extfs.d/iso9660

    old new  
    3232#*** file scope functions ********************************************** 
    3333 
    3434XORRISO=$(which xorriso 2>/dev/null) 
     35A7Z=$(which 7z 2>/dev/null) 
     36UDF= 
    3537 
    3638xorriso_list() { 
    3739    if test -z "$XORRISO"; then 
    xorriso_list() { 
    5153    done 
    5254} 
    5355 
     56a7z_copyout() { 
     57    if test -z "$A7Z"; then 
     58        return 1 
     59    fi 
     60    $A7Z e -bd -so "$1" "$2" >$3 2>/dev/null 
     61} 
     62 
    5463xorriso_copyout() { 
    5564    if test -z "$XORRISO"; then 
    5665        return 1 
    test_iso () { 
    105114 
    106115    ISOINFO_D_I="$(isoinfo -d -i "$1" 2>/dev/null)" 
    107116 
     117    ISOINFO_L_I_README_TXT="$(isoinfo -l -i "$1" | /bin/grep "README.TXT" 2>/dev/null)" 
     118 
     119    ISOINFO_L_I="$(isoinfo -l -i "$1" | wc -l 2>/dev/null)" 
     120 
    108121    echo "$ISOINFO_D_I" | /bin/grep "UCS level 1\|NO Joliet" > /dev/null || ISOINFO="$ISOINFO $JOLIET_OPT" 
    109122 
    110123    if [ $(echo "$ISOINFO_D_I" | /bin/grep "Joliet with UCS level 3 found" | wc -l) = 1 \ 
    111124        -a $(echo "$ISOINFO_D_I" | /bin/grep "NO Rock Ridge" | wc -l) = 1 ] ; then 
    112125        SEMICOLON="YES" 
    113126    fi 
     127    if [ $(echo "$ISOINFO_D_I" | /bin/grep "NO Joliet present" | wc -l) = 1 \ 
     128        -a $(echo "$ISOINFO_D_I" | /bin/grep "NO Rock Ridge present"| wc -l) = 1 \ 
     129        -a $(echo "$ISOINFO_L_I") = 5 \ 
     130        -a $(echo "$ISOINFO_L_I_README_TXT"| wc -l) = 1 ] ; then 
     131        UDF="yes" 
     132    fi 
    114133} 
    115134 
    116135mcisofs_list () { 
    BEGIN { 
    156175}' 
    157176} 
    158177 
     178mcudffs_list () { 
     179    $A7Z l "$1" 2>/dev/null | awk ' 
     180BEGIN { 
     181  split("Jan Feb Mch Apr May Jun Jul Aug Sep Oct Nov Dec", aMonths) 
     182} 
     183/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\ [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\ D\.\.\.\./ { next } 
     184/^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\ [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\ .*/ { 
     185  split($1, aDate, "-") 
     186  month=aDate[2]+0 
     187  date=aMonths[month] " " aDate[3] " " aDate[1] 
     188  attr="-r--r--r--   1 root root" 
     189  printf ("%s %15s %s %s\n", attr, $4, date, $6); 
     190}' 
     191} 
     192 
    159193mcisofs_copyout () { 
    160194    if [ "x$SEMICOLON" = "xYES" ]; then 
    161195        $ISOINFO -i "$1" -x "/$2;1" 2>/dev/null > "$3" 
    shift 
    173207 
    174208case "$cmd" in 
    175209  list) 
    176     xorriso_list "$@" || { 
    177         test_iso "$@"; 
    178         mcisofs_list "$@"; 
    179     } 
     210    test_iso "$@"; 
     211    if ! test -z "$UDF" ; then 
     212        mcudffs_list "$@"; 
     213    else 
     214        xorriso_list "$@" || { 
     215            test_iso "$@"; 
     216            mcisofs_list "$@"; 
     217        } 
     218    fi 
    180219    exit 0 
    181220    ;; 
    182221  rm) 
    case "$cmd" in 
    204243    exit 0 
    205244    ;; 
    206245  copyout) 
     246    test_iso "$@"; 
     247    if ! test -z "$UDF" ; then 
     248        a7z_copyout "$@"; 
     249    else 
    207250    xorriso_copyout "$@" || { 
    208251        test_iso "$@"; 
    209252        mcisofs_copyout "$@"; 
    210253    } 
     254    fi 
    211255    exit 0 
    212256    ;; 
    213257esac