dovecot-2.2: lib-fs: Added support for asynchronous fs iteration.
dovecot at dovecot.org
dovecot at dovecot.org
Tue Sep 10 04:11:30 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/6ed90c968ab1
changeset: 16722:6ed90c968ab1
user: Timo Sirainen <tss at iki.fi>
date: Tue Sep 10 04:11:03 2013 +0300
description:
lib-fs: Added support for asynchronous fs iteration.
diffstat:
src/lib-fs/fs-api-private.h | 4 ++++
src/lib-fs/fs-api.c | 13 +++++++++++++
src/lib-fs/fs-api.h | 13 ++++++++++++-
3 files changed, 29 insertions(+), 1 deletions(-)
diffs (65 lines):
diff -r 7e0ebc2faf3c -r 6ed90c968ab1 src/lib-fs/fs-api-private.h
--- a/src/lib-fs/fs-api-private.h Tue Sep 10 00:27:12 2013 +0300
+++ b/src/lib-fs/fs-api-private.h Tue Sep 10 04:11:03 2013 +0300
@@ -93,6 +93,10 @@
struct fs_iter {
struct fs *fs;
enum fs_iter_flags flags;
+
+ bool async_have_more;
+ fs_file_async_callback_t *async_callback;
+ void *async_context;
};
extern const struct fs fs_class_posix;
diff -r 7e0ebc2faf3c -r 6ed90c968ab1 src/lib-fs/fs-api.c
--- a/src/lib-fs/fs-api.c Tue Sep 10 00:27:12 2013 +0300
+++ b/src/lib-fs/fs-api.c Tue Sep 10 04:11:03 2013 +0300
@@ -670,6 +670,19 @@
return iter->fs->v.iter_next(iter);
}
+void fs_iter_set_async_callback(struct fs_iter *iter,
+ fs_file_async_callback_t *callback,
+ void *context)
+{
+ iter->async_callback = callback;
+ iter->async_context = context;
+}
+
+bool fs_iter_have_more(struct fs_iter *iter)
+{
+ return iter->async_have_more;
+}
+
void fs_set_error(struct fs *fs, const char *fmt, ...)
{
va_list args;
diff -r 7e0ebc2faf3c -r 6ed90c968ab1 src/lib-fs/fs-api.h
--- a/src/lib-fs/fs-api.h Tue Sep 10 00:27:12 2013 +0300
+++ b/src/lib-fs/fs-api.h Tue Sep 10 04:11:03 2013 +0300
@@ -59,7 +59,9 @@
enum fs_iter_flags {
/* Iterate only directories, not files */
- FS_ITER_FLAG_DIRS = 0x01
+ FS_ITER_FLAG_DIRS = 0x01,
+ /* Request asynchronous iteration. */
+ FS_ITER_FLAG_ASYNC = 0x02
};
struct fs_settings {
@@ -206,4 +208,13 @@
/* Returns the next filename. */
const char *fs_iter_next(struct fs_iter *iter);
+/* For asynchronous iterations: Specify the callback that is called whenever
+ there's more data available for reading. */
+void fs_iter_set_async_callback(struct fs_iter *iter,
+ fs_file_async_callback_t *callback,
+ void *context);
+/* For asynchronous iterations: If fs_iter_next() returns NULL, use this
+ function to determine if you should wait for more data or finish up. */
+bool fs_iter_have_more(struct fs_iter *iter);
+
#endif
More information about the dovecot-cvs
mailing list