Package: xorriso
Version: 1.5.4-4
Control: found -1 1.5.0-1
Control: found -1 1.5.2-1

        When -clone is used on a file that belongs to the loaded
        session, its contents get /copied/ to the new one (with the
        location of the original one updated to match the copy);
        while when used on a file /within/ the current session, the
        resulting file (as expected) appears to share the extent
        with the original one.

        I believe that when it comes to rearranging data on ECMA 119
        filesystems, it is as important for -clone /not/ to copy the
        affected files’ contents as it is for, say, -move.

        Consider, for instance, the following shell code.

#!/bin/sh

set -e
set -x
set -C -u

## NB: an arbitrary value, but must be larger than first session size
session_offset=256

f=$(mktemp -- /tmp/hello.XXXXX)
printf %s\\n "Hello, world!" >| "$f"

g=$(mktemp -- /tmp/iso.XXXXX)
xorriso -padding 0 -uid 0 -gid 0 \
    -outdev stdio:/dev/fd/5 5>| "$g" \
    -pathspecs on -add /hello/hello.world="$f" -- \
    -clone /hello/hello.world /hello/hello.withn

h=$(mktemp -- /tmp/iso.XXXXX)
xorriso -padding 0 -uid 0 -gid 0 \
    -indev  stdio:/dev/fd/4 4< "$g" \
    -grow-blindly "$session_offset" \
    -outdev stdio:/dev/fd/5 5>| "$h" \
    -clone /hello/hello.world /hello/hello.clone
dd bs=2048 seek="$session_offset" conv=notrunc of="$g" < "$h"

isoinfo -l -i /dev/stdin < "$g"
isoinfo -l -T "$session_offset" -i /dev/stdin < "$g"

        The resulting sessions are as follows.

+ isoinfo -l -i /dev/stdin

Directory listing of /
d---------   0    0    0            2048 Oct 26 2022 [     18 02]  . 
d---------   0    0    0            2048 Oct 26 2022 [     18 02]  .. 
d---------   0    0    0            2048 Oct 26 2022 [     20 02]  HELLO 

Directory listing of /HELLO/
d---------   0    0    0            2048 Oct 26 2022 [     20 02]  . 
d---------   0    0    0            2048 Oct 26 2022 [     18 02]  .. 
----------   0    0    0              14 Oct 26 2022 [     33 00]  
HELLO.WITHN;1 
----------   0    0    0              14 Oct 26 2022 [     33 00]  
HELLO.WORLD;1 
+ isoinfo -l -T 256 -i /dev/stdin

Directory listing of /
d---------   0    0    0            2048 Oct 26 2022 [    274 02]  . 
d---------   0    0    0            2048 Oct 26 2022 [    274 02]  .. 
d---------   0    0    0            2048 Oct 26 2022 [    276 02]  HELLO 

Directory listing of /HELLO/
d---------   0    0    0            2048 Oct 26 2022 [    276 02]  . 
d---------   0    0    0            2048 Oct 26 2022 [    274 02]  .. 
----------   0    0    0              14 Oct 26 2022 [    280 00]  
HELLO.CLONE;1 
----------   0    0    0              14 Oct 26 2022 [    280 00]  
HELLO.WITHN;1 
----------   0    0    0              14 Oct 26 2022 [    280 00]  
HELLO.WORLD;1 

        Note that all three entries moved from LBA 33 to LBA 280.

        Using two months old versions from Git (libburn 19545142,
        libisoburn 3318fa47 and libisofs c6cb7dfa; the few changes
        since these revisions made to the latter two don’t seem to
        be relevant to the issue) gives the same result.

        Omitting the -grow-blindly option (and using -dev stdio:"$h"
        instead) doesn’t seem to change this behavior, either.

-- 
FSF associate member #7257  http://am-1.org/~ivan/

Reply via email to