s3: VFS: Change SMB_VFS_REALPATH to take and return struct smb_filename * instead...
[kai/samba-autobuild/.git] / source3 / modules / vfs_fake_dfq.c
index 971db68bc557d212cd64e5c9df329e791881d85a..019b2e8891d476dff6d9f871037ac210c6ea541e 100644 (file)
@@ -61,24 +61,27 @@ static uint64_t dfq_disk_free(vfs_handle_struct *handle,
        uint64_t free_1k;
        int snum = SNUM(handle->conn);
        uint64_t dfq_bsize = 0;
-       char *rpath = NULL;
+       struct smb_filename *rpath_fname = NULL;
 
        /* look up the params based on real path to be resilient
         * to refactoring of path<->realpath
         */
-       rpath = SMB_VFS_NEXT_REALPATH(handle, smb_fname->base_name);
-       if (rpath != NULL) {
-               dfq_bsize = dfq_load_param(snum, rpath, "df", "block size", 0);
+       rpath_fname = SMB_VFS_NEXT_REALPATH(handle, talloc_tos(), smb_fname);
+       if (rpath_fname != NULL) {
+               dfq_bsize = dfq_load_param(snum, rpath_fname->base_name,
+                               "df", "block size", 0);
        }
        if (dfq_bsize == 0) {
-               SAFE_FREE(rpath);
+               TALLOC_FREE(rpath_fname);
                return SMB_VFS_NEXT_DISK_FREE(handle, smb_fname, bsize, dfree,
                                              dsize);
        }
 
        *bsize = dfq_bsize;
-       *dfree = dfq_load_param(snum, rpath, "df", "disk free", 0);
-       *dsize = dfq_load_param(snum, rpath, "df", "disk size", 0);
+       *dfree = dfq_load_param(snum, rpath_fname->base_name,
+                               "df", "disk free", 0);
+       *dsize = dfq_load_param(snum, rpath_fname->base_name,
+                               "df", "disk size", 0);
 
        if ((*bsize) < 1024) {
                free_1k = (*dfree) / (1024 / (*bsize));
@@ -86,7 +89,7 @@ static uint64_t dfq_disk_free(vfs_handle_struct *handle,
                free_1k = ((*bsize) / 1024) * (*dfree);
        }
 
-       SAFE_FREE(rpath);
+       TALLOC_FREE(rpath_fname);
        return free_1k;
 }
 
@@ -101,10 +104,10 @@ static int dfq_get_quota(struct vfs_handle_struct *handle,
        char *section = NULL;
        int snum = SNUM(handle->conn);
        uint64_t bsize = 0;
-       char *rpath = NULL;
+       struct smb_filename *rpath_fname = NULL;
 
-       rpath = SMB_VFS_NEXT_REALPATH(handle, smb_fname->base_name);
-       if (rpath == NULL) {
+       rpath_fname = SMB_VFS_NEXT_REALPATH(handle, talloc_tos(), smb_fname);
+       if (rpath_fname == NULL) {
                goto dflt;
        }
 
@@ -131,18 +134,21 @@ static int dfq_get_quota(struct vfs_handle_struct *handle,
                goto dflt;
        }
 
-       bsize = dfq_load_param(snum, rpath, section, "block size", 4096);
+       bsize = dfq_load_param(snum, rpath_fname->base_name,
+                               section, "block size", 4096);
        if (bsize == 0) {
                goto dflt;
        }
 
-       if (dfq_load_param(snum, rpath, section, "err", 0) != 0) {
+       if (dfq_load_param(snum, rpath_fname->base_name,
+                               section, "err", 0) != 0) {
                errno = ENOTSUP;
                rc = -1;
                goto out;
        }
 
-       if (dfq_load_param(snum, rpath, section, "nosys", 0) != 0) {
+       if (dfq_load_param(snum, rpath_fname->base_name,
+                               section, "nosys", 0) != 0) {
                errno = ENOSYS;
                rc = -1;
                goto out;
@@ -151,15 +157,22 @@ static int dfq_get_quota(struct vfs_handle_struct *handle,
        ZERO_STRUCTP(qt);
 
        qt->bsize = bsize;
-       qt->hardlimit = dfq_load_param(snum, rpath, section, "hard limit", 0);
-       qt->softlimit = dfq_load_param(snum, rpath, section, "soft limit", 0);
-       qt->curblocks = dfq_load_param(snum, rpath, section, "cur blocks", 0);
+       qt->hardlimit = dfq_load_param(snum, rpath_fname->base_name,
+                               section, "hard limit", 0);
+       qt->softlimit = dfq_load_param(snum, rpath_fname->base_name,
+                               section, "soft limit", 0);
+       qt->curblocks = dfq_load_param(snum, rpath_fname->base_name,
+                               section, "cur blocks", 0);
        qt->ihardlimit =
-           dfq_load_param(snum, rpath, section, "inode hard limit", 0);
+           dfq_load_param(snum, rpath_fname->base_name,
+                               section, "inode hard limit", 0);
        qt->isoftlimit =
-           dfq_load_param(snum, rpath, section, "inode soft limit", 0);
-       qt->curinodes = dfq_load_param(snum, rpath, section, "cur inodes", 0);
-       qt->qflags = dfq_load_param(snum, rpath, section, "qflags", QUOTAS_DENY_DISK);
+           dfq_load_param(snum, rpath_fname->base_name,
+                               section, "inode soft limit", 0);
+       qt->curinodes = dfq_load_param(snum, rpath_fname->base_name,
+                               section, "cur inodes", 0);
+       qt->qflags = dfq_load_param(snum, rpath_fname->base_name,
+                               section, "qflags", QUOTAS_DENY_DISK);
 
        goto out;
 
@@ -169,7 +182,7 @@ dflt:
 out:
        save_errno = errno;
        TALLOC_FREE(section);
-       SAFE_FREE(rpath);
+       TALLOC_FREE(rpath_fname);
        errno = save_errno;
        return rc;
 }