libcdio-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Libcdio-devel] libcdio treats a >4GB ISO-9660 file as 2 separate pa


From: Thomas Schmitt
Subject: Re: [Libcdio-devel] libcdio treats a >4GB ISO-9660 file as 2 separate parts
Date: Thu, 24 Aug 2017 18:27:27 +0200

Hi,

Pete Batard wrote:
> I don't believe this has anything with LFS.

This rather looks like lack of ISO 9660 level 3 support.
Does it have to be explicitely enabled in libcdio ? 

I am somewhat clueless when reading
  https://www.gnu.org/software/libcdio/libcdio.html#ISO-9660-Level-3
  "Level 3 ISO-9660 allows non-contiguous files, useful if the file was
   written in multiple packets with packet-writing software."

It has nothing to do with packet-writing, which is a SCSI/MMC thing.

Files larger than 4 GiB - 1 byte are represented by more than one directory
record. That's because the byte counter of a single record is unsigned 32 bit.
Each of the records of the file has the same name. Bit 7 of the File Flags
at BP 26 (= offset 25) tells that the next record belongs to the same file.
The data blocks governed by a directory record are called File Section or
Extent. See ECMA-119: 6.5, 9.1.6, 10.2, 10.3.


> You can download the problematic ISO (7.1 GB) by using the link below.

I can offer much leaner example downloads, which i made years ago.

The described problem is demonstrated by

  https://dev.haiku-os.org/raw-attachment/ticket/8473/file_of_4gb.iso.bz2

with 25,183 bytes of download size. Add a handful of seconds of bunzip2
to get 4,297,523,200 bytes.

Content, as of xorriso -indev ... -find / -exec lsdl :

  drwxr-xr-x    1 0        0               0 Apr 16  2012 '/'
  -rw-r--r--    1 1000     1000            4 Apr 16  2012 '/aaa'
  -rw-r--r--    1 1000     1000     4297064448 Apr 16  2012 '/file_of_4gb'
  -rw-r--r--    1 1000     1000            4 Apr 16  2012 '/zzz'

With ./example/isolist of my libcdio-TS-RockRidge-Fix branch:

  d [LSN     50]     2048 /.
  d [LSN     50]     2048 /..
  - [LSN 2098231]        4 /aaa
  - [LSN     55] 4294965248 /file_of_4gb
  - [LSN 2097206]  2099200 /file_of_4gb
  - [LSN 2098232]        4 /zzz

There are other variations in the attachment list of
  https://dev.haiku-os.org/ticket/8473

--------------------------------------------------------------------
This is my advanced torture bench for letting BSDs and Solaris fail:

  http://scdbackup.webframe.org/large.iso.bz2

(4470 bytes -> 4,329,897,984 bytes.)

Content, as of xorriso -indev ... -find / -exec lsdl :
  drwxr-xr-x    1 0        0               0 May  6  2014 '/'
  drwxr-xr-x    1 1000     1000            0 May  6  2014 '/my'
  -rw-r--r--    1 1000     1000     4329375744 May  6  2014 '/my/large_file'
  -rw-r--r--    1 1000     1000            6 May  6  2014 '/small_file'

And with ./example/isolist of my libcdio-TS-RockRidge-Fix branch:

  d [LSN 2114034]     2048 /.
  d [LSN 2114034]     2048 /..
  d [LSN 2114036]     2048 /my
  - [LSN 2114040]        6 /small_file

The directory tree is from a second session and located above block 2,114,016
= byte 4,329,504,768 

  TOC layout   : Idx ,  sbsector ,       Size , Volume Id
  ISO session  :   1 ,        32 ,   2113977s , ISOIMAGE
  ISO session  :   2 ,   2114016 ,        25s , ISOIMAGE


Have a nice day :)

Thomas




reply via email to

[Prev in Thread] Current Thread [Next in Thread]