diff --git a/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h b/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h index 0d04ef2874..d765bf798f 100644 --- a/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h +++ b/headers/private/kernel/disk_device_manager/KDiskDeviceManager.h @@ -76,8 +76,8 @@ public: // Disk Systems // manager must be locked - KDiskSystem *DiskSystemWithName(const char *name); - KDiskSystem *DiskSystemWithID(disk_system_id id); + KDiskSystem *FindDiskSystem(const char *name); + KDiskSystem *FindDiskSystem(disk_system_id id); int32 CountDiskSystems(); KDiskSystem *NextDiskSystem(int32 *cookie); diff --git a/headers/private/kernel/disk_device_manager/KDiskSystem.h b/headers/private/kernel/disk_device_manager/KDiskSystem.h index fd5f895657..476d3f2047 100644 --- a/headers/private/kernel/disk_device_manager/KDiskSystem.h +++ b/headers/private/kernel/disk_device_manager/KDiskSystem.h @@ -5,6 +5,8 @@ #include "disk_device_manager.h" +struct user_disk_system_info; + namespace BPrivate { namespace DiskDevice { @@ -26,6 +28,8 @@ public: virtual bool IsFileSystem() const; bool IsPartitioningSystem() const; + void GetInfo(user_disk_system_info *info); + // manager will be locked status_t Load(); // load/unload -- can be nested void Unload(); // diff --git a/src/kernel/core/disk_device_manager/Jamfile b/src/kernel/core/disk_device_manager/Jamfile index f2b58e50b7..df370663cb 100644 --- a/src/kernel/core/disk_device_manager/Jamfile +++ b/src/kernel/core/disk_device_manager/Jamfile @@ -11,7 +11,7 @@ UsePrivateHeaders storage ; UseHeaders [ FDirName $(OBOS_TOP) src tests kits storage virtualdrive ] ; SharedLibrary disk_device_manager : - ddm_user_interface.cpp + ddm_userland_interface.cpp disk_device_manager.cpp KDiskDevice.cpp KDiskDeviceJob.cpp diff --git a/src/kernel/core/disk_device_manager/KDiskSystem.cpp b/src/kernel/core/disk_device_manager/KDiskSystem.cpp index b83dde81ae..f4952d4a0d 100644 --- a/src/kernel/core/disk_device_manager/KDiskSystem.cpp +++ b/src/kernel/core/disk_device_manager/KDiskSystem.cpp @@ -3,6 +3,7 @@ #include #include +#include "ddm_userland_interface.h" #include "KDiskDeviceManager.h" #include "KDiskDeviceUtils.h" #include "KDiskSystem.h" @@ -78,6 +79,18 @@ KDiskSystem::IsPartitioningSystem() const return !IsFileSystem(); } +// GetInfo +void +KDiskSystem::GetInfo(user_disk_system_info *info) +{ + if (!info) + return; + info->id = ID(); + strcpy(info->name, Name()); + strcpy(info->pretty_name, PrettyName()); + info->file_system = IsFileSystem(); +} + // Load status_t KDiskSystem::Load() diff --git a/src/kernel/core/disk_device_manager/ddm_user_interface.cpp b/src/kernel/core/disk_device_manager/ddm_userland_interface.cpp similarity index 51% rename from src/kernel/core/disk_device_manager/ddm_user_interface.cpp rename to src/kernel/core/disk_device_manager/ddm_userland_interface.cpp index 4dc3cb693f..a27b3618bc 100644 --- a/src/kernel/core/disk_device_manager/ddm_user_interface.cpp +++ b/src/kernel/core/disk_device_manager/ddm_userland_interface.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "ddm_userland_interface.h" #include "UserDataWriter.h" @@ -53,3 +54,54 @@ _kern_get_disk_device_data(partition_id deviceID, bool shadow, return B_ERROR; } +// _kern_get_disk_system_info +status_t +_kern_get_disk_system_info(disk_system_id id, user_disk_system_info *info) +{ + if (!info) + return B_BAD_VALUE; + KDiskDeviceManager *manager = KDiskDeviceManager::Default(); + if (ManagerLocker locker = manager) { + if (KDiskSystem *diskSystem = manager->FindDiskSystem(id)) { + DiskSystemLoader _(diskSystem, true); + diskSystem->GetInfo(info); + return B_OK; + } + } + return B_ENTRY_NOT_FOUND; +} + +// _kern_get_next_disk_system_info +status_t +_kern_get_next_disk_system_info(int32 *cookie, user_disk_system_info *info) +{ + if (!cookie || !info) + return B_BAD_VALUE; + KDiskDeviceManager *manager = KDiskDeviceManager::Default(); + if (ManagerLocker locker = manager) { + if (KDiskSystem *diskSystem = manager->NextDiskSystem(cookie)) { + DiskSystemLoader _(diskSystem, true); + diskSystem->GetInfo(info); + return B_OK; + } + } + return B_ENTRY_NOT_FOUND; +} + +// _kern_find_disk_system +status_t +_kern_find_disk_system(const char *name, user_disk_system_info *info) +{ + if (!name || !info) + return B_BAD_VALUE; + KDiskDeviceManager *manager = KDiskDeviceManager::Default(); + if (ManagerLocker locker = manager) { + if (KDiskSystem *diskSystem = manager->FindDiskSystem(name)) { + DiskSystemLoader _(diskSystem, true); + diskSystem->GetInfo(info); + return B_OK; + } + } + return B_ENTRY_NOT_FOUND; +} +