status_t BPackageDataReaderFactory::CreatePackageDataReader(BDataReader* dataReader, const BPackageData& data, BAbstractBufferedDataReader*& _reader) { if (data.IsEncodedInline()) { BAbstractBufferedDataReader* reader = new(std::nothrow) PackageDataInlineReader(data); if (reader == NULL) return B_NO_MEMORY; _reader = reader; return B_OK; } PackageDataReader* reader; switch (data.Compression()) { case B_HPKG_COMPRESSION_NONE: reader = new(std::nothrow) UncompressedPackageDataReader( dataReader, fBufferPool); break; case B_HPKG_COMPRESSION_ZLIB: reader = new(std::nothrow) ZlibPackageDataReader(dataReader, fBufferPool); break; default: return B_BAD_VALUE; } if (reader == NULL) return B_NO_MEMORY; status_t error = reader->Init(data); if (error != B_OK) { delete reader; return error; } _reader = reader; return B_OK; }