summaryrefslogtreecommitdiff
path: root/source4/ntvfs
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
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')
-rw-r--r--source4/ntvfs/cifs/vfs_cifs.c3
-rw-r--r--source4/ntvfs/ipc/vfs_ipc.c3
-rw-r--r--source4/ntvfs/nbench/vfs_nbench.c3
-rw-r--r--source4/ntvfs/ntvfs.h11
-rw-r--r--source4/ntvfs/ntvfs_base.c59
-rw-r--r--source4/ntvfs/posix/pvfs_dirlist.c10
-rw-r--r--source4/ntvfs/posix/pvfs_resolve.c4
-rw-r--r--source4/ntvfs/posix/pvfs_unlink.c4
-rw-r--r--source4/ntvfs/posix/vfs_posix.c5
-rw-r--r--source4/ntvfs/print/vfs_print.c3
-rw-r--r--source4/ntvfs/simple/vfs_simple.c3
-rw-r--r--source4/ntvfs/unixuid/vfs_unixuid.c7
12 files changed, 30 insertions, 85 deletions
diff --git a/source4/ntvfs/cifs/vfs_cifs.c b/source4/ntvfs/cifs/vfs_cifs.c
index 586e0ebb98..25fe4cb2a4 100644
--- a/source4/ntvfs/cifs/vfs_cifs.c
+++ b/source4/ntvfs/cifs/vfs_cifs.c
@@ -939,7 +939,6 @@ NTSTATUS ntvfs_cifs_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -986,7 +985,7 @@ NTSTATUS ntvfs_cifs_init(void)
/* register ourselves with the NTVFS subsystem. We register
under the name 'cifs'. */
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register CIFS backend!\n"));
diff --git a/source4/ntvfs/ipc/vfs_ipc.c b/source4/ntvfs/ipc/vfs_ipc.c
index 6ef380c4eb..b6b931eccd 100644
--- a/source4/ntvfs/ipc/vfs_ipc.c
+++ b/source4/ntvfs/ipc/vfs_ipc.c
@@ -777,7 +777,6 @@ NTSTATUS ntvfs_ipc_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -818,7 +817,7 @@ NTSTATUS ntvfs_ipc_init(void)
ops.cancel = ipc_cancel;
/* register ourselves with the NTVFS subsystem. */
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register IPC backend!\n"));
diff --git a/source4/ntvfs/nbench/vfs_nbench.c b/source4/ntvfs/nbench/vfs_nbench.c
index a8ec141760..b93e5f3c44 100644
--- a/source4/ntvfs/nbench/vfs_nbench.c
+++ b/source4/ntvfs/nbench/vfs_nbench.c
@@ -884,7 +884,6 @@ NTSTATUS ntvfs_nbench_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -929,7 +928,7 @@ NTSTATUS ntvfs_nbench_init(void)
ops.trans2 = NULL;
/* register ourselves with the NTVFS subsystem. */
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register nbench backend!\n"));
diff --git a/source4/ntvfs/ntvfs.h b/source4/ntvfs/ntvfs.h
index 3d12c5efc9..ec1f741fa8 100644
--- a/source4/ntvfs/ntvfs.h
+++ b/source4/ntvfs/ntvfs.h
@@ -266,17 +266,6 @@ struct ntvfs_critical_sizes {
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"
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
diff --git a/source4/ntvfs/posix/pvfs_dirlist.c b/source4/ntvfs/posix/pvfs_dirlist.c
index a61fc458b3..a3eaca3cbb 100644
--- a/source4/ntvfs/posix/pvfs_dirlist.c
+++ b/source4/ntvfs/posix/pvfs_dirlist.c
@@ -218,8 +218,7 @@ const char *pvfs_list_next(struct pvfs_dir *dir, uint_t *ofs)
while ((de = readdir(dir->dir))) {
const char *dname = de->d_name;
- if (strcmp(dname, ".") == 0 ||
- strcmp(dname, "..") == 0) {
+ if (ISDOT(dname) || ISDOT(dname)) {
continue;
}
@@ -269,13 +268,13 @@ NTSTATUS pvfs_list_seek(struct pvfs_dir *dir, const char *name, uint_t *ofs)
struct dirent *de;
int i;
- if (strcmp(name, ".") == 0) {
+ if (ISDOT(name)) {
dir->offset = DIR_OFFSET_DOTDOT;
*ofs = dir->offset;
return NT_STATUS_OK;
}
- if (strcmp(name, "..") == 0) {
+ if (ISDOTDOT(name)) {
dir->offset = DIR_OFFSET_BASE;
*ofs = dir->offset;
return NT_STATUS_OK;
@@ -324,8 +323,7 @@ BOOL pvfs_directory_empty(struct pvfs_state *pvfs, struct pvfs_filename *name)
}
while ((de = readdir(dir))) {
- if (strcmp(de->d_name, ".") != 0 &&
- strcmp(de->d_name, "..") != 0) {
+ if (!ISDOT(de->d_name) && !ISDOTDOT(de->d_name)) {
closedir(dir);
return False;
}
diff --git a/source4/ntvfs/posix/pvfs_resolve.c b/source4/ntvfs/posix/pvfs_resolve.c
index b8e55c85bf..70a1c0523a 100644
--- a/source4/ntvfs/posix/pvfs_resolve.c
+++ b/source4/ntvfs/posix/pvfs_resolve.c
@@ -372,7 +372,7 @@ static NTSTATUS pvfs_reduce_name(TALLOC_CTX *mem_ctx, const char **fname, uint_t
if (strcmp(components[i], "") == 0) {
continue;
}
- if (strcmp(components[i], ".") == 0 || err_count) {
+ if (ISDOT(components[i]) || err_count) {
err_count++;
}
}
@@ -394,7 +394,7 @@ static NTSTATUS pvfs_reduce_name(TALLOC_CTX *mem_ctx, const char **fname, uint_t
i--;
continue;
}
- if (strcmp(components[i], "..") == 0) {
+ if (ISDOTDOT(components[i])) {
if (i < 1) return NT_STATUS_OBJECT_PATH_SYNTAX_BAD;
memmove(&components[i-1], &components[i+1],
sizeof(char *)*(num_components-(i+1)));
diff --git a/source4/ntvfs/posix/pvfs_unlink.c b/source4/ntvfs/posix/pvfs_unlink.c
index 4477360deb..c40634035d 100644
--- a/source4/ntvfs/posix/pvfs_unlink.c
+++ b/source4/ntvfs/posix/pvfs_unlink.c
@@ -22,6 +22,7 @@
#include "includes.h"
#include "vfs_posix.h"
+#include "system/dir.h"
/*
@@ -164,8 +165,7 @@ NTSTATUS pvfs_unlink(struct ntvfs_module_context *ntvfs,
while ((fname = pvfs_list_next(dir, &ofs))) {
/* this seems to be a special case */
if ((unl->unlink.in.attrib & FILE_ATTRIBUTE_DIRECTORY) &&
- (strcmp(fname, ".") == 0 ||
- strcmp(fname, "..") == 0)) {
+ (ISDOT(fname) || ISDOTDOT(fname))) {
return NT_STATUS_OBJECT_NAME_INVALID;
}
diff --git a/source4/ntvfs/posix/vfs_posix.c b/source4/ntvfs/posix/vfs_posix.c
index 2d40ceb85d..eddc49c919 100644
--- a/source4/ntvfs/posix/vfs_posix.c
+++ b/source4/ntvfs/posix/vfs_posix.c
@@ -286,7 +286,6 @@ NTSTATUS ntvfs_posix_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -329,14 +328,14 @@ NTSTATUS ntvfs_posix_init(void)
under the name 'default' as we wish to be the default
backend, and also register as 'posix' */
ops.name = "default";
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register POSIX backend as '%s'!\n", ops.name));
}
ops.name = "posix";
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register POSIX backend as '%s'!\n", ops.name));
diff --git a/source4/ntvfs/print/vfs_print.c b/source4/ntvfs/print/vfs_print.c
index 31cfcc9303..1aa38a59c2 100644
--- a/source4/ntvfs/print/vfs_print.c
+++ b/source4/ntvfs/print/vfs_print.c
@@ -100,7 +100,6 @@ NTSTATUS ntvfs_print_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -116,7 +115,7 @@ NTSTATUS ntvfs_print_init(void)
/* register ourselves with the NTVFS subsystem. We register under the name 'default'
as we wish to be the default backend */
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register PRINT backend!\n"));
diff --git a/source4/ntvfs/simple/vfs_simple.c b/source4/ntvfs/simple/vfs_simple.c
index 35c18e3f1c..2347f31bde 100644
--- a/source4/ntvfs/simple/vfs_simple.c
+++ b/source4/ntvfs/simple/vfs_simple.c
@@ -969,7 +969,6 @@ NTSTATUS ntvfs_simple_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -1011,7 +1010,7 @@ NTSTATUS ntvfs_simple_init(void)
ops.type = NTVFS_DISK;
ops.name = "simple";
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) {
DEBUG(0,("Failed to register simple backend with name: %s!\n",
diff --git a/source4/ntvfs/unixuid/vfs_unixuid.c b/source4/ntvfs/unixuid/vfs_unixuid.c
index 9afb2b1380..061b8fbe55 100644
--- a/source4/ntvfs/unixuid/vfs_unixuid.c
+++ b/source4/ntvfs/unixuid/vfs_unixuid.c
@@ -639,7 +639,6 @@ NTSTATUS ntvfs_unixuid_init(void)
{
NTSTATUS ret;
struct ntvfs_ops ops;
- NTVFS_CURRENT_CRITICAL_SIZES(vers);
ZERO_STRUCT(ops);
@@ -680,15 +679,15 @@ NTSTATUS ntvfs_unixuid_init(void)
/* we register under all 3 backend types, as we are not type specific */
ops.type = NTVFS_DISK;
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) goto failed;
ops.type = NTVFS_PRINT;
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) goto failed;
ops.type = NTVFS_IPC;
- ret = ntvfs_register(&ops, &vers);
+ ret = ntvfs_register(&ops);
if (!NT_STATUS_IS_OK(ret)) goto failed;
failed: