Add install path support to packagefs
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user