pyldb: avoid segfault when adding an element with no name
[sfrench/samba-autobuild/.git] / examples / VFS / shadow_copy_test.c
index 155181229b190900532ce16c197d446fc5fc2acb..48bf9d580ffe3a91376ed31e60d14376ffe11ffc 100644 (file)
@@ -2,10 +2,11 @@
  * TEST implementation of an Shadow Copy module
  *
  * Copyright (C) Stefan Metzmacher     2003
+ * Copyright (C) Jeremy Allison 2009.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *  
  * This program is distributed in the hope that it will be useful,
  * GNU General Public License for more details.
  *  
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "includes.h"
+#include "../source3/include/includes.h"
+#include "ntioctl.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_VFS
          Directories are always displayed...    
 */
 
-static int test_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fsp, SHADOW_COPY_DATA *shadow_copy_data, BOOL labels)
+static int test_get_shadow_copy_data(vfs_handle_struct *handle,
+                                   files_struct *fsp,
+                                   struct shadow_copy_data *shadow_copy_data,
+                                   bool labels)
 {
-       uint32 num = 3;
-       uint32 i;
+       uint32_t num = 3;
+       uint32_t i;
        
        shadow_copy_data->num_volumes = num;
        
        if (labels) {   
-               shadow_copy_data->labels = TALLOC_ZERO_ARRAY(shadow_copy_data->mem_ctx,SHADOW_COPY_LABEL,num);
+               if (num) {
+                       shadow_copy_data->labels = talloc_zero_array(shadow_copy_data,SHADOW_COPY_LABEL,num);
+               } else {
+                       shadow_copy_data->labels = NULL;
+               }
                for (i=0;i<num;i++) {
                        snprintf(shadow_copy_data->labels[i], sizeof(SHADOW_COPY_LABEL), "@GMT-2003.08.05-12.%02u.00",i);
                }
@@ -71,13 +79,14 @@ static int test_get_shadow_copy_data(vfs_handle_struct *handle, files_struct *fs
 
 /* VFS operations structure */
 
-static vfs_op_tuple shadow_copy_test_ops[] = { 
-       {SMB_VFS_OP(test_get_shadow_copy_data), SMB_VFS_OP_GET_SHADOW_COPY_DATA,SMB_VFS_LAYER_OPAQUE},
-
-       {SMB_VFS_OP(NULL),                      SMB_VFS_OP_NOOP,                SMB_VFS_LAYER_NOOP}
+static struct vfs_fn_pointers vfs_test_shadow_copy_fns = {
+       .get_shadow_copy_data_fn = test_get_shadow_copy_data
 };
 
-NTSTATUS init_module(void)
+static_decl_vfs;
+NTSTATUS vfs_shadow_copy_test_init(TALLOC_CTX *ctx)
 {
-       return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "shadow_copy_test", shadow_copy_test_ops);
+       return smb_register_vfs(SMB_VFS_INTERFACE_VERSION,
+                               "shadow_copy_test",
+                               &vfs_test_shadow_copy_fns);
 }