24 #define MAX_ISO_READ            10000    25 #define MAX_FILENAME_LENGTH     207    26 #define SEPARATOR_1             '\x2E' // .    27 #define SEPARATOR_2             '\x3B' // ;    28 #define SECTOR_SIZE             2352    29 #define SECTOR_SIZE_HEADER      24    30 #define SECTOR_SIZE_DATA        2048    31 #define SECTOR_SIZE_FOOTER      280   116     quint8 volume_set_id[128];
   117     quint8 publisher_id[128];
   118     quint8 preparer_id[128];
   119     quint8 application_id[128];
   120     quint8 copyright_file_id[37];
   121     quint8 abstract_file_id[37];
   122     quint8 bibliographic_file_id[37];
   129     quint8 application_data[512];
   143     const QString &name() 
const;
   144     quint32 location() 
const;
   145     quint32 locationAfter() 
const;
   146     quint32 size() 
const;
   147     quint32 sectorCount() 
const;
   148     quint32 newLocation() 
const;
   149     quint32 newSize() 
const;
   150     quint32 newSectorCount() 
const;
   151     void setName(
const QString &name);
   152     void setLocation(quint32 location);
   153     virtual bool isDirectory() 
const=0;
   155     virtual bool isModified() 
const;
   156     virtual void applyModifications();
   157     bool isSpecial() 
const;
   159     void setPaddingAfter(quint8 after);
   160     quint8 paddingAfter() 
const;
   163     IsoFileOrDirectory(const QString &name, quint32 location, quint32 size, qint64 structPosition);
   165     quint32 _location, _size;
   166     quint32 _newLocation, _newSize;
   167     quint8 _paddingAfter;
   173     IsoFile(
const QString &name, quint32 location, quint32 size, qint64 structPosition, 
IsoArchiveIO *io);
   175     bool isDirectory() 
const;
   176     QByteArray data(quint32 maxSize=0) 
const;
   177     QByteArray modifiedData(quint32 maxSize=0) 
const;
   178     bool extract(
const QString &destination, quint32 maxSize=0) 
const;
   179     QIODevice *file() 
const;
   180     QIODevice *modifiedFile() 
const;
   181     bool setModifiedFile(QIODevice *io);
   182     bool setModifiedFile(
const QByteArray &data);
   183     bool isModified() 
const;
   184     void applyModifications();
   187     void setFile(QIODevice *io);
   196     IsoDirectory(
const QString &name, quint32 location, quint32 size, qint64 structPosition);
   198     bool isDirectory() 
const;
   199     const QMap<QString, IsoFileOrDirectory *> &filesAndDirectories() 
const;
   200     QList<IsoFile *> files() 
const;
   201     QList<IsoDirectory *> directories() 
const;
   203     IsoFile *file(
const QString &path) 
const;
   219     bool open(QIODevice::OpenMode mode);
   220     qint64 posIso() 
const;
   221     bool seekIso(qint64 off);
   222     qint64 sizeIso() 
const;
   224     qint64 readIso(
char *data, qint64 maxSize);
   225     QByteArray readIso(qint64 maxSize);
   227     qint64 writeIso(
const char *data, qint64 maxSize);
   228     qint64 writeIso(
const QByteArray &byteArray);
   235             h2 = dec2Hex(
id/75 + 2);
   236             h3 = dec2Hex(
id - 75*(hex2Dec(h2) - 2));
   238             h1 = dec2Hex((
id + 150) / 4500);
   239             h2 = dec2Hex((
id + 150 - hex2Dec(h1)*4500) / 75);
   240             h3 = dec2Hex(
id + 150 - hex2Dec(h1)*4500 - hex2Dec(h2)*75);
   243         return QByteArray().append((
char)h1).append((
char)h2).append((
char)h3);
   245     static inline QByteArray 
buildHeader(quint32 sector, quint8 type, quint8 mode=2) {
   246         return QByteArray(
"\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00", 12)
   247                 .append(int2Header(sector)).append((
char)mode)
   248                 .append(
"\x00\x00", 2).append((
char)type).append(
'\x00')
   249                 .append(
"\x00\x00", 2).append((
char)type).append(
'\x00');
   256     static inline void headerInfos(
const QByteArray &header, quint8 *type, quint8 *mode = NULL) {
   259             *type = header.at(18);
   262             *mode = header.at(15);
   267     QByteArray sectorHeader(quint32 num);
   268     QByteArray sectorFooter(quint32 num);
   269     quint32 currentSector() 
const;
   270     quint32 sectorCount() 
const;
   271     static quint32 sectorCountData(quint32 dataSize);
   272     bool seekToSector(quint32 num);
   273     bool writeSector(
const QByteArray &data, quint8 type, quint8 mode=2);
   276     static qint64 isoPos(qint64 pos);
   277     static qint64 filePos(qint64 pos);
   280         return 10*(hex/16) + hex%16;
   283         return 16*(dec/10) + dec%10;
   291     bool open(OpenMode mode);
   293     bool canReadLine() 
const;
   295     qint64 readData(
char *data, qint64 maxSize);
   296     qint64 writeData(
const char *data, qint64 maxSize);
   307     explicit IsoArchive(
const QString &name);
   308     virtual ~IsoArchive();
   310     virtual bool open(QIODevice::OpenMode mode);
   312         return _io.isOpen() && _rootDirectory;
   314     virtual void close();
   316         return _io.fileName();
   319         _io.setFileName(fileName);
   322         return _io.errorString();
   331     QByteArray file(
const QString &path, quint32 maxSize=0) 
const;
   332     QIODevice *fileDevice(
const QString &path) 
const;
   333     QByteArray modifiedFile(
const QString &path, quint32 maxSize=0) 
const;
   334     QIODevice *modifiedFileDevice(
const QString &path) 
const;
   335     bool extract(
const QString &path, 
const QString &destination, quint32 maxSize=0) 
const;
   336     bool extractDir(
const QString &path, 
const QString &destination) 
const;
   337     void extractAll(
const QString &destination) 
const;
   338     qint32 diffCountSectors(
const QString &path, quint32 newSize) 
const;
   347     virtual bool reorganizeModifiedFilesAfter(QMap<quint32, const IsoFile *> &writeToTheMain, QList<const IsoFile *> &writeToTheEnd);
   350     Q_DISABLE_COPY(IsoArchive)
   351     bool openVolumeDescriptor(quint8 num=0);
   357     static int findPadding(
const QList<IsoFileOrDirectory *> &filesWithPadding, quint32 minSectorCount);
   359     QList<IsoFileOrDirectory *> getIntegrity();
   362     void _extractAll(
const QString &destination, 
IsoDirectory *directories, QString currentInternalDir=QString()) 
const;
   363     void _getIntegrity(QMap<quint32, IsoFileOrDirectory *> &files, 
IsoDirectory *directory) 
const;
   364     QMap<quint32, IsoFile *> getModifiedFiles(
IsoDirectory *directory) 
const;
   365     void getModifiedFiles(QMap<quint32, IsoFile *> &files, 
IsoDirectory *directory) 
const;
   366     static void repairLocationSectors(
IsoDirectory *directory, IsoArchive *newIso);
   368     bool writeFile(QIODevice *in, quint32 sectorCount = 0, 
ArchiveObserver *control = NULL);
   379 #ifdef ISOARCHIVE_DEBUG   380     static QString isoTimeToString(
const IsoTime &time);
   383     static QString pathTableToString(
const PathTable &pathTable, 
bool bigEndian=
false);
   387 #endif // ISOARCHIVE_H 
Archive::ArchiveError _error
 
quint16 volume_sequence_number2
 
static QByteArray int2Header(quint32 id)
 
#define SECTOR_SIZE_FOOTER
 
quint8 file_structure_version
 
quint16 volume_sequence_number
 
quint8 extended_attr_record_length
 
QString errorString() const 
 
static QByteArray buildFooter(quint32 sector)
 
quint16 logical_block_size
 
quint16 volume_sequence_number2
 
quint16 volume_sequence_number
 
IsoTime modification_date
 
virtual bool open(QIODevice::OpenMode mode)
 
quint8 extended_attr_record_length
 
quint32 volume_space_size2
 
IsoDirectory * _rootDirectory
 
quint16 parent_directory_number
 
quint32 opt_type_path_table
 
quint16 logical_block_size2
 
void setFileName(const QString &fileName)
 
quint32 opt_type_path_table2
 
quint8 interleave_grap_size
 
const IsoArchiveIO & io() const 
 
#define SECTOR_SIZE_HEADER
 
static void headerInfos(const QByteArray &header, quint8 *type, quint8 *mode=NULL)
 
quint32 volume_space_size
 
static QByteArray buildHeader(quint32 sector, quint8 type, quint8 mode=2)
 
static quint8 dec2Hex(quint8 dec)
 
static quint8 hex2Dec(quint8 hex)
 
virtual bool isOpen() const