diff options
author | Andrew Tridgell <tridge@samba.org> | 2006-04-03 06:46:55 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:00:11 -0500 |
commit | 6d98076c15e8726606da0a99714cd3382d82f9ac (patch) | |
tree | b61ac9e11fe901af7e92c47066dd040a613d4852 /source4/ntvfs/sysdep/sys_notify.c | |
parent | 69e40fa99af88f5cf78409c6ac5ebe8ca611ccb2 (diff) | |
download | samba-6d98076c15e8726606da0a99714cd3382d82f9ac.tar.gz samba-6d98076c15e8726606da0a99714cd3382d82f9ac.tar.bz2 samba-6d98076c15e8726606da0a99714cd3382d82f9ac.zip |
r14877: added support for the kernel inotify mechanism. This passes basic
tests, but still needs some more work to ensure we correctly cope with
events that may generate both a system inotify event and a internal
notify event. The system inotify events won't handle recursion, and
don't understand things like streams.
This also adds the ntvfs/sysdep/ directory, which is meant for system
dependent code that is not tied to a particular ntvfs backend. The
inotify code is a good example of that.
(This used to be commit eadadbb44adb3c4081d6ff1d85a9b850a0227059)
Diffstat (limited to 'source4/ntvfs/sysdep/sys_notify.c')
-rw-r--r-- | source4/ntvfs/sysdep/sys_notify.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/source4/ntvfs/sysdep/sys_notify.c b/source4/ntvfs/sysdep/sys_notify.c new file mode 100644 index 0000000000..aedfd2a7de --- /dev/null +++ b/source4/ntvfs/sysdep/sys_notify.c @@ -0,0 +1,96 @@ +/* + Unix SMB/CIFS implementation. + + Copyright (C) Andrew Tridgell 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + abstract the various kernel interfaces to change notify into a + single Samba friendly interface +*/ + +#include "includes.h" +#include "system/filesys.h" +#include "ntvfs/sysdep/sys_notify.h" +#include "lib/events/events.h" +#include "dlinklist.h" + +/* list of registered backends */ +static struct sys_notify_backend *backends; + + +/* + initialise a system change notify backend +*/ +struct sys_notify_context *sys_notify_init(int snum, + TALLOC_CTX *mem_ctx, + struct event_context *ev) +{ + struct sys_notify_context *ctx; + const char *bname; + struct sys_notify_backend *b; + + if (backends == NULL) { + return NULL; + } + + if (ev == NULL) { + ev = event_context_find(mem_ctx); + } + + ctx = talloc_zero(mem_ctx, struct sys_notify_context); + if (ctx == NULL) { + return NULL; + } + + ctx->ev = ev; + + bname = lp_parm_string(snum, "notify", "backend"); + if (bname == NULL) { + bname = backends->name; + } + + for (b=backends;b;b=b->next) { + if (strcasecmp(b->name, bname) == 0) break; + } + + if (b != NULL) { + ctx->name = b->name; + ctx->notify_watch = b->notify_watch; + } + + return ctx; +} + +/* + add a watch +*/ +NTSTATUS sys_notify_watch(struct sys_notify_context *ctx, const char *dirpath, + uint32_t filter, sys_notify_callback_t callback, + void *private, void **handle) +{ + return ctx->notify_watch(ctx, dirpath, filter, callback, private, handle); +} + +/* + register a notify backend +*/ +NTSTATUS sys_notify_register(struct sys_notify_backend *backend) +{ + DLIST_ADD(backends, backend); + return NT_STATUS_OK; +} |