mirror of
https://review.haiku-os.org/haiku
synced 2025-02-09 23:27:57 +01:00
Until now we always declared in the HPKG header that the package file is zlib compressed. For uncompressed files we would just store all individual chunks uncompressed. Now we handle completely uncompressed files slightly differently: We don't write the redundant chunk size table anymore. The size savings are minor, but it makes the uncompressed format read-streamable which may be handy.
96 lines
2.1 KiB
C++
96 lines
2.1 KiB
C++
/*
|
|
* Copyright 2009,2011, Haiku, Inc.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _PACKAGE__HPKG__PACKAGE_WRITER_H_
|
|
#define _PACKAGE__HPKG__PACKAGE_WRITER_H_
|
|
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
#include <package/hpkg/ErrorOutput.h>
|
|
|
|
|
|
namespace BPackageKit {
|
|
|
|
namespace BHPKG {
|
|
|
|
|
|
class BPackageReader;
|
|
|
|
|
|
namespace BPrivate {
|
|
class PackageWriterImpl;
|
|
}
|
|
using BPrivate::PackageWriterImpl;
|
|
|
|
|
|
class BPackageWriterListener : public BErrorOutput {
|
|
public:
|
|
virtual void PrintErrorVarArgs(const char* format,
|
|
va_list args) = 0;
|
|
|
|
virtual void OnEntryAdded(const char* path) = 0;
|
|
|
|
virtual void OnTOCSizeInfo(uint64 uncompressedStringsSize,
|
|
uint64 uncompressedMainSize,
|
|
uint64 uncompressedTOCSize) = 0;
|
|
virtual void OnPackageAttributesSizeInfo(uint32 stringCount,
|
|
uint32 uncompressedSize) = 0;
|
|
virtual void OnPackageSizeInfo(uint32 headerSize,
|
|
uint64 heapSize, uint64 tocSize,
|
|
uint32 packageAttributesSize,
|
|
uint64 totalSize) = 0;
|
|
};
|
|
|
|
|
|
class BPackageWriterParameters {
|
|
public:
|
|
BPackageWriterParameters();
|
|
~BPackageWriterParameters();
|
|
|
|
uint32 Flags() const;
|
|
void SetFlags(uint32 flags);
|
|
|
|
uint32 Compression() const;
|
|
void SetCompression(uint32 compression);
|
|
|
|
int32 CompressionLevel() const;
|
|
void SetCompressionLevel(int32 compressionLevel);
|
|
|
|
private:
|
|
uint32 fFlags;
|
|
uint32 fCompression;
|
|
int32 fCompressionLevel;
|
|
};
|
|
|
|
|
|
class BPackageWriter {
|
|
public:
|
|
BPackageWriter(
|
|
BPackageWriterListener* listener);
|
|
~BPackageWriter();
|
|
|
|
status_t Init(const char* fileName,
|
|
const BPackageWriterParameters* parameters
|
|
= NULL);
|
|
status_t SetInstallPath(const char* installPath);
|
|
void SetCheckLicenses(bool checkLicenses);
|
|
status_t AddEntry(const char* fileName, int fd = -1);
|
|
status_t Finish();
|
|
|
|
status_t Recompress(BPackageReader* reader);
|
|
// to be called after Init(); no Finish()
|
|
|
|
private:
|
|
PackageWriterImpl* fImpl;
|
|
};
|
|
|
|
|
|
} // namespace BHPKG
|
|
|
|
} // namespace BPackageKit
|
|
|
|
|
|
#endif // _PACKAGE__HPKG__PACKAGE_WRITER_H_
|