Ticket #3933: report iso9660 listing errors.

Variation 1:

Steps to reproduce:

    * create empty .iso file (touch foo.iso)
    * run 'mc' and press enter on empty .iso

Expected result: some error about invalid file format (sililar to what
F3 view would yield).
Actual result: mc elters a file as if it would be empty valid file.

Variation 2:
Steps to reproduce:

    * pick valid .iso file
    * deinstall all helper tools that handle .sio (isoinfo, xorriso, etc.)
    * run 'mc' and press enter on empty .iso

Expected result: some error about invalid file format (sililar to what
F3 view would yield)
Actual result: mc enters a file as if it would be empty valid file

Variation 2 is especially confusing for users as it does not hint them
that they should install a tool to get it working. They just observe
silently broken behaviour.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2019-07-07 14:44:10 +03:00
parent 3a1f3d7ff7
commit afdc9719f3

View File

@ -93,6 +93,8 @@ xorriso_rm() {
# tested to comply with isoinfo 2.0's output
test_iso () {
which isoinfo 2>/dev/null || (echo "isoinfo not found" >&2; return 1)
CHARSET=$(locale charmap 2>/dev/null)
if test -z "$CHARSET"; then
CHARSET=$(locale 2>/dev/null | @GREP@ LC_CTYPE | sed -n -e 's/.*\.\(.*\)"$/\1/p')
@ -119,6 +121,8 @@ test_iso () {
}
mcisofs_list () {
local lsl r
# left as a reminder to implement compressed image support =)
case "$1" in
*.lz) MYCAT="lzip -dc";;
@ -133,7 +137,11 @@ mcisofs_list () {
*) MYCAT="cat";;
esac
$ISOINFO -l -i "$1" 2>/dev/null | @AWK@ -v SEMICOLON=$SEMICOLON '
lsl=$($ISOINFO -l -i "$1" 2>/dev/null)
r=$?
test $r -gt 0 && return $r
echo "$lsl" | @AWK@ -v SEMICOLON=$SEMICOLON '
BEGIN {
dir="";
# Pattern to match 8 first fields.
@ -183,8 +191,8 @@ shift
case "$cmd" in
list)
xorriso_list "$@" || {
test_iso "$@";
mcisofs_list "$@";
test_iso "$@" || exit 1
mcisofs_list "$@" || exit 1
}
exit 0
;;