package: Suppress version mismatch errors where V1 is supported
* Add flags parameter to Init() of BPackageReader and friends. * Introduce flag B_HPKG_READER_DONT_PRINT_VERSION_MISMATCH_MESSAGE and don't print a version mismatch error when given. * package extract/list: Use the new flag.
This commit is contained in:
@@ -166,6 +166,14 @@ enum {
|
||||
};
|
||||
|
||||
|
||||
// Reader Init() flags
|
||||
enum {
|
||||
B_HPKG_READER_DONT_PRINT_VERSION_MISMATCH_MESSAGE = 0x01
|
||||
// Fail silently when encountering a package format version mismatch.
|
||||
// Don't print anything to the error output.
|
||||
};
|
||||
|
||||
|
||||
enum {
|
||||
B_HPKG_COMPRESSION_LEVEL_NONE = 0,
|
||||
B_HPKG_COMPRESSION_LEVEL_FASTEST = 1,
|
||||
|
||||
@@ -31,8 +31,8 @@ public:
|
||||
BPackageReader(BErrorOutput* errorOutput);
|
||||
~BPackageReader();
|
||||
|
||||
status_t Init(const char* fileName);
|
||||
status_t Init(int fd, bool keepFD);
|
||||
status_t Init(const char* fileName, uint32 flags = 0);
|
||||
status_t Init(int fd, bool keepFD, uint32 flags = 0);
|
||||
status_t ParseContent(
|
||||
BPackageContentHandler* contentHandler);
|
||||
status_t ParseContent(BLowLevelPackageContentHandler*
|
||||
|
||||
@@ -28,8 +28,8 @@ public:
|
||||
PackageReaderImpl(BErrorOutput* errorOutput);
|
||||
~PackageReaderImpl();
|
||||
|
||||
status_t Init(const char* fileName);
|
||||
status_t Init(int fd, bool keepFD);
|
||||
status_t Init(const char* fileName, uint32 flags);
|
||||
status_t Init(int fd, bool keepFD, uint32 flags);
|
||||
status_t ParseContent(
|
||||
BPackageContentHandler* contentHandler);
|
||||
status_t ParseContent(BLowLevelPackageContentHandler*
|
||||
|
||||
@@ -89,7 +89,8 @@ protected:
|
||||
|
||||
protected:
|
||||
template<typename Header, uint32 kMagic, uint16 kVersion>
|
||||
status_t Init(int fd, bool keepFD, Header& header);
|
||||
status_t Init(int fd, bool keepFD, Header& header,
|
||||
uint32 flags);
|
||||
status_t InitHeapReader(uint32 compression,
|
||||
uint32 chunkSize, off_t offset,
|
||||
uint64 compressedSize,
|
||||
@@ -316,7 +317,7 @@ private:
|
||||
|
||||
template<typename Header, uint32 kMagic, uint16 kVersion>
|
||||
status_t
|
||||
ReaderImplBase::Init(int fd, bool keepFD, Header& header)
|
||||
ReaderImplBase::Init(int fd, bool keepFD, Header& header, uint32 flags)
|
||||
{
|
||||
status_t error = _Init(fd, keepFD);
|
||||
if (error != B_OK)
|
||||
@@ -345,9 +346,11 @@ ReaderImplBase::Init(int fd, bool keepFD, Header& header)
|
||||
|
||||
// version
|
||||
if (B_BENDIAN_TO_HOST_INT16(header.version) != kVersion) {
|
||||
ErrorOutput()->PrintError("Error: Invalid/unsupported %s file "
|
||||
"version (%d)\n", fFileType,
|
||||
B_BENDIAN_TO_HOST_INT16(header.version));
|
||||
if ((flags & B_HPKG_READER_DONT_PRINT_VERSION_MISMATCH_MESSAGE) == 0) {
|
||||
ErrorOutput()->PrintError("Error: Invalid/unsupported %s file "
|
||||
"version (%d)\n", fFileType,
|
||||
B_BENDIAN_TO_HOST_INT16(header.version));
|
||||
}
|
||||
return B_MISMATCHED_VALUES;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user