diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/smb.h | 1 | ||||
-rw-r--r-- | source3/smbd/dir.c | 4 | ||||
-rw-r--r-- | source3/smbd/vfs-wrap.c | 8 | ||||
-rw-r--r-- | source3/smbd/vfs.c | 2 |
4 files changed, 13 insertions, 2 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h index aa1f7439961..29c119df95c 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -629,6 +629,7 @@ struct vfs_ops { struct dirent *(*readdir)(DIR *dirp); int (*mkdir)(char *path, mode_t mode); int (*rmdir)(char *path); + int (*closedir)(DIR *dir); /* File operations */ diff --git a/source3/smbd/dir.c b/source3/smbd/dir.c index 52d271e284b..b7ae2af47cb 100644 --- a/source3/smbd/dir.c +++ b/source3/smbd/dir.c @@ -524,7 +524,7 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) if (!p) return(NULL); dirp = (Dir *)malloc(sizeof(Dir)); if (!dirp) { - closedir(p); + conn->vfs_ops.closedir(p); return(NULL); } dirp->pos = dirp->numentries = dirp->mallocsize = 0; @@ -554,7 +554,7 @@ void *OpenDir(connection_struct *conn, char *name, BOOL use_veto) dirp->numentries++; } - closedir(p); + conn->vfs_ops.closedir(p); return((void *)dirp); } diff --git a/source3/smbd/vfs-wrap.c b/source3/smbd/vfs-wrap.c index b3d1a35329b..da69b3f006c 100644 --- a/source3/smbd/vfs-wrap.c +++ b/source3/smbd/vfs-wrap.c @@ -66,6 +66,14 @@ int vfswrap_rmdir(char *path) return result; } +int vfswrap_closedir(DIR *dirp) +{ + int result; + + result = closedir(path); + return result; +} + /* File operations */ int vfswrap_open(char *fname, int flags, mode_t mode) diff --git a/source3/smbd/vfs.c b/source3/smbd/vfs.c index 59e7bb49352..fdff87496b5 100644 --- a/source3/smbd/vfs.c +++ b/source3/smbd/vfs.c @@ -53,6 +53,7 @@ struct vfs_syminfo vfs_syminfo[] = { {"vfs_readdir", &dl_ops.readdir}, {"vfs_mkdir", &dl_ops.mkdir}, {"vfs_rmdir", &dl_ops.rmdir}, + {"vfs_closedir", &dl_ops.closedir}, /* File operations */ @@ -95,6 +96,7 @@ struct vfs_ops default_vfs_ops = { vfswrap_readdir, vfswrap_mkdir, vfswrap_rmdir, + vfswrap_closedir, /* File operations */ |