dovecot-2.2: lib-fs: Added FS_PROPERTY_COPY_METADATA and fs_set_...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Jul 10 12:42:06 UTC 2014
details: http://hg.dovecot.org/dovecot-2.2/rev/2fada3a76d10
changeset: 17614:2fada3a76d10
user: Timo Sirainen <tss at iki.fi>
date: Thu Jul 10 15:40:08 2014 +0300
description:
lib-fs: Added FS_PROPERTY_COPY_METADATA and fs_set_metadata() tracking.
diffstat:
src/lib-fs/fs-api-private.h | 4 +++-
src/lib-fs/fs-api.c | 10 ++++++++++
src/lib-fs/fs-api.h | 5 ++++-
3 files changed, 17 insertions(+), 2 deletions(-)
diffs (91 lines):
diff -r 27d269bbbdf0 -r 2fada3a76d10 src/lib-fs/fs-api-private.h
--- a/src/lib-fs/fs-api-private.h Wed Jul 09 15:55:59 2014 +0300
+++ b/src/lib-fs/fs-api-private.h Thu Jul 10 15:40:08 2014 +0300
@@ -75,7 +75,6 @@
struct istream *seekable_input;
struct istream *pending_read_input;
- bool write_pending;
const struct hash_method *write_digest_method;
void *write_digest;
@@ -86,6 +85,9 @@
struct fs_file *copy_src;
struct istream *copy_input;
struct ostream *copy_output;
+
+ unsigned int write_pending;
+ unsigned int metadata_changed:1;
};
struct fs_lock {
diff -r 27d269bbbdf0 -r 2fada3a76d10 src/lib-fs/fs-api.c
--- a/src/lib-fs/fs-api.c Wed Jul 09 15:55:59 2014 +0300
+++ b/src/lib-fs/fs-api.c Thu Jul 10 15:40:08 2014 +0300
@@ -242,6 +242,7 @@
{
if (file->fs->v.set_metadata != NULL) T_BEGIN {
file->fs->v.set_metadata(file, key, value);
+ file->metadata_changed = TRUE;
} T_END;
}
@@ -472,6 +473,8 @@
T_BEGIN {
ret = file->fs->v.write_stream_finish(file, TRUE);
} T_END;
+ if (ret != 0)
+ file->metadata_changed = FALSE;
return ret;
}
@@ -482,6 +485,8 @@
T_BEGIN {
ret = file->fs->v.write_stream_finish(file, TRUE);
} T_END;
+ if (ret != 0)
+ file->metadata_changed = FALSE;
return ret;
}
@@ -493,6 +498,7 @@
T_BEGIN {
(void)file->fs->v.write_stream_finish(file, FALSE);
} T_END;
+ file->metadata_changed = FALSE;
}
void fs_write_set_hash(struct fs_file *file, const struct hash_method *method,
@@ -628,6 +634,8 @@
T_BEGIN {
ret = src->fs->v.copy(src, dest);
} T_END;
+ if (ret < 0 || errno != EAGAIN)
+ dest->metadata_changed = FALSE;
return ret;
}
@@ -638,6 +646,8 @@
T_BEGIN {
ret = dest->fs->v.copy(NULL, dest);
} T_END;
+ if (ret < 0 || errno != EAGAIN)
+ dest->metadata_changed = FALSE;
return ret;
}
diff -r 27d269bbbdf0 -r 2fada3a76d10 src/lib-fs/fs-api.h
--- a/src/lib-fs/fs-api.h Wed Jul 09 15:55:59 2014 +0300
+++ b/src/lib-fs/fs-api.h Thu Jul 10 15:40:08 2014 +0300
@@ -22,7 +22,10 @@
when its children are deleted. */
FS_PROPERTY_DIRECTORIES = 0x80,
FS_PROPERTY_WRITE_HASH_MD5 = 0x100,
- FS_PROPERTY_WRITE_HASH_SHA256 = 0x200
+ FS_PROPERTY_WRITE_HASH_SHA256 = 0x200,
+ /* fs_copy() will copy the metadata if fs_set_metadata() hasn't
+ been explicitly called. */
+ FS_PROPERTY_COPY_METADATA = 0x400
};
enum fs_open_mode {
More information about the dovecot-cvs
mailing list