diff --git a/headers/os/package/PackageInfo.h b/headers/os/package/PackageInfo.h index 8653506ee5..5fdb2c9b36 100644 --- a/headers/os/package/PackageInfo.h +++ b/headers/os/package/PackageInfo.h @@ -70,6 +70,9 @@ public: const BString& BasePackage() const; const BString& Checksum() const; const BString& InstallPath() const; + BString FileName() const; + // the explicitly set file name, if any, or + // CanonicalFileName() otherwise uint32 Flags() const; @@ -116,6 +119,7 @@ public: void SetBasePackage(const BString& basePackage); void SetChecksum(const BString& checksum); void SetInstallPath(const BString& installPath); + void SetFileName(const BString& fileName); void SetFlags(uint32 flags); @@ -299,6 +303,7 @@ private: BString fChecksum; BString fInstallPath; + BString fFileName; }; diff --git a/src/kits/package/PackageInfo.cpp b/src/kits/package/PackageInfo.cpp index 35c1eddf9b..72f690144e 100644 --- a/src/kits/package/PackageInfo.cpp +++ b/src/kits/package/PackageInfo.cpp @@ -244,7 +244,8 @@ BPackageInfo::BPackageInfo(BMessage* archive, status_t* _error) && (error = _ExtractStringList(archive, "replaces", fReplacesList)) == B_OK && (error = archive->FindString("checksum", &fChecksum)) == B_OK - && (error = archive->FindString("install-path", &fInstallPath)) == B_OK) { + && (error = archive->FindString("install-path", &fInstallPath)) == B_OK + && (error = archive->FindString("file-name", &fFileName)) == B_OK) { if (architecture >= 0 && architecture <= B_PACKAGE_ARCHITECTURE_ENUM_COUNT) { fArchitecture = (BPackageArchitecture)architecture; @@ -445,6 +446,13 @@ BPackageInfo::InstallPath() const } +BString +BPackageInfo::FileName() const +{ + return fFileName.IsEmpty() ? CanonicalFileName() : fFileName; +} + + uint32 BPackageInfo::Flags() const { @@ -660,6 +668,13 @@ BPackageInfo::SetInstallPath(const BString& installPath) } +void +BPackageInfo::SetFileName(const BString& fileName) +{ + fFileName = fileName; +} + + void BPackageInfo::SetVersion(const BPackageVersion& version) { @@ -947,6 +962,7 @@ BPackageInfo::Clear() fBasePackage.Truncate(0); fChecksum.Truncate(0); fInstallPath.Truncate(0); + fFileName.Truncate(0); fFlags = 0; fArchitecture = B_PACKAGE_ARCHITECTURE_ENUM_COUNT; fVersion.Clear(); @@ -1009,7 +1025,8 @@ BPackageInfo::Archive(BMessage* archive, bool deep) const fFreshensList)) != B_OK || (error = archive->AddStrings("replaces", fReplacesList)) != B_OK || (error = archive->AddString("checksum", fChecksum)) != B_OK - || (error = archive->AddString("install-path", fInstallPath)) != B_OK) { + || (error = archive->AddString("install-path", fInstallPath)) != B_OK + || (error = archive->AddString("file-name", fFileName)) != B_OK) { return error; } @@ -1057,7 +1074,7 @@ BPackageInfo::GetConfigString(BString& _string) const .WriteFlags("flags", fFlags) .Write("checksum", fChecksum) .GetString(_string); - // Note: fInstallPath can not be specified via .PackageInfo. + // Note: fInstallPath and fFileName can not be specified via .PackageInfo. }