r15186: Introduce ISDOT and ISDOTDOT macros for testing whether a filename is
[jelmer/samba4-debian.git] / source / ntvfs / ntvfs_base.c
index 316a9e9c68bd38b87f17b8e758213b058d507ffe..b1efb44ec7bd8a721baa923974b5acd19cc9864e 100644 (file)
@@ -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