diff options
author | James Peach <jpeach@samba.org> | 2006-04-24 00:16:51 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:04:14 -0500 |
commit | 6ab33938d5239e8688440f65e802f627622d301b (patch) | |
tree | 7c2253d8e3252ccd973b2d2d36754d0d0e196d7a /source4/ntvfs/ntvfs_base.c | |
parent | f380d365eaad89db2c46331a3fa2d5d8600aeba1 (diff) | |
download | samba-6ab33938d5239e8688440f65e802f627622d301b.tar.gz samba-6ab33938d5239e8688440f65e802f627622d301b.tar.bz2 samba-6ab33938d5239e8688440f65e802f627622d301b.zip |
r15186: Introduce ISDOT and ISDOTDOT macros for testing whether a filename is
"." for "..". These express the intention better that strcmp or strequal
and improve searchability via cscope/ctags.
(This used to be commit 7e4ad7e8e5ec266b969e3075c4ad7f021571f24e)
Diffstat (limited to 'source4/ntvfs/ntvfs_base.c')
-rw-r--r-- | source4/ntvfs/ntvfs_base.c | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/source4/ntvfs/ntvfs_base.c b/source4/ntvfs/ntvfs_base.c index 316a9e9c68..b1efb44ec7 100644 --- a/source4/ntvfs/ntvfs_base.c +++ b/source4/ntvfs/ntvfs_base.c @@ -44,18 +44,11 @@ static int num_backends; The 'type' is used to specify whether this is for a disk, printer or IPC$ share */ -_PUBLIC_ NTSTATUS ntvfs_register(const struct ntvfs_ops *ops, - const struct ntvfs_critical_sizes *const sizes) +_PUBLIC_ NTSTATUS ntvfs_register(const void *_ops) { + const struct ntvfs_ops *ops = _ops; struct ntvfs_ops *new_ops; - - if (ntvfs_interface_differs(sizes)) { - DEBUG(0, ("NTVFS backend '%s' for type %d " - "failed version check\n", - ops->name, (int)ops->type)); - return NT_STATUS_BAD_FUNCTION_TABLE; - } - + if (ntvfs_backend_byname(ops->name, ops->type) != NULL) { /* its already registered! */ DEBUG(0,("NTVFS backend '%s' for type %d already registered\n", @@ -105,49 +98,21 @@ _PUBLIC_ const struct ntvfs_ops *ntvfs_backend_byname(const char *name, enum ntv This can be used by backends to either detect compilation errors, or provide multiple implementations for different smbd compilation options in one module */ - -static const NTVFS_CURRENT_CRITICAL_SIZES(critical_sizes); +static const struct ntvfs_critical_sizes critical_sizes = { + .interface_version = NTVFS_INTERFACE_VERSION, + .sizeof_ntvfs_critical_sizes = sizeof(struct ntvfs_critical_sizes), + .sizeof_ntvfs_context = sizeof(struct ntvfs_context), + .sizeof_ntvfs_module_context = sizeof(struct ntvfs_module_context), + .sizeof_ntvfs_ops = sizeof(struct ntvfs_ops), + .sizeof_ntvfs_async_state = sizeof(struct ntvfs_async_state), + .sizeof_ntvfs_request = sizeof(struct ntvfs_request), +}; _PUBLIC_ const struct ntvfs_critical_sizes *ntvfs_interface_version(void) { return &critical_sizes; } -_PUBLIC_ BOOL ntvfs_interface_differs(const struct ntvfs_critical_sizes *const iface) -{ - /* The comparison would be easier with memcmp, but compiler-interset - * alignment padding is not guaranteed to be zeroed. - */ - -#define FIELD_DIFFERS(field) (iface->field != critical_sizes.field) - - if (FIELD_DIFFERS(interface_version)) - return True; - - if (FIELD_DIFFERS(sizeof_ntvfs_critical_sizes)) - return True; - - if (FIELD_DIFFERS(sizeof_ntvfs_context)) - return True; - - if (FIELD_DIFFERS(sizeof_ntvfs_module_context)) - return True; - - if (FIELD_DIFFERS(sizeof_ntvfs_ops)) - return True; - - if (FIELD_DIFFERS(sizeof_ntvfs_async_state)) - return True; - - if (FIELD_DIFFERS(sizeof_ntvfs_request)) - return True; - - /* Versions match. */ - return False; - -#undef FIELD_DIFFERS -} - /* initialise a connection structure to point at a NTVFS backend |