mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 04:46:55 +03:00
Merge branch '3570_xorriso_slow'
* 3570_xorriso_slow: extfs: add test data for the iso9660 extfs helper (xorriso part) extfs: modify the iso9660 extfs helper to support testing (xorriso part) Ticket #3570: reimplement xorriso part of iso9660 listing.
This commit is contained in:
commit
49e2535c07
@ -11,6 +11,7 @@
|
|||||||
# Kachalov Anton <mouse@linux.ru.net>, 2003
|
# Kachalov Anton <mouse@linux.ru.net>, 2003
|
||||||
# Victor Ananjevsky <ananasik@gmail.com>, 2013
|
# Victor Ananjevsky <ananasik@gmail.com>, 2013
|
||||||
# slava zanko <slavazanko@gmail.com>, 2013
|
# slava zanko <slavazanko@gmail.com>, 2013
|
||||||
|
# slowpeek <slowpeek@users.noreply.github.com>, 2024
|
||||||
#
|
#
|
||||||
# This file is part of the Midnight Commander.
|
# This file is part of the Midnight Commander.
|
||||||
#
|
#
|
||||||
@ -33,27 +34,77 @@
|
|||||||
|
|
||||||
XORRISO=$(which xorriso 2>/dev/null)
|
XORRISO=$(which xorriso 2>/dev/null)
|
||||||
|
|
||||||
|
# This snippet is used to undo xorriso's Text_shellsafe(). Pseudocode for the
|
||||||
|
# function:
|
||||||
|
#
|
||||||
|
# Text_shellsafe( s) {
|
||||||
|
# return q(') replace(q('), q('"'"'), s) q(')
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# Xorriso_ls() uses two formats for pathes:
|
||||||
|
# - generic: Text_shellsafe(path)
|
||||||
|
# - symlink: Text_shellsafe(link) q( -> ) Text_shellsafe(target)
|
||||||
|
#
|
||||||
|
# References in xorriso sources:
|
||||||
|
# - iso_tree.c:Xorriso_ls()
|
||||||
|
# - text_io.c:Xorriso_esc_filepath()
|
||||||
|
# - misc_funct.c:Text_shellsafe()
|
||||||
|
awk_xorriso_unesc=$(cat <<'EOF'
|
||||||
|
{
|
||||||
|
# Start of the path part
|
||||||
|
i = index($0, "'")
|
||||||
|
|
||||||
|
s = substr($0, i)
|
||||||
|
# The path part with the wrapping quotes removed
|
||||||
|
s = substr(s, 2, length(s)-2)
|
||||||
|
|
||||||
|
if (substr($0, 1, 1) == "l") {
|
||||||
|
s1=s
|
||||||
|
if (gsub("->", "", s1) > 1) {
|
||||||
|
# Ambiguity: either the link or its target contains q(->) in
|
||||||
|
# addition to the link/target delimiter
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
j = index(s, "' -> '")
|
||||||
|
# link -> target with the wrapping quotes removed from both
|
||||||
|
s = substr(s, 1, j-1) " -> " substr(s, j+6)
|
||||||
|
} else if (index(s, "->")) {
|
||||||
|
# Ambiguity: not a symlink, but there is q(->)
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
gsub("'\"'\"'", "'", s)
|
||||||
|
print substr($0, 1, i-1) s
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
xorriso_list() {
|
xorriso_list() {
|
||||||
if test -z "$XORRISO"; then
|
if test -z "$XORRISO"; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
local dir attr ln usr gr sz dt1 dt2 dt3 nm len name lsl r
|
|
||||||
dir="${2:-/}"
|
|
||||||
lsl=$( $XORRISO -abort_on FATAL -dev stdio:"$1" -cd "$dir" -lsl 2> /dev/null )
|
|
||||||
r=$?
|
|
||||||
test $r -gt 0 && return $r
|
|
||||||
|
|
||||||
echo "$lsl" | grep "^[-d]" | \
|
local temp_ls
|
||||||
while read attr ln usr gr sz dt1 dt2 dt3 nm ; do
|
temp_ls=$(mktemp "${MC_TMPDIR:-/tmp}"/mc-iso9660.XXXXXX) || return 1
|
||||||
len=$((${#nm} - 1))
|
|
||||||
name=$(printf -- "$nm" | cut -c2-$len) # remove quotes
|
|
||||||
|
|
||||||
if test $(printf -- "$attr" | cut -c1-1) != "d"; then
|
# $XORRISO must be unquoted here to hook into the testing framework
|
||||||
printf -- "%s %s %s %s %s %s %s %s %s/%s\n" "$attr" "$ln" "$usr" "$gr" "$sz" "$dt1" "$dt2" "$dt3" "$dir" "$name"
|
$XORRISO -abort_on FATAL -dev stdio:"$1" -find / -exec lsdl 2>/dev/null >"$temp_ls"
|
||||||
else
|
local r=$?
|
||||||
xorriso_list "$1" "$dir/$name"
|
|
||||||
|
if [ "$r" != 0 ]; then
|
||||||
|
rm -f "$temp_ls"
|
||||||
|
return "$r"
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
|
# The first line is /, skip it
|
||||||
|
tail -n+2 "$temp_ls" |
|
||||||
|
# disk_ops.c:Xorriso_format_ls_l() prints the boot catalog file as of
|
||||||
|
# type "e". Make it a generic file
|
||||||
|
sed -E 's,^e,-,' |
|
||||||
|
@AWK@ "$awk_xorriso_unesc"
|
||||||
|
|
||||||
|
rm -f "$temp_ls"
|
||||||
}
|
}
|
||||||
|
|
||||||
xorriso_copyout() {
|
xorriso_copyout() {
|
||||||
@ -195,6 +246,20 @@ shift
|
|||||||
|
|
||||||
case "$cmd" in
|
case "$cmd" in
|
||||||
list)
|
list)
|
||||||
|
if [ -n "${MC_TEST_EXTFS_LIST_CMD:-}" ]; then
|
||||||
|
case "${MC_TEST_EXTFS_ISO9660_TOOL}" in
|
||||||
|
xorriso)
|
||||||
|
XORRISO="$MC_TEST_EXTFS_LIST_CMD"
|
||||||
|
xorriso_list "$@" || exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
xorriso_list "$@" || {
|
xorriso_list "$@" || {
|
||||||
test_iso "$@" || exit 1
|
test_iso "$@" || exit 1
|
||||||
mcisofs_list "$@" || exit 1
|
mcisofs_list "$@" || exit 1
|
||||||
|
@ -32,6 +32,10 @@ data_files_to_distribute = \
|
|||||||
data/hp48+.args \
|
data/hp48+.args \
|
||||||
data/hp48+.input \
|
data/hp48+.input \
|
||||||
data/hp48+.output \
|
data/hp48+.output \
|
||||||
|
data/iso9660.xorriso.env_vars \
|
||||||
|
data/iso9660.xorriso.input \
|
||||||
|
data/iso9660.xorriso.output \
|
||||||
|
data/iso9660.xorriso.README \
|
||||||
data/lslR.1.spaces.args \
|
data/lslR.1.spaces.args \
|
||||||
data/lslR.1.spaces.input \
|
data/lslR.1.spaces.input \
|
||||||
data/lslR.1.spaces.output \
|
data/lslR.1.spaces.output \
|
||||||
|
49
tests/src/vfs/extfs/helpers-list/data/iso9660.xorriso.README
Normal file
49
tests/src/vfs/extfs/helpers-list/data/iso9660.xorriso.README
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
Sample iso image was created from alpine-standard-3.19.0-x86_64.iso with such
|
||||||
|
script:
|
||||||
|
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if ! test -d links; then
|
||||||
|
mkdir "$_"
|
||||||
|
cd "$_"
|
||||||
|
|
||||||
|
touch no-quotes "inner'quote" "'side-quotes'"
|
||||||
|
|
||||||
|
ln -s no-quotes no-quotes-link
|
||||||
|
ln -s no-quotes "inner'quote-link-nq"
|
||||||
|
ln -s no-quotes "'side-quotes-link-nq'"
|
||||||
|
ln -s "inner'quote" "inner'quote-link-iq"
|
||||||
|
ln -s "inner'quote" "'side-quotes-link-iq'"
|
||||||
|
ln -s "'side-quotes'" "inner'quote-link-sq"
|
||||||
|
ln -s "'side-quotes'" "'side-quotes-link-sq'"
|
||||||
|
|
||||||
|
cd -
|
||||||
|
fi
|
||||||
|
|
||||||
|
args=(
|
||||||
|
-indev alpine-standard-3.19.0-x86_64.iso
|
||||||
|
-outdev sample.iso
|
||||||
|
-boot_image any replay
|
||||||
|
-joliet on
|
||||||
|
-rm_r /apks --
|
||||||
|
-cpr links / --
|
||||||
|
-chown_r 0 /links --
|
||||||
|
-chgrp_r 0 /links --
|
||||||
|
)
|
||||||
|
|
||||||
|
xorriso "${args[@]}"
|
||||||
|
|
||||||
|
Features:
|
||||||
|
- boot catalog file
|
||||||
|
- subdirs
|
||||||
|
- files with q(') included
|
||||||
|
- links with q(') included (name, target, both)
|
||||||
|
|
||||||
|
The quoted stuff is here because xorriso wraps pathes in single quotes and
|
||||||
|
escapes internal quotes, all with misc_funct.c:Text_shellsafe(). We revert it
|
||||||
|
back in the helper code.
|
||||||
|
|
||||||
|
|
||||||
|
Sample input was generated like this:
|
||||||
|
|
||||||
|
xorriso -dev sample.iso -find / -exec lsdl 2>/dev/null
|
@ -0,0 +1 @@
|
|||||||
|
MC_TEST_EXTFS_ISO9660_TOOL=xorriso
|
35
tests/src/vfs/extfs/helpers-list/data/iso9660.xorriso.input
Normal file
35
tests/src/vfs/extfs/helpers-list/data/iso9660.xorriso.input
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/'
|
||||||
|
-r--r--r-- 1 0 0 30 Dec 7 11:48 '/.alpine-release'
|
||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/boot'
|
||||||
|
-r--r--r-- 1 0 0 5751847 Dec 7 11:48 '/boot/System.map-lts'
|
||||||
|
-r--r--r-- 1 0 0 261013 Dec 7 11:48 '/boot/config-lts'
|
||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/boot/dtbs-lts'
|
||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/boot/grub'
|
||||||
|
-r--r--r-- 1 0 0 1474560 Dec 4 23:01 '/boot/grub/efi.img'
|
||||||
|
-r--r--r-- 1 0 0 140 Dec 7 11:48 '/boot/grub/grub.cfg'
|
||||||
|
-r--r--r-- 1 0 0 20486095 Dec 7 11:48 '/boot/initramfs-lts'
|
||||||
|
-r--r--r-- 1 0 0 160346112 Dec 7 11:48 '/boot/modloop-lts'
|
||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/boot/syslinux'
|
||||||
|
er--r--r-- 1 0 0 2048 Dec 4 23:01 '/boot/syslinux/boot.cat'
|
||||||
|
-r--r--r-- 1 0 0 432 May 16 2023 '/boot/syslinux/isohdpfx.bin'
|
||||||
|
-r--r--r-- 1 0 0 43008 May 16 2023 '/boot/syslinux/isolinux.bin'
|
||||||
|
-r--r--r-- 1 0 0 115468 May 16 2023 '/boot/syslinux/ldlinux.c32'
|
||||||
|
-r--r--r-- 1 0 0 178532 May 16 2023 '/boot/syslinux/libcom32.c32'
|
||||||
|
-r--r--r-- 1 0 0 23636 May 16 2023 '/boot/syslinux/libutil.c32'
|
||||||
|
-r--r--r-- 1 0 0 11712 May 16 2023 '/boot/syslinux/mboot.c32'
|
||||||
|
-r--r--r-- 1 0 0 193 Dec 7 11:48 '/boot/syslinux/syslinux.cfg'
|
||||||
|
-r--r--r-- 1 0 0 11879168 Dec 7 11:48 '/boot/vmlinuz-lts'
|
||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/efi'
|
||||||
|
dr-xr-xr-x 1 0 0 0 Dec 7 11:48 '/efi/boot'
|
||||||
|
-r--r--r-- 1 0 0 688128 Dec 7 11:48 '/efi/boot/bootx64.efi'
|
||||||
|
drwxr-xr-x 1 0 0 0 May 7 01:28 '/links'
|
||||||
|
-rw-r--r-- 1 0 0 0 May 7 01:28 '/links/'"'"'side-quotes'"'"''
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/'"'"'side-quotes-link-iq'"'"'' -> 'inner'"'"'quote'
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/'"'"'side-quotes-link-nq'"'"'' -> 'no-quotes'
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/'"'"'side-quotes-link-sq'"'"'' -> ''"'"'side-quotes'"'"''
|
||||||
|
-rw-r--r-- 1 0 0 0 May 7 01:28 '/links/inner'"'"'quote'
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/inner'"'"'quote-link-iq' -> 'inner'"'"'quote'
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/inner'"'"'quote-link-nq' -> 'no-quotes'
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/inner'"'"'quote-link-sq' -> ''"'"'side-quotes'"'"''
|
||||||
|
-rw-r--r-- 1 0 0 0 May 7 01:28 '/links/no-quotes'
|
||||||
|
lrwxrwxrwx 1 0 0 0 May 7 01:28 '/links/no-quotes-link' -> 'no-quotes'
|
34
tests/src/vfs/extfs/helpers-list/data/iso9660.xorriso.output
Normal file
34
tests/src/vfs/extfs/helpers-list/data/iso9660.xorriso.output
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
-r--r--r-- 1 0 0 30 2023-12-07 11:48:00 /.alpine-release
|
||||||
|
dr-xr-xr-x 1 0 0 0 2023-12-07 11:48:00 /boot
|
||||||
|
-r--r--r-- 1 0 0 5751847 2023-12-07 11:48:00 /boot/System.map-lts
|
||||||
|
-r--r--r-- 1 0 0 261013 2023-12-07 11:48:00 /boot/config-lts
|
||||||
|
dr-xr-xr-x 1 0 0 0 2023-12-07 11:48:00 /boot/dtbs-lts
|
||||||
|
dr-xr-xr-x 1 0 0 0 2023-12-07 11:48:00 /boot/grub
|
||||||
|
-r--r--r-- 1 0 0 1474560 2023-12-04 23:01:00 /boot/grub/efi.img
|
||||||
|
-r--r--r-- 1 0 0 140 2023-12-07 11:48:00 /boot/grub/grub.cfg
|
||||||
|
-r--r--r-- 1 0 0 20486095 2023-12-07 11:48:00 /boot/initramfs-lts
|
||||||
|
-r--r--r-- 1 0 0 160346112 2023-12-07 11:48:00 /boot/modloop-lts
|
||||||
|
dr-xr-xr-x 1 0 0 0 2023-12-07 11:48:00 /boot/syslinux
|
||||||
|
-r--r--r-- 1 0 0 2048 2023-12-04 23:01:00 /boot/syslinux/boot.cat
|
||||||
|
-r--r--r-- 1 0 0 432 2023-05-16 00:00:00 /boot/syslinux/isohdpfx.bin
|
||||||
|
-r--r--r-- 1 0 0 43008 2023-05-16 00:00:00 /boot/syslinux/isolinux.bin
|
||||||
|
-r--r--r-- 1 0 0 115468 2023-05-16 00:00:00 /boot/syslinux/ldlinux.c32
|
||||||
|
-r--r--r-- 1 0 0 178532 2023-05-16 00:00:00 /boot/syslinux/libcom32.c32
|
||||||
|
-r--r--r-- 1 0 0 23636 2023-05-16 00:00:00 /boot/syslinux/libutil.c32
|
||||||
|
-r--r--r-- 1 0 0 11712 2023-05-16 00:00:00 /boot/syslinux/mboot.c32
|
||||||
|
-r--r--r-- 1 0 0 193 2023-12-07 11:48:00 /boot/syslinux/syslinux.cfg
|
||||||
|
-r--r--r-- 1 0 0 11879168 2023-12-07 11:48:00 /boot/vmlinuz-lts
|
||||||
|
dr-xr-xr-x 1 0 0 0 2023-12-07 11:48:00 /efi
|
||||||
|
dr-xr-xr-x 1 0 0 0 2023-12-07 11:48:00 /efi/boot
|
||||||
|
-r--r--r-- 1 0 0 688128 2023-12-07 11:48:00 /efi/boot/bootx64.efi
|
||||||
|
drwxr-xr-x 1 0 0 0 2024-05-07 01:28:00 /links
|
||||||
|
-rw-r--r-- 1 0 0 0 2024-05-07 01:28:00 /links/'side-quotes'
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/'side-quotes-link-iq' -> inner'quote
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/'side-quotes-link-nq' -> no-quotes
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/'side-quotes-link-sq' -> 'side-quotes'
|
||||||
|
-rw-r--r-- 1 0 0 0 2024-05-07 01:28:00 /links/inner'quote
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/inner'quote-link-iq -> inner'quote
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/inner'quote-link-nq -> no-quotes
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/inner'quote-link-sq -> 'side-quotes'
|
||||||
|
-rw-r--r-- 1 0 0 0 2024-05-07 01:28:00 /links/no-quotes
|
||||||
|
lrwxrwxrwx 1 0 0 0 2024-05-07 01:28:00 /links/no-quotes-link -> no-quotes
|
Loading…
Reference in New Issue
Block a user