dovecot-2.2: lib-fs: fs_file_path() is now a virtual function.

dovecot at dovecot.org dovecot at dovecot.org
Mon Jan 21 14:19:32 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/df8fd01f355c
changeset: 15653:df8fd01f355c
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jan 21 14:19:21 2013 +0200
description:
lib-fs: fs_file_path() is now a virtual function.
This fixes it returning the correct filename when file was created using
FS_OPEN_MODE_CREATE_UNIQUE_128 and a wrapper fs.

diffstat:

 src/lib-fs/fs-api-private.h |  1 +
 src/lib-fs/fs-api.c         |  3 ++-
 src/lib-fs/fs-posix.c       |  1 +
 src/lib-fs/fs-sis-queue.c   |  8 ++++++++
 src/lib-fs/fs-sis.c         |  8 ++++++++
 5 files changed, 20 insertions(+), 1 deletions(-)

diffs (85 lines):

diff -r 6e5adbf30e35 -r df8fd01f355c src/lib-fs/fs-api-private.h
--- a/src/lib-fs/fs-api-private.h	Mon Jan 21 11:40:38 2013 +0200
+++ b/src/lib-fs/fs-api-private.h	Mon Jan 21 14:19:21 2013 +0200
@@ -15,6 +15,7 @@
 				     enum fs_open_mode mode,
 				     enum fs_open_flags flags);
 	void (*file_deinit)(struct fs_file *file);
+	const char *(*get_path)(struct fs_file *file);
 
 	void (*set_async_callback)(struct fs_file *file,
 				   fs_file_async_callback_t *callback,
diff -r 6e5adbf30e35 -r df8fd01f355c src/lib-fs/fs-api.c
--- a/src/lib-fs/fs-api.c	Mon Jan 21 11:40:38 2013 +0200
+++ b/src/lib-fs/fs-api.c	Mon Jan 21 14:19:21 2013 +0200
@@ -178,7 +178,8 @@
 
 const char *fs_file_path(struct fs_file *file)
 {
-	return file->path;
+	return file->fs->v.get_path == NULL ? file->path :
+		file->fs->v.get_path(file);
 }
 
 const char *fs_last_error(struct fs *fs)
diff -r 6e5adbf30e35 -r df8fd01f355c src/lib-fs/fs-posix.c
--- a/src/lib-fs/fs-posix.c	Mon Jan 21 11:40:38 2013 +0200
+++ b/src/lib-fs/fs-posix.c	Mon Jan 21 14:19:21 2013 +0200
@@ -745,6 +745,7 @@
 		fs_posix_get_properties,
 		fs_posix_file_init,
 		fs_posix_file_deinit,
+		NULL,
 		NULL, NULL,
 		NULL, NULL,
 		fs_posix_prefetch,
diff -r 6e5adbf30e35 -r df8fd01f355c src/lib-fs/fs-sis-queue.c
--- a/src/lib-fs/fs-sis-queue.c	Mon Jan 21 11:40:38 2013 +0200
+++ b/src/lib-fs/fs-sis-queue.c	Mon Jan 21 14:19:21 2013 +0200
@@ -117,6 +117,13 @@
 	i_free(file);
 }
 
+static const char *fs_sis_queue_file_get_path(struct fs_file *_file)
+{
+	struct sis_queue_fs_file *file = (struct sis_queue_fs_file *)_file;
+
+	return fs_file_path(file->super);
+}
+
 static void
 fs_sis_queue_set_async_callback(struct fs_file *_file,
 				fs_file_async_callback_t *callback,
@@ -345,6 +352,7 @@
 		fs_sis_queue_get_properties,
 		fs_sis_queue_file_init,
 		fs_sis_queue_file_deinit,
+		fs_sis_queue_file_get_path,
 		fs_sis_queue_set_async_callback,
 		fs_sis_queue_wait_async,
 		fs_sis_queue_set_metadata,
diff -r 6e5adbf30e35 -r df8fd01f355c src/lib-fs/fs-sis.c
--- a/src/lib-fs/fs-sis.c	Mon Jan 21 11:40:38 2013 +0200
+++ b/src/lib-fs/fs-sis.c	Mon Jan 21 14:19:21 2013 +0200
@@ -155,6 +155,13 @@
 	i_free(file);
 }
 
+static const char *fs_sis_file_get_path(struct fs_file *_file)
+{
+	struct sis_fs_file *file = (struct sis_fs_file *)_file;
+
+	return fs_file_path(file->super);
+}
+
 static void
 fs_sis_set_async_callback(struct fs_file *_file,
 			  fs_file_async_callback_t *callback, void *context)
@@ -479,6 +486,7 @@
 		fs_sis_get_properties,
 		fs_sis_file_init,
 		fs_sis_file_deinit,
+		fs_sis_file_get_path,
 		fs_sis_set_async_callback,
 		fs_sis_wait_async,
 		fs_sis_set_metadata,


More information about the dovecot-cvs mailing list