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

  • From: zooey@xxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 12 Jan 2011 21:11:14 +0100 (CET)

Author: zooey
Date: 2011-01-12 21:11:13 +0100 (Wed, 12 Jan 2011)
New Revision: 40225
Changeset: http://dev.haiku-os.org/changeset/40225

Modified:
   haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.cpp
   haiku/trunk/src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp
Log:
* added support to packagefs for picking up its volume name from the
  mount parameters - there doesn't seem to be a way for a filesystem
  to access the path to which it was mounted, is there?


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 18:42:48 UTC (rev 40224)
+++ haiku/trunk/src/add-ons/kernel/file_systems/packagefs/Volume.cpp    
2011-01-12 20:11:13 UTC (rev 40225)
@@ -343,25 +343,30 @@
        if (error != B_OK)
                RETURN_ERROR(error);
 
-       // create the root node
-       fRootDirectory = new(std::nothrow) Directory(kRootDirectoryID);
-       if (fRootDirectory == NULL)
-               RETURN_ERROR(B_NO_MEMORY);
-       fNodes.Insert(fRootDirectory);
-
-       const char* domain = NULL;
+       const char* packages = NULL;
+       const char* volumeName = "Package FS";
        void* parameterHandle = parse_driver_settings_string(parameterString);
        if (parameterHandle != NULL) {
-               domain = get_driver_parameter(parameterHandle, "packages", 
NULL, NULL);
+               packages
+                       = get_driver_parameter(parameterHandle, "packages", 
NULL, NULL);
+               volumeName
+                       = get_driver_parameter(parameterHandle, "volume-name", 
NULL, NULL);
                delete_driver_settings(parameterHandle);
        }
-       if (domain == NULL || domain[0] == '\0') {
+       if (packages == NULL || packages[0] == '\0') {
                ERROR("need package folder ('packages' parameter)!\n");
                RETURN_ERROR(B_BAD_VALUE);
        }
 
+       // create the root node
+       fRootDirectory = new(std::nothrow) Directory(kRootDirectoryID);
+       if (fRootDirectory == NULL)
+               RETURN_ERROR(B_NO_MEMORY);
+       fRootDirectory->Init(NULL, volumeName);
+       fNodes.Insert(fRootDirectory);
+
        // create default package domain
-       error = _AddInitialPackageDomain(domain);
+       error = _AddInitialPackageDomain(packages);
        if (error != B_OK)
                RETURN_ERROR(error);
 

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 18:42:48 UTC (rev 40224)
+++ haiku/trunk/src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp  
2011-01-12 20:11:13 UTC (rev 40225)
@@ -143,13 +143,16 @@
 static status_t
 packagefs_read_fs_info(fs_volume* fsVolume, struct fs_info* info)
 {
-       FUNCTION("volume: %p, info: %p\n", fsVolume->private_volume, info);
+       Volume* volume = (Volume*)fsVolume->private_volume;
 
+       FUNCTION("volume: %p, info: %p\n", volume, info);
+
        info->flags = B_FS_IS_READONLY;
        info->block_size = 4096;
        info->io_size = kOptimalIOSize;
        info->total_blocks = info->free_blocks = 1;
-       strlcpy(info->volume_name, "Package FS", sizeof(info->volume_name));
+       strlcpy(info->volume_name, volume->RootDirectory()->Name(),
+               sizeof(info->volume_name));
        return B_OK;
 }
 


Other related posts: