summaryrefslogtreecommitdiff
path: root/source3
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 /source3
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)
Diffstat (limited to 'source3')
-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
/*****************************************************************