AutoDeleter: add VMAddressSpacePutter, DeviceNodePutter
Change-Id: I705de24f6a87287943814e748d5a02e43b029e60 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3987 Reviewed-by: Alex von Gluck IV <[email protected]>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2020, Haiku, Inc.
|
* Copyright 2020, Haiku, Inc. All rights reserved.
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
#ifndef _AUTO_DELETER_DRIVERS_H
|
#ifndef _AUTO_DELETER_DRIVERS_H
|
||||||
@@ -8,21 +8,48 @@
|
|||||||
|
|
||||||
#include <AutoDeleter.h>
|
#include <AutoDeleter.h>
|
||||||
#include <driver_settings.h>
|
#include <driver_settings.h>
|
||||||
|
|
||||||
#if defined(_KERNEL_MODE) && !defined(_BOOT_MODE)
|
#if defined(_KERNEL_MODE) && !defined(_BOOT_MODE)
|
||||||
#include <vfs.h>
|
#include <vfs.h>
|
||||||
#include <fs/fd.h>
|
#include <fs/fd.h>
|
||||||
|
#include <vm/VMAddressSpace.h>
|
||||||
|
#include <device_manager.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
namespace BPrivate {
|
namespace BPrivate {
|
||||||
|
|
||||||
|
|
||||||
typedef CObjectDeleter<void, status_t, unload_driver_settings> DriverSettingsUnloader;
|
typedef CObjectDeleter<void, status_t, unload_driver_settings>
|
||||||
|
DriverSettingsUnloader;
|
||||||
|
|
||||||
#if defined(_KERNEL_MODE) && !defined(_BOOT_MODE)
|
#if defined(_KERNEL_MODE) && !defined(_BOOT_MODE)
|
||||||
|
|
||||||
typedef CObjectDeleter<struct vnode, void, vfs_put_vnode> VnodePutter;
|
typedef CObjectDeleter<struct vnode, void, vfs_put_vnode> VnodePutter;
|
||||||
typedef CObjectDeleter<file_descriptor, void, put_fd> DescriptorPutter;
|
typedef CObjectDeleter<file_descriptor, void, put_fd> DescriptorPutter;
|
||||||
|
typedef MethodDeleter<VMAddressSpace, void, &VMAddressSpace::Put>
|
||||||
|
VMAddressSpacePutter;
|
||||||
|
|
||||||
|
#if __GNUC__ >= 4
|
||||||
|
|
||||||
|
template <device_manager_info **deviceManager>
|
||||||
|
using DeviceNodePutter = MethodObjectDeleter<device_node, device_manager_info,
|
||||||
|
deviceManager, void, &device_manager_info::put_node>;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
template <device_manager_info **deviceManager>
|
||||||
|
struct DeviceNodePutter : MethodObjectDeleter<device_node, device_manager_info,
|
||||||
|
deviceManager, void, &device_manager_info::put_node>
|
||||||
|
{
|
||||||
|
typedef MethodObjectDeleter<device_node, device_manager_info,
|
||||||
|
deviceManager, void, &device_manager_info::put_node> Base;
|
||||||
|
|
||||||
|
DeviceNodePutter() : Base() {}
|
||||||
|
DeviceNodePutter(device_node* object) : Base(object) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -36,6 +63,8 @@ using ::BPrivate::DriverSettingsUnloader;
|
|||||||
|
|
||||||
using ::BPrivate::VnodePutter;
|
using ::BPrivate::VnodePutter;
|
||||||
using ::BPrivate::DescriptorPutter;
|
using ::BPrivate::DescriptorPutter;
|
||||||
|
using ::BPrivate::VMAddressSpacePutter;
|
||||||
|
using ::BPrivate::DeviceNodePutter;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user