From: Timo Sirainen Date: Wed, 4 Mar 2020 13:39:28 +0000 (+0200) Subject: lib-fs: Add flags parameter to fs_vfuncs.get_metadata() X-Git-Tag: 2.3.10~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c69ccff6229ac23f474ba3b491b5a870aa63440c;p=thirdparty%2Fdovecot%2Fcore.git lib-fs: Add flags parameter to fs_vfuncs.get_metadata() --- diff --git a/src/lib-fs/fs-api-private.h b/src/lib-fs/fs-api-private.h index 395e3f3ff4..3037d0ee48 100644 --- a/src/lib-fs/fs-api-private.h +++ b/src/lib-fs/fs-api-private.h @@ -11,6 +11,10 @@ #define FS_EVENT_FIELD_FILE "lib-fs#file" #define FS_EVENT_FIELD_ITER "lib-fs#iter" +enum fs_get_metadata_flags { + FS_GET_METADATA_FLAG_DUMMY, +}; + struct fs_api_module_register { unsigned int id; }; @@ -44,6 +48,7 @@ struct fs_vfuncs { void (*set_metadata)(struct fs_file *file, const char *key, const char *value); int (*get_metadata)(struct fs_file *file, + enum fs_get_metadata_flags flags, const ARRAY_TYPE(fs_metadata) **metadata_r); bool (*prefetch)(struct fs_file *file, uoff_t length); @@ -181,6 +186,9 @@ void fs_metadata_init(struct fs_file *file); void fs_metadata_init_or_clear(struct fs_file *file); void fs_default_set_metadata(struct fs_file *file, const char *key, const char *value); +int fs_get_metadata_full(struct fs_file *file, + enum fs_get_metadata_flags flags, + const ARRAY_TYPE(fs_metadata) **metadata_r); const char *fs_metadata_find(const ARRAY_TYPE(fs_metadata) *metadata, const char *key); int fs_default_copy(struct fs_file *src, struct fs_file *dest); diff --git a/src/lib-fs/fs-api.c b/src/lib-fs/fs-api.c index c8bd36d446..619c01e041 100644 --- a/src/lib-fs/fs-api.c +++ b/src/lib-fs/fs-api.c @@ -487,8 +487,9 @@ void fs_file_timing_end(struct fs_file *file, enum fs_op op) file->timing_start[op].tv_sec = 0; } -int fs_get_metadata(struct fs_file *file, - const ARRAY_TYPE(fs_metadata) **metadata_r) +int fs_get_metadata_full(struct fs_file *file, + enum fs_get_metadata_flags flags, + const ARRAY_TYPE(fs_metadata) **metadata_r) { int ret; @@ -508,13 +509,19 @@ int fs_get_metadata(struct fs_file *file, fs_file_timing_start(file, FS_OP_METADATA); } T_BEGIN { - ret = file->fs->v.get_metadata(file, metadata_r); + ret = file->fs->v.get_metadata(file, flags, metadata_r); } T_END; if (!(ret < 0 && errno == EAGAIN)) fs_file_timing_end(file, FS_OP_METADATA); return ret; } +int fs_get_metadata(struct fs_file *file, + const ARRAY_TYPE(fs_metadata) **metadata_r) +{ + return fs_get_metadata_full(file, 0, metadata_r); +} + int fs_lookup_metadata(struct fs_file *file, const char *key, const char **value_r) { diff --git a/src/lib-fs/fs-metawrap.c b/src/lib-fs/fs-metawrap.c index 55e227592e..aac904ffcd 100644 --- a/src/lib-fs/fs-metawrap.c +++ b/src/lib-fs/fs-metawrap.c @@ -164,6 +164,7 @@ fs_metawrap_set_metadata(struct fs_file *_file, const char *key, static int fs_metawrap_get_metadata(struct fs_file *_file, + enum fs_get_metadata_flags flags, const ARRAY_TYPE(fs_metadata) **metadata_r) { struct metawrap_fs_file *file = (struct metawrap_fs_file *)_file; @@ -171,7 +172,7 @@ fs_metawrap_get_metadata(struct fs_file *_file, char c; if (!file->fs->wrap_metadata) - return fs_get_metadata(_file->parent, metadata_r); + return fs_get_metadata_full(_file->parent, flags, metadata_r); if (file->metadata_read) { /* we have the metadata */ diff --git a/src/lib-fs/fs-randomfail.c b/src/lib-fs/fs-randomfail.c index 8a3d696de7..cd63fd7c5e 100644 --- a/src/lib-fs/fs-randomfail.c +++ b/src/lib-fs/fs-randomfail.c @@ -283,6 +283,7 @@ fs_random_fail_range(struct fs *_fs, struct event *event, static int fs_randomfail_get_metadata(struct fs_file *_file, + enum fs_get_metadata_flags flags, const ARRAY_TYPE(fs_metadata) **metadata_r) { struct randomfail_fs_file *file = (struct randomfail_fs_file *)_file; @@ -290,7 +291,7 @@ fs_randomfail_get_metadata(struct fs_file *_file, if (fs_file_random_fail_begin(file, FS_OP_METADATA)) return -1; - ret = fs_get_metadata(_file->parent, metadata_r); + ret = fs_get_metadata_full(_file->parent, flags, metadata_r); return fs_file_random_fail_end(file, ret, FS_OP_METADATA); } diff --git a/src/lib-fs/fs-test.c b/src/lib-fs/fs-test.c index fa753a39da..a6c21d06b9 100644 --- a/src/lib-fs/fs-test.c +++ b/src/lib-fs/fs-test.c @@ -111,6 +111,7 @@ fs_test_set_metadata(struct fs_file *_file, const char *key, static int fs_test_get_metadata(struct fs_file *_file, + enum fs_get_metadata_flags flags ATTR_UNUSED, const ARRAY_TYPE(fs_metadata) **metadata_r) { struct test_fs_file *file = (struct test_fs_file *)_file; diff --git a/src/lib-fs/fs-wrapper.c b/src/lib-fs/fs-wrapper.c index ea8130b409..e427a879a8 100644 --- a/src/lib-fs/fs-wrapper.c +++ b/src/lib-fs/fs-wrapper.c @@ -43,9 +43,10 @@ void fs_wrapper_set_metadata(struct fs_file *file, const char *key, } int fs_wrapper_get_metadata(struct fs_file *file, + enum fs_get_metadata_flags flags, const ARRAY_TYPE(fs_metadata) **metadata_r) { - return fs_get_metadata(file->parent, metadata_r); + return fs_get_metadata_full(file->parent, flags, metadata_r); } bool fs_wrapper_prefetch(struct fs_file *file, uoff_t length) diff --git a/src/lib-fs/fs-wrapper.h b/src/lib-fs/fs-wrapper.h index e888e9d81c..ebfd35dd8a 100644 --- a/src/lib-fs/fs-wrapper.h +++ b/src/lib-fs/fs-wrapper.h @@ -1,6 +1,8 @@ #ifndef FS_WRAPPER_H #define FS_WRAPPER_H +enum fs_get_metadata_flags; + enum fs_properties fs_wrapper_get_properties(struct fs *fs); void fs_wrapper_file_close(struct fs_file *file); const char *fs_wrapper_file_get_path(struct fs_file *file); @@ -11,6 +13,7 @@ void fs_wrapper_wait_async(struct fs *fs); void fs_wrapper_set_metadata(struct fs_file *file, const char *key, const char *value); int fs_wrapper_get_metadata(struct fs_file *file, + enum fs_get_metadata_flags flags, const ARRAY_TYPE(fs_metadata) **metadata_r); bool fs_wrapper_prefetch(struct fs_file *file, uoff_t length); ssize_t fs_wrapper_read(struct fs_file *file, void *buf, size_t size);