From aea2cb917eb329bf2b56b64097e113d4417ba3b1 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 30 Nov 2013 00:27:30 +0100 Subject: [PATCH] device_manager: Implement unpublish_device() --- .../kernel/device_manager/device_manager.cpp | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/system/kernel/device_manager/device_manager.cpp b/src/system/kernel/device_manager/device_manager.cpp index 5de0b31d71..5537aa0d8d 100644 --- a/src/system/kernel/device_manager/device_manager.cpp +++ b/src/system/kernel/device_manager/device_manager.cpp @@ -757,21 +757,17 @@ unpublish_device(device_node *node, const char *path) if (path == NULL) return B_BAD_VALUE; - RecursiveLocker _(sLock); + BaseDevice* baseDevice; + status_t error = devfs_get_device(path, baseDevice); + if (error != B_OK) + return error; + CObjectDeleter baseDevicePutter(baseDevice, &devfs_put_device); -#if 0 - DeviceList::ConstIterator iterator = node->Devices().GetIterator(); - while (iterator.HasNext()) { - Device* device = iterator.Next(); - if (!strcmp(device->Path(), path)) { - node->RemoveDevice(device); - delete device; - return B_OK; - } - } -#endif + Device* device = dynamic_cast(baseDevice); + if (device == NULL || device->Node() != node) + return B_BAD_VALUE; - return B_ENTRY_NOT_FOUND; + return devfs_unpublish_device(device, true); }