From 2a596c013a8ac49bea49a64faedcfbb7c45c743a Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 20 Jul 2003 17:15:35 +0000 Subject: [PATCH] Implemented all read-only (more precisely: not writing) methods. Small changes. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4029 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/disk_device_manager/KDiskSystem.h | 14 +-- .../kernel/disk_device_manager/KFileSystem.h | 3 +- .../disk_device_manager/KPartitioningSystem.h | 14 +-- .../core/disk_device_manager/KDiskSystem.cpp | 12 +- .../core/disk_device_manager/KFileSystem.cpp | 114 +++++++++++------- .../core/disk_device_manager/KPartition.cpp | 4 + 6 files changed, 98 insertions(+), 63 deletions(-) diff --git a/headers/private/kernel/disk_device_manager/KDiskSystem.h b/headers/private/kernel/disk_device_manager/KDiskSystem.h index b7925befe5..55e38b7b23 100644 --- a/headers/private/kernel/disk_device_manager/KDiskSystem.h +++ b/headers/private/kernel/disk_device_manager/KDiskSystem.h @@ -71,15 +71,15 @@ public: virtual bool IsSubSystemFor(KPartition *partition); virtual bool ValidateResize(KPartition *partition, off_t *size); - virtual bool ValidateResizeChild(KPartition *partition, off_t *size); + virtual bool ValidateResizeChild(KPartition *child, off_t *size); virtual bool ValidateMove(KPartition *partition, off_t *start); - virtual bool ValidateMoveChild(KPartition *partition, off_t *start); + virtual bool ValidateMoveChild(KPartition *child, off_t *start); virtual bool ValidateSetName(KPartition *partition, char *name); virtual bool ValidateSetContentName(KPartition *partition, char *name); virtual bool ValidateSetType(KPartition *partition, const char *type); virtual bool ValidateSetParameters(KPartition *partition, const char *parameters); - virtual bool ValidateSetContentParameters(KPartition *child, + virtual bool ValidateSetContentParameters(KPartition *parameters, const char *parameters); virtual bool ValidateInitialize(KPartition *partition, char *name, const char *parameters); @@ -87,10 +87,10 @@ public: off_t *size, const char *type, const char *parameters); virtual int32 CountPartitionableSpaces(KPartition *partition); - virtual bool GetPartitionableSpaces(KPartition *partition, - partitionable_space_data *spaces, - int32 count, - int32 *actualCount = NULL); + virtual status_t GetPartitionableSpaces(KPartition *partition, + partitionable_space_data *buffer, + int32 count, + int32 *actualCount = NULL); virtual status_t GetNextSupportedType(KPartition *partition, int32 *cookie, char *type); diff --git a/headers/private/kernel/disk_device_manager/KFileSystem.h b/headers/private/kernel/disk_device_manager/KFileSystem.h index ffa4aa4cfa..3f78620b8b 100644 --- a/headers/private/kernel/disk_device_manager/KFileSystem.h +++ b/headers/private/kernel/disk_device_manager/KFileSystem.h @@ -40,12 +40,11 @@ public: virtual bool SupportsSettingContentParameters(KPartition *partition, bool *whileMounted); virtual bool SupportsInitializing(KPartition *partition); - virtual bool IsSubSystemFor(KPartition *partition); virtual bool ValidateResize(KPartition *partition, off_t *size); virtual bool ValidateMove(KPartition *partition, off_t *start); virtual bool ValidateSetContentName(KPartition *partition, char *name); - virtual bool ValidateSetContentParameters(KPartition *child, + virtual bool ValidateSetContentParameters(KPartition *partition, const char *parameters); virtual bool ValidateInitialize(KPartition *partition, char *name, const char *parameters); diff --git a/headers/private/kernel/disk_device_manager/KPartitioningSystem.h b/headers/private/kernel/disk_device_manager/KPartitioningSystem.h index f3434858d1..f47f4ce3dc 100644 --- a/headers/private/kernel/disk_device_manager/KPartitioningSystem.h +++ b/headers/private/kernel/disk_device_manager/KPartitioningSystem.h @@ -48,15 +48,15 @@ public: virtual bool IsSubSystemFor(KPartition *partition); virtual bool ValidateResize(KPartition *partition, off_t *size); - virtual bool ValidateResizeChild(KPartition *partition, off_t *size); + virtual bool ValidateResizeChild(KPartition *child, off_t *size); virtual bool ValidateMove(KPartition *partition, off_t *start); - virtual bool ValidateMoveChild(KPartition *partition, off_t *start); + virtual bool ValidateMoveChild(KPartition *child, off_t *start); virtual bool ValidateSetName(KPartition *partition, char *name); virtual bool ValidateSetContentName(KPartition *partition, char *name); virtual bool ValidateSetType(KPartition *partition, const char *type); virtual bool ValidateSetParameters(KPartition *partition, const char *parameters); - virtual bool ValidateSetContentParameters(KPartition *child, + virtual bool ValidateSetContentParameters(KPartition *parameters, const char *parameters); virtual bool ValidateInitialize(KPartition *partition, char *name, const char *parameters); @@ -64,10 +64,10 @@ public: off_t *size, const char *type, const char *parameters); virtual int32 CountPartitionableSpaces(KPartition *partition); - virtual bool GetPartitionableSpaces(KPartition *partition, - partitionable_space_data *spaces, - int32 count, - int32 *actualCount = NULL); + virtual status_t GetPartitionableSpaces(KPartition *partition, + partitionable_space_data *buffer, + int32 count, + int32 *actualCount = NULL); virtual status_t GetNextSupportedType(KPartition *partition, int32 *cookie, char *type); diff --git a/src/kernel/core/disk_device_manager/KDiskSystem.cpp b/src/kernel/core/disk_device_manager/KDiskSystem.cpp index c51034505e..8db164e6d7 100644 --- a/src/kernel/core/disk_device_manager/KDiskSystem.cpp +++ b/src/kernel/core/disk_device_manager/KDiskSystem.cpp @@ -312,7 +312,7 @@ KDiskSystem::ValidateResize(KPartition *partition, off_t *size) // ValidateResizeChild bool -KDiskSystem::ValidateResizeChild(KPartition *partition, off_t *size) +KDiskSystem::ValidateResizeChild(KPartition *child, off_t *size) { // to be implemented by derived classes return false; @@ -328,7 +328,7 @@ KDiskSystem::ValidateMove(KPartition *partition, off_t *start) // ValidateMoveChild bool -KDiskSystem::ValidateMoveChild(KPartition *partition, off_t *start) +KDiskSystem::ValidateMoveChild(KPartition *child, off_t *start) { // to be implemented by derived classes return false; @@ -369,7 +369,7 @@ KDiskSystem::ValidateSetParameters(KPartition *partition, // ValidateSetContentParameters bool -KDiskSystem::ValidateSetContentParameters(KPartition *child, +KDiskSystem::ValidateSetContentParameters(KPartition *partition, const char *parameters) { // to be implemented by derived classes @@ -404,13 +404,13 @@ KDiskSystem::CountPartitionableSpaces(KPartition *partition) } // GetPartitionableSpaces -bool +status_t KDiskSystem::GetPartitionableSpaces(KPartition *partition, - partitionable_space_data *spaces, + partitionable_space_data *buffer, int32 count, int32 *actualCount) { // to be implemented by derived classes - return false; + return B_ERROR; } // GetNextSupportedType diff --git a/src/kernel/core/disk_device_manager/KFileSystem.cpp b/src/kernel/core/disk_device_manager/KFileSystem.cpp index 064a5ba925..25ab3f562f 100644 --- a/src/kernel/core/disk_device_manager/KFileSystem.cpp +++ b/src/kernel/core/disk_device_manager/KFileSystem.cpp @@ -90,10 +90,15 @@ KFileSystem::FreeContentCookie(KPartition *partition) bool KFileSystem::SupportsDefragmenting(KPartition *partition, bool *whileMounted) { - // to be implemented - if (whileMounted) - *whileMounted = false; - return false; + bool _whileMounted = false; + if (!whileMounted) + whileMounted = &_whileMounted; + if (!partition || partition->DiskSystem() != this || !fModule + || !fModule->supports_defragmenting) { + return (*whileMounted = false); + } + return fModule->supports_defragmenting(partition->PartitionData(), + whileMounted); } // SupportsRepairing @@ -101,30 +106,44 @@ bool KFileSystem::SupportsRepairing(KPartition *partition, bool checkOnly, bool *whileMounted) { - // to be implemented - if (whileMounted) - *whileMounted = false; - return false; + bool _whileMounted = false; + if (!whileMounted) + whileMounted = &_whileMounted; + if (!partition || partition->DiskSystem() != this || !fModule + || !fModule->supports_repairing) { + return (*whileMounted = false); + } + return fModule->supports_repairing(partition->PartitionData(), checkOnly, + whileMounted); } // SupportsResizing bool KFileSystem::SupportsResizing(KPartition *partition, bool *whileMounted) { - // to be implemented - if (whileMounted) - *whileMounted = false; - return false; + bool _whileMounted = false; + if (!whileMounted) + whileMounted = &_whileMounted; + if (!partition || partition->DiskSystem() != this || !fModule + || !fModule->supports_resizing) { + return (*whileMounted = false); + } + return fModule->supports_resizing(partition->PartitionData(), + whileMounted); } // SupportsMoving bool KFileSystem::SupportsMoving(KPartition *partition, bool *isNoOp) { - // to be implemented - if (isNoOp) - *isNoOp = false; - return false; + bool _isNoOp = false; + if (!isNoOp) + isNoOp = &_isNoOp; + if (!partition || partition->DiskSystem() != this || !fModule + || !fModule->supports_moving) { + return (*isNoOp = false); + } + return fModule->supports_moving(partition->PartitionData(), isNoOp); } // SupportsSettingContentName @@ -132,8 +151,15 @@ bool KFileSystem::SupportsSettingContentName(KPartition *partition, bool *whileMounted) { - // to be implemented - return false; + bool _whileMounted = false; + if (!whileMounted) + whileMounted = &_whileMounted; + if (!partition || partition->DiskSystem() != this || !fModule + || !fModule->supports_setting_content_name) { + return (*whileMounted = false); + } + return fModule->supports_setting_content_name(partition->PartitionData(), + whileMounted); } // SupportsSettingContentParameters @@ -141,57 +167,62 @@ bool KFileSystem::SupportsSettingContentParameters(KPartition *partition, bool *whileMounted) { - // to be implemented - return false; + bool _whileMounted = false; + if (!whileMounted) + whileMounted = &_whileMounted; + if (!partition || partition->DiskSystem() != this || !fModule + || !fModule->supports_setting_content_parameters) { + return (*whileMounted = false); + } + return fModule->supports_setting_content_parameters( + partition->PartitionData(), whileMounted); } // SupportsInitializing bool KFileSystem::SupportsInitializing(KPartition *partition) { - // to be implemented - return false; -} - -// IsSubSystemFor -bool -KFileSystem::IsSubSystemFor(KPartition *partition) -{ - // to be implemented - return false; + return (partition && fModule && fModule->supports_initializing + && fModule->supports_initializing(partition->PartitionData())); } // ValidateResize bool KFileSystem::ValidateResize(KPartition *partition, off_t *size) { - // to be implemented - return false; + return (partition && size && partition->DiskSystem() == this && fModule + && fModule->validate_resize + && fModule->validate_resize(partition->PartitionData(), size)); } // ValidateMove bool KFileSystem::ValidateMove(KPartition *partition, off_t *start) { - // to be implemented - return false; + return (partition && start && partition->DiskSystem() == this && fModule + && fModule->validate_move + && fModule->validate_move(partition->PartitionData(), start)); } // ValidateSetContentName bool KFileSystem::ValidateSetContentName(KPartition *partition, char *name) { - // to be implemented - return false; + return (partition && name && partition->DiskSystem() == this + && fModule && fModule->validate_set_content_name + && fModule->validate_set_content_name(partition->PartitionData(), + name)); } // ValidateSetContentParameters bool -KFileSystem::ValidateSetContentParameters(KPartition *child, +KFileSystem::ValidateSetContentParameters(KPartition *partition, const char *parameters) { - // to be implemented - return false; + return (partition && partition->DiskSystem() == this && fModule + && fModule->validate_set_content_parameters + && fModule->validate_set_content_parameters( + partition->PartitionData(), parameters)); } // ValidateInitialize @@ -199,8 +230,9 @@ bool KFileSystem::ValidateInitialize(KPartition *partition, char *name, const char *parameters) { - // to be implemented - return false; + return (partition && name && fModule && fModule->validate_initialize + && fModule->validate_initialize(partition->PartitionData(), name, + parameters)); } // Defragment diff --git a/src/kernel/core/disk_device_manager/KPartition.cpp b/src/kernel/core/disk_device_manager/KPartition.cpp index e6f69fa28e..d4599f9c18 100644 --- a/src/kernel/core/disk_device_manager/KPartition.cpp +++ b/src/kernel/core/disk_device_manager/KPartition.cpp @@ -113,6 +113,10 @@ KPartition::PrepareForRemoval() { bool result = RemoveAllChildren(); UnpublishDevice(); + if (ParentDiskSystem()) + ParentDiskSystem()->FreeCookie(this); + if (DiskSystem()) + DiskSystem()->FreeContentCookie(this); return result; }