[k3b] [Bug 387765] K3b says that blu-ray ISO is not recognizable

Thomas Schmitt bugzilla_noreply at kde.org
Wed Dec 13 11:51:33 UTC 2017


https://bugs.kde.org/show_bug.cgi?id=387765

--- Comment #6 from Thomas Schmitt <scdbackup at gmx.net> ---
Hi,

another interesting point is why your image is not recognized as IMAGE_ISO
by K3B.

What do you get from command "file" ?

  file /path/to/image/file

The following code reasoning and your mentioning of Nero brings me to the
suspicion that you have a .NRG image.
  https://en.wikipedia.org/wiki/NRG_%28file_format%29

If not K3B can unpack it automagically, then you first need to retrieve
the image payload from the .NRG. This payload would then be an ISO 9660
or UDF filesystem image.
There is a tool named "nrg2iso". On a Debian derivate it should be available
as binary package. Like:
  https://packages.debian.org/stretch/nrg2iso


--------------------------------------------------------------------------
No for my doubt that we have any kind of ISO 9660 filesystem image here:

The recognition of ISO 9660 filesystems is done in
  https://cgit.kde.org/k3b.git/tree/src/misc/k3bimagewritingdialog.cpp#n786
by
        K3b::Iso9660 isoF( path );
        if( isoF.open() ) {
            ...
            d->foundImageType = IMAGE_ISO;

The .open() function is implemented in
  https://cgit.kde.org/k3b.git/tree/libk3b/tools/k3biso9660.cpp#n589

Reasons for returning "false" would be
        if( !m_filename.isEmpty() )
            ...
        else if( d->fd > 0 )
            ...
        else if( d->cdDevice ) {
            ...
        else
            return false;
or
    d->isOpen = d->backend->open();
    if( !d->isOpen )
        return false;
or
    desc = ReadISO9660( &K3b::Iso9660::read_callback, d->startSector, this );

    if (!desc) {
        qDebug() << "K3b::Iso9660::openArchive no volume descriptors";
        close();
        return false;

The first occasion would be that not suitable pointer to the image file
is given: Neither name, nor file descriptor number, nor a CD device.

The second occasion is that opening as ISO 9660 fails.
  bool K3b::Iso9660FileBackend::open()
in
  https://cgit.kde.org/k3b.git/tree/libk3b/tools/k3biso9660backend.cpp#n129
looks like a C++ bloat of POSIX function open(2).
So it would fail only if there is no file or no permission to read it.

The third occasion is during inspection of the ISO 9660 filesystem
Volume Descriptors. The 2048-byte blocks are read beginning at d->startSector
until the end marking Volume Descriptor (ISO_VD_END) is read. Those sectors
which were identified as ISO 9660 superblock (ISO_VD_PRIMARY), El Torito Boot
Record (ISO_VD_BOOT), or Joliet superblock (ISO_VD_SUPPLEMENTARY) have been
put into a list.
If no such sectors were found, then the return value is NULL and triggers
the message "K3b::Iso9660::openArchive no volume descriptors".

UDF filesystems are supposed to have a ISO 9660 superblock for backward
compatibility. So an UDF image would yield a non-empty list and thus
be perveived by the caller of ReadISO9660 as IMAGE_ISO.

Have a nice day :)

Thomas

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the k3b mailing list