summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
/*****************************************************************