From 6ab33938d5239e8688440f65e802f627622d301b Mon Sep 17 00:00:00 2001 From: James Peach Date: Mon, 24 Apr 2006 00:16:51 +0000 Subject: 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) --- source4/ntvfs/cifs/vfs_cifs.c | 3 +- source4/ntvfs/ipc/vfs_ipc.c | 3 +- source4/ntvfs/nbench/vfs_nbench.c | 3 +- source4/ntvfs/ntvfs.h | 11 ------- source4/ntvfs/ntvfs_base.c | 59 ++++++++----------------------------- source4/ntvfs/posix/pvfs_dirlist.c | 10 +++---- source4/ntvfs/posix/pvfs_resolve.c | 4 +-- source4/ntvfs/posix/pvfs_unlink.c | 4 +-- source4/ntvfs/posix/vfs_posix.c | 5 ++-- source4/ntvfs/print/vfs_print.c | 3 +- source4/ntvfs/simple/vfs_simple.c | 3 +- source4/ntvfs/unixuid/vfs_unixuid.c | 7 ++--- 12 files changed, 30 insertions(+), 85 deletions(-) (limited to 'source4/ntvfs') diff --git a/source4/ntvfs/cifs/vfs_cifs.c b/source4/ntvfs/cifs/vfs_cifs.c index 586e0ebb980..25fe4cb2a49 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 6ef380c4ebf..b6b931eccdb 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 a8ec141760d..b93e5f3c446 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 3d12c5efc9f..ec1f741fa80 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 316a9e9c68b..b1efb44ec7b 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 a61fc458b3a..a3eaca3cbbd 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 b8e55c85bfc..70a1c0523ae 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 4477360deb8..c40634035d8 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 2d40ceb85df..eddc49c9191 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 31cfcc9303d..1aa38a59c29 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 35c18e3f1c5..2347f31bde1 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 9afb2b1380f..061b8fbe55c 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: -- cgit