svn commit: samba r15183 - in branches/SAMBA_4_0/source/ntvfs: .
jpeach at samba.org
jpeach at samba.org
Sun Apr 23 23:40:55 GMT 2006
Author: jpeach
Date: 2006-04-23 23:40:53 +0000 (Sun, 23 Apr 2006)
New Revision: 15183
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15183
Log:
Hoist the critical sizes initialiser into a header so that modules
can have standard access to critical sizes. Add a convenience function
to determine whether two critical sizes differ.
Modified:
branches/SAMBA_4_0/source/ntvfs/ntvfs.h
branches/SAMBA_4_0/source/ntvfs/ntvfs_base.c
Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/ntvfs.h
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/ntvfs.h 2006-04-23 22:45:54 UTC (rev 15182)
+++ branches/SAMBA_4_0/source/ntvfs/ntvfs.h 2006-04-23 23:40:53 UTC (rev 15183)
@@ -266,6 +266,17 @@
int sizeof_ntvfs_request;
};
+#define NTVFS_CURRENT_CRITICAL_SIZES(c) \
+ struct ntvfs_critical_sizes c = { \
+ .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), \
+ }
+
struct messaging_context;
#include "librpc/gen_ndr/security.h"
#include "librpc/gen_ndr/notify.h"
Modified: branches/SAMBA_4_0/source/ntvfs/ntvfs_base.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/ntvfs_base.c 2006-04-23 22:45:54 UTC (rev 15182)
+++ branches/SAMBA_4_0/source/ntvfs/ntvfs_base.c 2006-04-23 23:40:53 UTC (rev 15183)
@@ -98,22 +98,50 @@
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 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),
-};
+static const NTVFS_CURRENT_CRITICAL_SIZES(critical_sizes);
+
_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
*/
More information about the samba-cvs
mailing list