summaryrefslogtreecommitdiff
path: root/source4/ntvfs/ntvfs_base.c
diff options
context:
space:
mode:
authorJames Peach <jpeach@samba.org>2006-04-24 00:16:51 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:04:14 -0500
commit6ab33938d5239e8688440f65e802f627622d301b (patch)
tree7c2253d8e3252ccd973b2d2d36754d0d0e196d7a /source4/ntvfs/ntvfs_base.c
parentf380d365eaad89db2c46331a3fa2d5d8600aeba1 (diff)
downloadsamba-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.c59
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