diff options
Diffstat (limited to 'lib/fstree')
| -rw-r--r-- | lib/fstree/xattr.c | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/lib/fstree/xattr.c b/lib/fstree/xattr.c index 38f7703..4597d9d 100644 --- a/lib/fstree/xattr.c +++ b/lib/fstree/xattr.c @@ -102,11 +102,24 @@ static int cmp_u64(const void *lhs, const void *rhs)  void fstree_xattr_reindex(fstree_t *fs)  { +	uint32_t key_idx, value_idx; +	size_t i, index = 0;  	tree_xattr_t *it; -	size_t index = 0; -	for (it = fs->xattr; it != NULL; it = it->next) +	str_table_reset_ref_count(&fs->xattr_keys); +	str_table_reset_ref_count(&fs->xattr_values); + +	for (it = fs->xattr; it != NULL; it = it->next) {  		it->index = index++; + +		for (i = 0; i < it->num_attr; ++i) { +			key_idx = (it->ref[i] >> 32) & 0x00000000FFFFFFFF; +			value_idx = it->ref[i] & 0x00000000FFFFFFFF; + +			str_table_add_ref(&fs->xattr_keys, key_idx); +			str_table_add_ref(&fs->xattr_values, value_idx); +		} +	}  }  void fstree_xattr_deduplicate(fstree_t *fs) | 
