summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Peach <jpeach@apple.com>2007-10-15 14:01:12 -0700
committerJames Peach <jpeach@samba.org>2007-12-19 22:20:09 -0800
commit26b75f2d833d7a4ba588e66b5cf6cf3ed8e0b236 (patch)
tree996be5e495321023094f6750f2a53e20ffdcf654
parentd2a9630a8b239118e7fc4b9dcedd860e6b7574f1 (diff)
downloadsamba-26b75f2d833d7a4ba588e66b5cf6cf3ed8e0b236.tar.gz
samba-26b75f2d833d7a4ba588e66b5cf6cf3ed8e0b236.tar.bz2
samba-26b75f2d833d7a4ba588e66b5cf6cf3ed8e0b236.zip
Expose per-fsp extension talloc context.
This patch supplements the fsp extension API with an operation to retrieve the malloc zone pointer for that fsp. (This used to be commit d5d9e4084cfb3db3bebff0334b93f376022ef5d3)
-rw-r--r--source3/include/vfs.h9
-rw-r--r--source3/smbd/vfs.c16
2 files changed, 23 insertions, 2 deletions
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index e1669a271c..276f820fbc 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -579,12 +579,21 @@ typedef struct vfs_statvfs_struct {
/* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */
} vfs_statvfs_struct;
+/* Add a new FSP extension of the given type. Returns a pointer to the
+ * extenstion data.
+ */
#define VFS_ADD_FSP_EXTENSION(handle, fsp, type) \
vfs_add_fsp_extension_notype(handle, (fsp), sizeof(type))
+/* Return a pointer to the existing FSP extension data. */
#define VFS_FETCH_FSP_EXTENSION(handle, fsp) \
vfs_fetch_fsp_extension(handle, (fsp))
+/* Return the talloc context associated with an FSP extension. */
+#define VFS_MEMCTX_FSP_EXTENSION(handle, fsp) \
+ vfs_memctx_fsp_extension(handle, (fsp))
+
+/* Remove and destroy an FSP extension. */
#define VFS_REMOVE_FSP_EXTENSION(handle, fsp) \
vfs_remove_fsp_extension((handle), (fsp))
diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c
index 45d0788117..96d71da8d9 100644
--- a/source3/smbd/vfs.c
+++ b/source3/smbd/vfs.c
@@ -263,19 +263,31 @@ void vfs_remove_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
}
}
-void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
+void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
{
struct vfs_fsp_data *head;
for (head = fsp->vfs_extension; head; head = head->next) {
if (head->owner == handle) {
- return EXT_DATA_AREA(head);
+ return head;
}
}
return NULL;
}
+void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
+{
+ struct vfs_fsp_data *head;
+
+ head = vfs_memctx_fsp_extension(handle, fsp);
+ if (head != NULL) {
+ return EXT_DATA_AREA(head);
+ }
+
+ return NULL;
+}
+
#undef EXT_DATA_AREA
/*****************************************************************