Add install path support to packagefs

This commit is contained in:
Ingo Weinhold
2011-11-25 06:19:36 +01:00
parent 1fc3ceeda2
commit 17a7f65c0a
4 changed files with 28 additions and 2 deletions
@@ -31,6 +31,7 @@ Package::Package(PackageDomain* domain, dev_t deviceID, ino_t nodeID)
fDomain(domain),
fFileName(NULL),
fName(NULL),
fInstallPath(NULL),
fVersion(NULL),
fArchitecture(B_PACKAGE_ARCHITECTURE_ENUM_COUNT),
fLinkDirectory(NULL),
@@ -56,6 +57,7 @@ Package::~Package()
free(fFileName);
free(fName);
free(fInstallPath);
delete fVersion;
mutex_destroy(&fLock);
@@ -87,6 +89,20 @@ Package::SetName(const char* name)
}
status_t
Package::SetInstallPath(const char* installPath)
{
if (fInstallPath != NULL)
free(fInstallPath);
fInstallPath = strdup(installPath);
if (fInstallPath == NULL)
RETURN_ERROR(B_NO_MEMORY);
return B_OK;
}
void
Package::SetVersion(::Version* version)
{
@@ -44,6 +44,9 @@ public:
status_t SetName(const char* name);
const char* Name() const { return fName; }
status_t SetInstallPath(const char* installPath);
const char* InstallPath() const { return fInstallPath; }
void SetVersion(::Version* version);
// takes over object ownership
::Version* Version() const
@@ -83,6 +86,7 @@ private:
PackageDomain* fDomain;
char* fFileName;
char* fName;
char* fInstallPath;
::Version* fVersion;
BPackageArchitecture fArchitecture;
PackageLinkDirectory* fLinkDirectory;
@@ -92,8 +92,11 @@ PackageLinkSymlink::Update(Package* package, PackageLinksListener* listener)
OldAttributes oldAttributes(fModifiedTime, FileSize());
if (package != NULL) {
fLinkPath = link_path_for_mount_type(
package->Domain()->Volume()->MountType());
fLinkPath = package->InstallPath();
if (fLinkPath == NULL) {
fLinkPath = link_path_for_mount_type(
package->Domain()->Volume()->MountType());
}
} else
fLinkPath = kUnknownLinkTarget;
@@ -291,6 +291,9 @@ struct Volume::PackageLoaderContentHandler : BPackageContentHandler {
case B_PACKAGE_INFO_NAME:
return fPackage->SetName(value.string);
case B_PACKAGE_INFO_INSTALL_PATH:
return fPackage->SetInstallPath(value.string);
case B_PACKAGE_INFO_VERSION:
{
Version* version;