diff options
author | James Peach <jpeach@apple.com> | 2007-10-15 14:01:12 -0700 |
---|---|---|
committer | James Peach <jpeach@samba.org> | 2007-12-19 22:20:09 -0800 |
commit | 26b75f2d833d7a4ba588e66b5cf6cf3ed8e0b236 (patch) | |
tree | 996be5e495321023094f6750f2a53e20ffdcf654 /source3 | |
parent | d2a9630a8b239118e7fc4b9dcedd860e6b7574f1 (diff) | |
download | samba-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.h | 9 | ||||
-rw-r--r-- | source3/smbd/vfs.c | 16 |
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 /***************************************************************** |