TALLOC_FREE(*datap);
}
-static bool open_and_sort_dir (vfs_handle_struct *handle)
+static bool open_and_sort_dir(vfs_handle_struct *handle,
+ struct dirsort_privates *data)
{
struct stat dir_stat;
unsigned int i;
data->fd = dirfd(data->source_directory);
- SMB_VFS_HANDLE_SET_DATA(handle, data, free_dirsort_privates,
- struct dirsort_privates, return NULL);
-
- if (!open_and_sort_dir(handle)) {
+ if (!open_and_sort_dir(handle, data)) {
SMB_VFS_NEXT_CLOSEDIR(handle,data->source_directory);
+ TALLOC_FREE(data);
return NULL;
}
+ SMB_VFS_HANDLE_SET_DATA(handle, data, free_dirsort_privates,
+ struct dirsort_privates, return NULL);
+
return data->source_directory;
}
data->fd = dirfd(data->source_directory);
- SMB_VFS_HANDLE_SET_DATA(handle, data, free_dirsort_privates,
- struct dirsort_privates, return NULL);
-
- if (!open_and_sort_dir(handle)) {
+ if (!open_and_sort_dir(handle, data)) {
SMB_VFS_NEXT_CLOSEDIR(handle,data->source_directory);
+ TALLOC_FREE(data);
/* fd is now closed. */
fsp->fh->fd = -1;
return NULL;
}
+ SMB_VFS_HANDLE_SET_DATA(handle, data, free_dirsort_privates,
+ struct dirsort_privates, return NULL);
+
return data->source_directory;
}
/* throw away cache and re-read the directory if we've changed */
if (current_mtime > data->mtime) {
- open_and_sort_dir(handle);
+ open_and_sort_dir(handle, data);
}
if (data->pos >= data->number_of_entries) {