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