The branch, v4-0-test has been updated via 438032e12f3040fbb58488ca537e4d8da39b6124 (commit) via 7572afdc2635bdf9afbe1eda3c7498d0b5201db3 (commit) via 83e6c99f78990b6b1df520bdee14b9f931ad0420 (commit) via e01554e1617dc3c08a4ed6b4e016fd627f529ef9 (commit) via 8301189e94be850494482e8c064b2400a5d11157 (commit) via 43ec7fa2d898ce306557ea9092b6412bcc2f97ec (commit) from 04eb1be0c67317067ee0ca70c731fef958cd513c (commit)
http://gitweb.samba.org/?samba.git;a=shortlog;h=v4-0-test - Log ----------------------------------------------------------------- commit 438032e12f3040fbb58488ca537e4d8da39b6124 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Feb 22 09:41:41 2008 +0100 pvfs_unlink: move stream logic into pvfs_unlink_one() metze commit 7572afdc2635bdf9afbe1eda3c7498d0b5201db3 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Feb 22 09:37:22 2008 +0100 pvfs_unlink: splitup the logic into generic and file specific functions metze commit 83e6c99f78990b6b1df520bdee14b9f931ad0420 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Feb 22 09:30:51 2008 +0100 pvfs_unlink: add a fast path for the non wildcard case metze commit e01554e1617dc3c08a4ed6b4e016fd627f529ef9 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Feb 22 09:28:51 2008 +0100 pvfs_unlink: move !name->stream_exists into the caller metze commit 8301189e94be850494482e8c064b2400a5d11157 Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Fri Feb 22 09:23:53 2008 +0100 pvfs_unlink: pass down union smb_unlink completely to sub functions metze commit 43ec7fa2d898ce306557ea9092b6412bcc2f97ec Author: Stefan Metzmacher <[EMAIL PROTECTED]> Date: Thu Feb 21 20:12:46 2008 +0100 pvfs_unlink: pass down a struct pvfs_filename to pvfs_unlink_one() metze ----------------------------------------------------------------------- Summary of changes: source/ntvfs/posix/pvfs_unlink.c | 103 +++++++++++++++++--------------------- 1 files changed, 46 insertions(+), 57 deletions(-) Changeset truncated at 500 lines: diff --git a/source/ntvfs/posix/pvfs_unlink.c b/source/ntvfs/posix/pvfs_unlink.c index d6e60b5..bda4014 100644 --- a/source/ntvfs/posix/pvfs_unlink.c +++ b/source/ntvfs/posix/pvfs_unlink.c @@ -25,92 +25,70 @@ /* - unlink a stream - */ -static NTSTATUS pvfs_unlink_stream(struct pvfs_state *pvfs, - struct ntvfs_request *req, - struct pvfs_filename *name, - uint16_t attrib) + unlink a file +*/ +static NTSTATUS pvfs_unlink_file(struct pvfs_state *pvfs, + struct pvfs_filename *name) { NTSTATUS status; - if (!name->stream_exists) { - return NT_STATUS_OBJECT_NAME_NOT_FOUND; + if (name->dos.attrib & FILE_ATTRIBUTE_DIRECTORY) { + return NT_STATUS_FILE_IS_A_DIRECTORY; } - /* make sure its matches the given attributes */ - status = pvfs_match_attrib(pvfs, name, attrib, 0); - if (!NT_STATUS_IS_OK(status)) { - return status; + if (name->st.st_nlink == 1) { + status = pvfs_xattr_unlink_hook(pvfs, name->full_name); + if (!NT_STATUS_IS_OK(status)) { + return status; + } } - status = pvfs_can_delete(pvfs, req, name, NULL); - if (!NT_STATUS_IS_OK(status)) { - return status; + /* finally try the actual unlink */ + if (unlink(name->full_name) == -1) { + status = pvfs_map_errno(pvfs, errno); } - return pvfs_stream_delete(pvfs, name, -1); -} + if (NT_STATUS_IS_OK(status)) { + notify_trigger(pvfs->notify_context, + NOTIFY_ACTION_REMOVED, + FILE_NOTIFY_CHANGE_FILE_NAME, + name->full_name); + } + return status; +} /* unlink one file */ -static NTSTATUS pvfs_unlink_one(struct pvfs_state *pvfs, +static NTSTATUS pvfs_unlink_one(struct pvfs_state *pvfs, struct ntvfs_request *req, - const char *unix_path, - const char *fname, uint32_t attrib) + union smb_unlink *unl, + struct pvfs_filename *name) { - struct pvfs_filename *name; NTSTATUS status; - /* get a pvfs_filename object */ - status = pvfs_resolve_partial(pvfs, req, - unix_path, fname, &name); - if (!NT_STATUS_IS_OK(status)) { - return status; - } - /* make sure its matches the given attributes */ - status = pvfs_match_attrib(pvfs, name, attrib, 0); + status = pvfs_match_attrib(pvfs, name, + unl->unlink.in.attrib, 0); if (!NT_STATUS_IS_OK(status)) { - talloc_free(name); return status; } status = pvfs_can_delete(pvfs, req, name, NULL); if (!NT_STATUS_IS_OK(status)) { - talloc_free(name); return status; } - if (name->dos.attrib & FILE_ATTRIBUTE_DIRECTORY) { - talloc_free(name); - return NT_STATUS_FILE_IS_A_DIRECTORY; - } - - if (name->st.st_nlink == 1) { - status = pvfs_xattr_unlink_hook(pvfs, name->full_name); - if (!NT_STATUS_IS_OK(status)) { - return status; + if (name->stream_name) { + if (!name->stream_exists) { + return NT_STATUS_OBJECT_NAME_NOT_FOUND; } - } - /* finally try the actual unlink */ - if (unlink(name->full_name) == -1) { - status = pvfs_map_errno(pvfs, errno); + return pvfs_stream_delete(pvfs, name, -1); } - if (NT_STATUS_IS_OK(status)) { - notify_trigger(pvfs->notify_context, - NOTIFY_ACTION_REMOVED, - FILE_NOTIFY_CHANGE_FILE_NAME, - name->full_name); - } - - talloc_free(name); - - return status; + return pvfs_unlink_file(pvfs, name); } /* @@ -145,8 +123,8 @@ NTSTATUS pvfs_unlink(struct ntvfs_module_context *ntvfs, return NT_STATUS_FILE_IS_A_DIRECTORY; } - if (name->stream_name) { - return pvfs_unlink_stream(pvfs, req, name, unl->unlink.in.attrib); + if (!name->has_wildcard) { + return pvfs_unlink_one(pvfs, req, unl, name); } /* get list of matching files */ @@ -156,6 +134,7 @@ NTSTATUS pvfs_unlink(struct ntvfs_module_context *ntvfs, } status = NT_STATUS_NO_SUCH_FILE; + talloc_free(name); ofs = 0; @@ -166,10 +145,20 @@ NTSTATUS pvfs_unlink(struct ntvfs_module_context *ntvfs, return NT_STATUS_OBJECT_NAME_INVALID; } - status = pvfs_unlink_one(pvfs, req, pvfs_list_unix_path(dir), fname, unl->unlink.in.attrib); + /* get a pvfs_filename object */ + status = pvfs_resolve_partial(pvfs, req, + pvfs_list_unix_path(dir), + fname, &name); + if (!NT_STATUS_IS_OK(status)) { + return status; + } + + status = pvfs_unlink_one(pvfs, req, unl, name); if (NT_STATUS_IS_OK(status)) { total_deleted++; } + + talloc_free(name); } if (total_deleted > 0) { -- Samba Shared Repository