summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2013-06-01 02:14:41 +0200
committerKarolin Seeger <kseeger@samba.org>2014-01-13 10:17:21 +0100
commit8422130ddbd0c7ed3b926bdfbba5da1b7f2b7536 (patch)
tree5cffeb948ba53dc4727746d9f2784f0c2f031f6b
parentc4b12f3ed3a7b45610abf002fa885fd1af39735c (diff)
downloadsamba-8422130ddbd0c7ed3b926bdfbba5da1b7f2b7536.tar.gz
shadow_copy2: implement disk_free
Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org> (cherry picked from commit ea898ea1ac1cc9364c5b7396db3902aeb114cfb8)
-rw-r--r--source3/modules/vfs_shadow_copy2.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
index 1cf65127dd7..7e56b297ce2 100644
--- a/source3/modules/vfs_shadow_copy2.c
+++ b/source3/modules/vfs_shadow_copy2.c
@@ -1578,6 +1578,42 @@ static int shadow_copy2_get_real_filename(struct vfs_handle_struct *handle,
return ret;
}
+static uint64_t shadow_copy2_disk_free(vfs_handle_struct *handle,
+ const char *path, bool small_query,
+ uint64_t *bsize, uint64_t *dfree,
+ uint64_t *dsize)
+{
+ time_t timestamp;
+ char *stripped;
+ ssize_t ret;
+ int saved_errno;
+ char *conv;
+
+ if (!shadow_copy2_strip_snapshot(talloc_tos(), handle, path,
+ &timestamp, &stripped)) {
+ return -1;
+ }
+ if (timestamp == 0) {
+ return SMB_VFS_NEXT_DISK_FREE(handle, path, small_query,
+ bsize, dfree, dsize);
+ }
+
+ conv = shadow_copy2_convert(talloc_tos(), handle, stripped, timestamp);
+ TALLOC_FREE(stripped);
+ if (conv == NULL) {
+ return -1;
+ }
+
+ ret = SMB_VFS_NEXT_DISK_FREE(handle, conv, small_query, bsize, dfree,
+ dsize);
+
+ saved_errno = errno;
+ TALLOC_FREE(conv);
+ errno = saved_errno;
+
+ return ret;
+}
+
static int shadow_copy2_connect(struct vfs_handle_struct *handle,
const char *service, const char *user)
{
@@ -1816,6 +1852,7 @@ static int shadow_copy2_connect(struct vfs_handle_struct *handle,
static struct vfs_fn_pointers vfs_shadow_copy2_fns = {
.connect_fn = shadow_copy2_connect,
.opendir_fn = shadow_copy2_opendir,
+ .disk_free_fn = shadow_copy2_disk_free,
.rename_fn = shadow_copy2_rename,
.link_fn = shadow_copy2_link,
.symlink_fn = shadow_copy2_symlink,