s3:smbd: add vfs_remove_all_fsp_extensions()
authorStefan Metzmacher <metze@samba.org>
Mon, 4 Jun 2012 15:54:41 +0000 (17:54 +0200)
committerStefan Metzmacher <metze@samba.org>
Wed, 6 Jun 2012 08:18:36 +0000 (10:18 +0200)
metze

source3/smbd/proto.h
source3/smbd/vfs.c

index 6358286ab980e0a27e6c4a9e50111751e915de6b..693a498026b15685a859667b4e8bab862631fb62 100644 (file)
@@ -1149,6 +1149,7 @@ void *vfs_add_fsp_extension_notype(vfs_handle_struct *handle,
                                   files_struct *fsp, size_t ext_size,
                                   void (*destroy_fn)(void *p_data));
 void vfs_remove_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
+void vfs_remove_all_fsp_extensions(struct files_struct *fsp);
 void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
 void *vfs_fetch_fsp_extension(vfs_handle_struct *handle, files_struct *fsp);
 bool smbd_vfs_init(connection_struct *conn);
index 2be6c54a8812c52ffad854b9f21eeb3a31de7843..60320e60692bbf4020356936a90a0dce71d907eb 100644 (file)
@@ -261,6 +261,27 @@ void vfs_remove_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
        }
 }
 
+void vfs_remove_all_fsp_extensions(files_struct *fsp)
+{
+       struct vfs_fsp_data *curr;
+       struct vfs_fsp_data *prev;
+
+       for (curr = fsp->vfs_extension, prev = NULL;
+            curr;
+            prev = curr, curr = curr->next)
+       {
+               if (prev) {
+                       prev->next = curr->next;
+               } else {
+                       fsp->vfs_extension = curr->next;
+               }
+               if (curr->destroy) {
+                       curr->destroy(EXT_DATA_AREA(curr));
+               }
+               TALLOC_FREE(curr);
+       }
+}
+
 void *vfs_memctx_fsp_extension(vfs_handle_struct *handle, files_struct *fsp)
 {
        struct vfs_fsp_data *head;