From 9448bb6e0bee502cc59bc3e73b460509fa67c0a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 20 Feb 2008 16:48:16 +0000 Subject: [PATCH] Added add_node_listener() and remove_node_listener() kernel private functions to watch a node. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24035 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/kernel/fs/node_monitor.h | 12 ++++++++++- src/system/kernel/fs/node_monitor.cpp | 27 +++++++++++++++++++----- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/headers/private/kernel/fs/node_monitor.h b/headers/private/kernel/fs/node_monitor.h index ef5a4fae7c..eac260d857 100644 --- a/headers/private/kernel/fs/node_monitor.h +++ b/headers/private/kernel/fs/node_monitor.h @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Copyright 2003-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _KERNEL_NODE_MONITOR_H @@ -12,6 +12,16 @@ struct io_context; #ifdef __cplusplus + +// C++ only part + +class NotificationListener; + +extern status_t remove_node_listener(dev_t device, dev_t node, + NotificationListener& listener); +extern status_t add_node_listener(dev_t device, dev_t node, uint32 flags, + NotificationListener& listener); + extern "C" { #endif diff --git a/src/system/kernel/fs/node_monitor.cpp b/src/system/kernel/fs/node_monitor.cpp index 3758698a4b..168be5478c 100644 --- a/src/system/kernel/fs/node_monitor.cpp +++ b/src/system/kernel/fs/node_monitor.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Copyright 2003-2008, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. */ @@ -109,6 +109,8 @@ class NodeMonitorService : public NotificationService { status_t RemoveListener(const KMessage *eventSpecifier, NotificationListener &listener); + status_t AddListener(io_context *context, dev_t device, ino_t node, + uint32 flags, NotificationListener ¬ificationListener); status_t RemoveListener(io_context *context, dev_t device, ino_t node, NotificationListener ¬ificationListener); @@ -130,8 +132,6 @@ class NodeMonitorService : public NotificationService { status_t _AddMonitorListener(io_context *context, node_monitor* monitor, uint32 flags, NotificationListener& notificationListener); - status_t _AddListener(io_context *context, dev_t device, ino_t node, - uint32 flags, NotificationListener ¬ificationListener); status_t _UpdateListener(io_context *context, dev_t device, ino_t node, uint32 flags, bool addFlags, NotificationListener ¬ificationListener); @@ -376,7 +376,7 @@ NodeMonitorService::_AddMonitorListener(io_context *context, status_t -NodeMonitorService::_AddListener(io_context *context, dev_t device, ino_t node, +NodeMonitorService::AddListener(io_context *context, dev_t device, ino_t node, uint32 flags, NotificationListener& notificationListener) { TRACE(("%s(dev = %ld, node = %Ld, flags = %ld, listener = %p\n", @@ -775,7 +775,7 @@ NodeMonitorService::AddListener(const KMessage* eventSpecifier, ino_t node = eventSpecifier->GetInt64("node", -1); uint32 flags = eventSpecifier->GetInt32("flags", 0); - return _AddListener(context, device, node, flags, listener); + return AddListener(context, device, node, flags, listener); } @@ -944,6 +944,23 @@ notify_mount(dev_t device, dev_t parentDevice, ino_t parentDirectory) } +status_t +remove_node_listener(dev_t device, dev_t node, NotificationListener& listener) +{ + return sNodeMonitorService.RemoveListener(get_current_io_context(true), + device, node, listener); +} + + +status_t +add_node_listener(dev_t device, dev_t node, uint32 flags, + NotificationListener& listener) +{ + return sNodeMonitorService.AddListener(get_current_io_context(true), + device, node, flags, listener); +} + + // #pragma mark - public kernel API