From 0aa2c1fca32969f649714d2bf93bfc6ef91926a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Thu, 20 Feb 2014 23:44:39 +0100 Subject: [PATCH] PackageInstaller: Fixed more problems with working directories I've encountered three different ways of specifying the working directory for install scripts: Relative to target folder, relative to install folder and absolute. At least those three now work... --- src/apps/packageinstaller/PackageInfo.cpp | 11 ++++++++++- src/apps/packageinstaller/PackageItem.cpp | 6 +++--- src/apps/packageinstaller/PackageItem.h | 2 +- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/apps/packageinstaller/PackageInfo.cpp b/src/apps/packageinstaller/PackageInfo.cpp index 85668be81c..6f3fd11b54 100644 --- a/src/apps/packageinstaller/PackageInfo.cpp +++ b/src/apps/packageinstaller/PackageInfo.cpp @@ -1027,8 +1027,17 @@ PackageInfo::Parse() parser_debug("Adding the script %s!\n", nameString.String()); + BString workingDirectory; + uint8 localType = P_SYSTEM_PATH; + if (path == 1) + workingDirectory << itemPath; + else if (path == 0xffffffff) { + workingDirectory << installDirectory; + localType = P_INSTALL_PATH; + } + fScripts.AddItem(new PackageScript(fPackageFile, - installDirectory, offset, size, originalSize)); + workingDirectory, localType, offset, size, originalSize)); } else { // If the directory tree count is equal to zero, this means all // directory trees have been closed and a padding sequence means the diff --git a/src/apps/packageinstaller/PackageItem.cpp b/src/apps/packageinstaller/PackageItem.cpp index 9fa3640d24..05abbf66ed 100644 --- a/src/apps/packageinstaller/PackageItem.cpp +++ b/src/apps/packageinstaller/PackageItem.cpp @@ -526,10 +526,10 @@ PackageItem::ParseData(uint8* buffer, BFile* file, uint64 originalSize, // #pragma mark - PackageScript -PackageScript::PackageScript(BFile* parent, const BString& path, uint64 offset, - uint64 size, uint64 originalSize) +PackageScript::PackageScript(BFile* parent, const BString& path, uint8 type, + uint64 offset, uint64 size, uint64 originalSize) : - PackageItem(parent, path, P_INSTALL_PATH, 0, 0, offset, size), + PackageItem(parent, path, type, 0, 0, offset, size), fOriginalSize(originalSize), fThreadId(-1) { diff --git a/src/apps/packageinstaller/PackageItem.h b/src/apps/packageinstaller/PackageItem.h index 9e66b15e23..24b609a23b 100644 --- a/src/apps/packageinstaller/PackageItem.h +++ b/src/apps/packageinstaller/PackageItem.h @@ -129,7 +129,7 @@ public: class PackageScript : public PackageItem { public: PackageScript(BFile* parent, const BString& path, - uint64 offset = 0, uint64 size = 0, + uint8 type, uint64 offset = 0, uint64 size = 0, uint64 originalSize = 0); virtual status_t DoInstall(const char* path = NULL,