[haiku-commits] r40214 - haiku/trunk/src/add-ons/kernel/file_systems/packagefs

  • From: zooey@xxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 12 Jan 2011 15:56:41 +0100 (CET)

Author: zooey
Date: 2011-01-12 15:56:41 +0100 (Wed, 12 Jan 2011)
New Revision: 40214
Changeset: http://dev.haiku-os.org/changeset/40214

Modified:
   haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.cpp
   haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.h
   haiku/trunk/src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp
Log:
* implement fetching of initial domain from the mount parameters in
  order to be able to mount packages from somewhere else than
  '/boot/common/packages' (squashes a TODO)
* squashed another TODO about needing to remove nodes of already 
  installed packages if anything goes wrong during the activation
  of a package domain
* fix what to me looks like a bug in Volume::AddPackageDomainJob::Do(),
  fDomain is accessed unconditionally in the destructor, so NULLing
  it here is bad (it doesn't make sense from a reference-passing POV
  either). The problem never showed as this code is never being executed
  currently (no way to add additional package domains as of yet)


Modified: haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.cpp    
2011-01-12 14:45:57 UTC (rev 40213)
+++ haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.cpp    
2011-01-12 14:56:41 UTC (rev 40214)
@@ -15,6 +15,7 @@
 #include <new>
 
 #include <AppDefs.h>
+#include <driver_settings.h>
 #include <KernelExport.h>
 #include <NodeMonitor.h>
 
@@ -82,7 +83,6 @@
        virtual void Do()
        {
                fVolume->_AddPackageDomain(fDomain, true);
-               fDomain = NULL;
        }
 
 private:
@@ -336,7 +336,7 @@
 
 
 status_t
-Volume::Mount()
+Volume::Mount(const char* parameterString)
 {
        // init the node table
        status_t error = fNodes.Init();
@@ -349,9 +349,19 @@
                RETURN_ERROR(B_NO_MEMORY);
        fNodes.Insert(fRootDirectory);
 
-       // create default package domains
-// TODO: Get them from the mount parameters instead!
-       error = _AddInitialPackageDomain("/boot/common/packages");
+       const char* domain = NULL;
+       void* parameterHandle = parse_driver_settings_string(parameterString);
+       if (parameterHandle != NULL) {
+               domain = get_driver_parameter(parameterHandle, "domain", NULL, 
NULL);
+               delete_driver_settings(parameterHandle);
+       }
+       if (domain == NULL || domain[0] == '\0') {
+               ERROR("need package folder ('domain' parameter)!\n");
+               RETURN_ERROR(B_BAD_VALUE);
+       }
+
+       // create default package domain
+       error = _AddInitialPackageDomain(domain);
        if (error != B_OK)
                RETURN_ERROR(error);
 
@@ -554,7 +564,11 @@
                        Package* package = it.Next();) {
                error = _AddPackageContent(package, notify);
                if (error != B_OK) {
-// TODO: Remove the already added packages!
+                       for (it.Rewind(); Package* activePackage = it.Next();) {
+                               if (activePackage == package)
+                                       break;
+                               _RemovePackageContent(activePackage, NULL, 
notify);
+                       }
                        return error;
                }
        }

Modified: haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.h
===================================================================
--- haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.h      
2011-01-12 14:45:57 UTC (rev 40213)
+++ haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.h      
2011-01-12 14:56:41 UTC (rev 40214)
@@ -36,7 +36,7 @@
                        dev_t                           ID() const              
        { return fFSVolume->id; }
                        Directory*                      RootDirectory() const { 
return fRootDirectory; }
 
-                       status_t                        Mount();
+                       status_t                        Mount(const char* 
parameterString);
                        void                            Unmount();
 
                        Node*                           FindNode(ino_t nodeID) 
const

Modified: 
haiku/trunk/src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp  
2011-01-12 14:45:57 UTC (rev 40213)
+++ haiku/trunk/src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp  
2011-01-12 14:56:41 UTC (rev 40214)
@@ -113,7 +113,7 @@
                RETURN_ERROR(B_NO_MEMORY);
        ObjectDeleter<Volume> volumeDeleter(volume);
 
-       status_t error = volume->Mount();
+       status_t error = volume->Mount(parameters);
        if (error != B_OK)
                return error;
 


Other related posts:

  • » [haiku-commits] r40214 - haiku/trunk/src/add-ons/kernel/file_systems/packagefs - zooey