diff --git a/headers/os/package/hpkg/RepositoryWriter.h b/headers/os/package/hpkg/RepositoryWriter.h index 0877c7f99b..deea7d67c3 100644 --- a/headers/os/package/hpkg/RepositoryWriter.h +++ b/headers/os/package/hpkg/RepositoryWriter.h @@ -60,6 +60,7 @@ public: status_t Init(const char* fileName); status_t AddPackage(const BEntry& packageEntry); + status_t AddPackageInfo(const BPackageInfo& packageInfo); status_t Finish(); private: diff --git a/headers/private/package/hpkg/RepositoryWriterImpl.h b/headers/private/package/hpkg/RepositoryWriterImpl.h index 3909202fd0..4c5e5cda83 100644 --- a/headers/private/package/hpkg/RepositoryWriterImpl.h +++ b/headers/private/package/hpkg/RepositoryWriterImpl.h @@ -41,11 +41,14 @@ public: status_t Init(const char* fileName); status_t AddPackage(const BEntry& packageEntry); + status_t AddPackageInfo(const BPackageInfo& packageInfo); status_t Finish(); private: status_t _Init(const char* fileName); status_t _AddPackage(const BEntry& packageEntry); + status_t _AddPackageInfo( + const BPackageInfo& packageInfo); status_t _Finish(); status_t _RegisterCurrentPackageInfo(); diff --git a/src/kits/package/hpkg/RepositoryWriter.cpp b/src/kits/package/hpkg/RepositoryWriter.cpp index 011fc5465c..77853b4773 100644 --- a/src/kits/package/hpkg/RepositoryWriter.cpp +++ b/src/kits/package/hpkg/RepositoryWriter.cpp @@ -51,6 +51,16 @@ BRepositoryWriter::AddPackage(const BEntry& packageEntry) } +status_t +BRepositoryWriter::AddPackageInfo(const BPackageInfo& packageInfo) +{ + if (fImpl == NULL) + return B_NO_INIT; + + return fImpl->AddPackageInfo(packageInfo); +} + + status_t BRepositoryWriter::Finish() { diff --git a/src/kits/package/hpkg/RepositoryWriterImpl.cpp b/src/kits/package/hpkg/RepositoryWriterImpl.cpp index 5602db4e3c..d5be01ce5b 100644 --- a/src/kits/package/hpkg/RepositoryWriterImpl.cpp +++ b/src/kits/package/hpkg/RepositoryWriterImpl.cpp @@ -233,6 +233,20 @@ RepositoryWriterImpl::AddPackage(const BEntry& packageEntry) } +status_t +RepositoryWriterImpl::AddPackageInfo(const BPackageInfo& packageInfo) +{ + try { + return _AddPackageInfo(packageInfo); + } catch (status_t error) { + return error; + } catch (std::bad_alloc) { + fListener->PrintError("Out of memory!\n"); + return B_NO_MEMORY; + } +} + + status_t RepositoryWriterImpl::Finish() { @@ -350,6 +364,20 @@ RepositoryWriterImpl::_AddPackage(const BEntry& packageEntry) } +status_t +RepositoryWriterImpl::_AddPackageInfo(const BPackageInfo& packageInfo) +{ + fPackageInfo = packageInfo; + + // register package's attributes + status_t result = _RegisterCurrentPackageInfo(); + if (result != B_OK) + return result; + + return B_OK; +} + + status_t RepositoryWriterImpl::_RegisterCurrentPackageInfo() {