} T_END;
}
+static struct fs_metadata *
+fs_metadata_find_md(const ARRAY_TYPE(fs_metadata) *metadata,
+ const char *key)
+{
+ struct fs_metadata *md;
+
+ array_foreach_modifiable(metadata, md) {
+ if (strcmp(md->key, key) == 0)
+ return md;
+ }
+ return NULL;
+}
+
void fs_default_set_metadata(struct fs_file *file,
const char *key, const char *value)
{
struct fs_metadata *metadata;
fs_metadata_init(file);
- metadata = array_append_space(&file->metadata);
- metadata->key = p_strdup(file->metadata_pool, key);
+ metadata = fs_metadata_find_md(&file->metadata, key);
+ if (metadata == NULL) {
+ metadata = array_append_space(&file->metadata);
+ metadata->key = p_strdup(file->metadata_pool, key);
+ }
metadata->value = p_strdup(file->metadata_pool, value);
}
if (!array_is_created(metadata))
return NULL;
- array_foreach(metadata, md) {
- if (strcmp(md->key, key) == 0)
- return md->value;
- }
- return NULL;
+ md = fs_metadata_find_md(metadata, key);
+ return md == NULL ? NULL : md->value;
}
void fs_set_metadata(struct fs_file *file, const char *key, const char *value)