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),
|
fDomain(domain),
|
||||||
fFileName(NULL),
|
fFileName(NULL),
|
||||||
fName(NULL),
|
fName(NULL),
|
||||||
|
fInstallPath(NULL),
|
||||||
fVersion(NULL),
|
fVersion(NULL),
|
||||||
fArchitecture(B_PACKAGE_ARCHITECTURE_ENUM_COUNT),
|
fArchitecture(B_PACKAGE_ARCHITECTURE_ENUM_COUNT),
|
||||||
fLinkDirectory(NULL),
|
fLinkDirectory(NULL),
|
||||||
@@ -56,6 +57,7 @@ Package::~Package()
|
|||||||
|
|
||||||
free(fFileName);
|
free(fFileName);
|
||||||
free(fName);
|
free(fName);
|
||||||
|
free(fInstallPath);
|
||||||
delete fVersion;
|
delete fVersion;
|
||||||
|
|
||||||
mutex_destroy(&fLock);
|
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
|
void
|
||||||
Package::SetVersion(::Version* version)
|
Package::SetVersion(::Version* version)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -44,6 +44,9 @@ public:
|
|||||||
status_t SetName(const char* name);
|
status_t SetName(const char* name);
|
||||||
const char* Name() const { return fName; }
|
const char* Name() const { return fName; }
|
||||||
|
|
||||||
|
status_t SetInstallPath(const char* installPath);
|
||||||
|
const char* InstallPath() const { return fInstallPath; }
|
||||||
|
|
||||||
void SetVersion(::Version* version);
|
void SetVersion(::Version* version);
|
||||||
// takes over object ownership
|
// takes over object ownership
|
||||||
::Version* Version() const
|
::Version* Version() const
|
||||||
@@ -83,6 +86,7 @@ private:
|
|||||||
PackageDomain* fDomain;
|
PackageDomain* fDomain;
|
||||||
char* fFileName;
|
char* fFileName;
|
||||||
char* fName;
|
char* fName;
|
||||||
|
char* fInstallPath;
|
||||||
::Version* fVersion;
|
::Version* fVersion;
|
||||||
BPackageArchitecture fArchitecture;
|
BPackageArchitecture fArchitecture;
|
||||||
PackageLinkDirectory* fLinkDirectory;
|
PackageLinkDirectory* fLinkDirectory;
|
||||||
|
|||||||
@@ -92,8 +92,11 @@ PackageLinkSymlink::Update(Package* package, PackageLinksListener* listener)
|
|||||||
OldAttributes oldAttributes(fModifiedTime, FileSize());
|
OldAttributes oldAttributes(fModifiedTime, FileSize());
|
||||||
|
|
||||||
if (package != NULL) {
|
if (package != NULL) {
|
||||||
fLinkPath = link_path_for_mount_type(
|
fLinkPath = package->InstallPath();
|
||||||
package->Domain()->Volume()->MountType());
|
if (fLinkPath == NULL) {
|
||||||
|
fLinkPath = link_path_for_mount_type(
|
||||||
|
package->Domain()->Volume()->MountType());
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
fLinkPath = kUnknownLinkTarget;
|
fLinkPath = kUnknownLinkTarget;
|
||||||
|
|
||||||
|
|||||||
@@ -291,6 +291,9 @@ struct Volume::PackageLoaderContentHandler : BPackageContentHandler {
|
|||||||
case B_PACKAGE_INFO_NAME:
|
case B_PACKAGE_INFO_NAME:
|
||||||
return fPackage->SetName(value.string);
|
return fPackage->SetName(value.string);
|
||||||
|
|
||||||
|
case B_PACKAGE_INFO_INSTALL_PATH:
|
||||||
|
return fPackage->SetInstallPath(value.string);
|
||||||
|
|
||||||
case B_PACKAGE_INFO_VERSION:
|
case B_PACKAGE_INFO_VERSION:
|
||||||
{
|
{
|
||||||
Version* version;
|
Version* version;
|
||||||
|
|||||||
Reference in New Issue
Block a user