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:
Ingo Weinhold
2013-05-25 01:12:31 +02:00
parent 64bb883062
commit d59e0feb59
12 changed files with 64 additions and 24 deletions
+8
View File
@@ -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,
+2 -2
View File
@@ -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;
}