s3: Plumb smb_filename through SMB_VFS_STAT and SMB_VFS_LSTAT
[metze/samba/wip.git] / source3 / modules / vfs_catia.c
index 47d178a33f16eaf7d9e85a6f0b2506d12a155e0a..c8c340d0a5e08d4d5044796f8d73d878fdd9693f 100644 (file)
@@ -105,11 +105,12 @@ static SMB_STRUCT_DIR *catia_opendir(vfs_handle_struct *handle,
 static SMB_STRUCT_DIRENT *catia_readdir(vfs_handle_struct *handle,
                                        SMB_STRUCT_DIR *dirp)
 {
-       SMB_STRUCT_DIRENT *result = SMB_VFS_NEXT_READDIR(handle, dirp);
-       SMB_STRUCT_DIRENT *newdirent;
+       SMB_STRUCT_DIRENT *result = NULL;
+       SMB_STRUCT_DIRENT *newdirent = NULL;
        char *newname;
        size_t newnamelen;
 
+       result = SMB_VFS_NEXT_READDIR(handle, dirp, NULL);
        if (result == NULL) {
                return result;
        }
@@ -132,18 +133,30 @@ static SMB_STRUCT_DIRENT *catia_readdir(vfs_handle_struct *handle,
 }
 
 static int catia_open(vfs_handle_struct *handle,
-                     const char *fname,
+                     struct smb_filename *smb_fname,
                      files_struct *fsp,
                      int flags,
                      mode_t mode)
 {
-       char *name = to_unix(talloc_tos(), fname);
+       char *name;
+       char *tmp_base_name;
+       int ret;
 
+       name = to_unix(talloc_tos(), smb_fname->base_name);
        if (!name) {
                errno = ENOMEM;
                return -1;
        }
-        return SMB_VFS_NEXT_OPEN(handle, name, fsp, flags, mode);
+
+       tmp_base_name = smb_fname->base_name;
+       smb_fname->base_name = name;
+
+       ret = SMB_VFS_NEXT_OPEN(handle, name, fsp, flags, mode);
+
+       smb_fname->base_name = tmp_base_name;
+       TALLOC_FREE(name);
+
+       return ret;
 }
 
 static int catia_rename(vfs_handle_struct *handle,
@@ -164,27 +177,51 @@ static int catia_rename(vfs_handle_struct *handle,
 }
 
 static int catia_stat(vfs_handle_struct *handle,
-                     const char *fname, SMB_STRUCT_STAT *sbuf)
+                     struct smb_filename *smb_fname)
 {
-       char *name = to_unix(talloc_tos(), fname);
+       char *name;
+       char *tmp_base_name;
+       int ret;
 
+       name = to_unix(talloc_tos(), smb_fname->base_name);
        if (!name) {
                errno = ENOMEM;
                return -1;
        }
-        return SMB_VFS_NEXT_STAT(handle, name, sbuf);
+
+       tmp_base_name = smb_fname->base_name;
+       smb_fname->base_name = name;
+
+       ret = SMB_VFS_NEXT_STAT(handle, smb_fname);
+
+       smb_fname->base_name = tmp_base_name;
+       TALLOC_FREE(name);
+
+       return ret;
 }
 
 static int catia_lstat(vfs_handle_struct *handle,
-                      const char *path, SMB_STRUCT_STAT *sbuf)
+                      struct smb_filename *smb_fname)
 {
-       char *name = to_unix(talloc_tos(), path);
+       char *name;
+       char *tmp_base_name;
+       int ret;
 
+       name = to_unix(talloc_tos(), smb_fname->base_name);
        if (!name) {
                errno = ENOMEM;
                return -1;
        }
-        return SMB_VFS_NEXT_LSTAT(handle, name, sbuf);
+
+       tmp_base_name = smb_fname->base_name;
+       smb_fname->base_name = name;
+
+       ret = SMB_VFS_NEXT_LSTAT(handle, smb_fname);
+
+       smb_fname->base_name = tmp_base_name;
+       TALLOC_FREE(name);
+
+       return ret;
 }
 
 static int catia_unlink(vfs_handle_struct *handle, const char *path)
@@ -252,9 +289,9 @@ static char *catia_getwd(vfs_handle_struct *handle, char *buf)
 }
 
 static int catia_ntimes(vfs_handle_struct *handle,
-                      const char *path, const struct timespec ts[2])
+                      const char *path, struct smb_file_time *ft)
 {
-        return SMB_VFS_NEXT_NTIMES(handle, path, ts);
+        return SMB_VFS_NEXT_NTIMES(handle, path, ft);
 }
 
 static bool catia_symlink(vfs_handle_struct *handle,