diff options
Diffstat (limited to 'mkfs')
| -rw-r--r-- | mkfs/mkfs.c | 2 | ||||
| -rw-r--r-- | mkfs/mkfs.h | 3 | ||||
| -rw-r--r-- | mkfs/xattr.c | 38 | 
3 files changed, 22 insertions, 21 deletions
| diff --git a/mkfs/mkfs.c b/mkfs/mkfs.c index 77e9581..50e2ce5 100644 --- a/mkfs/mkfs.c +++ b/mkfs/mkfs.c @@ -129,7 +129,7 @@ int main(int argc, char **argv)  	if (id_table_write(&info.idtbl, info.outfd, &info.super, info.cmp))  		goto out_data; -	if (write_xattr(&info)) +	if (write_xattr(info.outfd, &info.fs, &info.super, info.cmp))  		goto out_data;  	if (sqfs_super_write(&info.super, info.outfd)) diff --git a/mkfs/mkfs.h b/mkfs/mkfs.h index 53552fa..f08ef5a 100644 --- a/mkfs/mkfs.h +++ b/mkfs/mkfs.h @@ -49,7 +49,8 @@ typedef struct {  void process_command_line(options_t *opt, int argc, char **argv); -int write_xattr(sqfs_info_t *info); +int write_xattr(int outfd, fstree_t *fs, sqfs_super_t *super, +		compressor_t *cmp);  int write_data_to_image(data_writer_t *data, sqfs_info_t *info); diff --git a/mkfs/xattr.c b/mkfs/xattr.c index b7f433e..237f5d4 100644 --- a/mkfs/xattr.c +++ b/mkfs/xattr.c @@ -63,8 +63,7 @@ static int write_pair(meta_writer_t *mw, const char *key, const char *value)  	return 0;  } -static int write_kv_pairs(sqfs_info_t *info, meta_writer_t *mw, -			  tree_xattr_t *xattr) +static int write_kv_pairs(fstree_t *fs, meta_writer_t *mw, tree_xattr_t *xattr)  {  	uint32_t key_idx, val_idx;  	const char *key, *value; @@ -74,8 +73,8 @@ static int write_kv_pairs(sqfs_info_t *info, meta_writer_t *mw,  		key_idx = (xattr->ref[i] >> 32) & 0xFFFFFFFF;  		val_idx = xattr->ref[i] & 0xFFFFFFFF; -		key = str_table_get_string(&info->fs.xattr_keys, key_idx); -		value = str_table_get_string(&info->fs.xattr_values, val_idx); +		key = str_table_get_string(&fs->xattr_keys, key_idx); +		value = str_table_get_string(&fs->xattr_values, val_idx);  		if (write_pair(mw, key, value))  			return -1; @@ -87,7 +86,8 @@ static int write_kv_pairs(sqfs_info_t *info, meta_writer_t *mw,  	return 0;  } -int write_xattr(sqfs_info_t *info) +int write_xattr(int outfd, fstree_t *fs, sqfs_super_t *super, +		compressor_t *cmp)  {  	uint64_t kv_start, id_start, block, *tbl;  	size_t i = 0, count = 0, blocks; @@ -98,21 +98,21 @@ int write_xattr(sqfs_info_t *info)  	uint32_t offset;  	ssize_t ret; -	if (info->fs.xattr == NULL) +	if (fs->xattr == NULL)  		return 0; -	mw = meta_writer_create(info->outfd, info->cmp); +	mw = meta_writer_create(outfd, cmp);  	if (mw == NULL)  		return -1;  	/* write xattr key-value pairs */ -	kv_start = info->super.bytes_used; +	kv_start = super->bytes_used; -	for (it = info->fs.xattr; it != NULL; it = it->next) { +	for (it = fs->xattr; it != NULL; it = it->next) {  		meta_writer_get_position(mw, &it->block, &it->offset);  		it->size = 0; -		if (write_kv_pairs(info, mw, it)) +		if (write_kv_pairs(fs, mw, it))  			goto fail_mw;  		++count; @@ -124,7 +124,7 @@ int write_xattr(sqfs_info_t *info)  	meta_writer_get_position(mw, &block, &offset);  	meta_writer_reset(mw); -	info->super.bytes_used += block; +	super->bytes_used += block;  	/* allocate location table */  	blocks = (count * sizeof(id_ent)) / SQFS_META_BLOCK_SIZE; @@ -141,9 +141,9 @@ int write_xattr(sqfs_info_t *info)  	/* write ID table referring to key value pairs, record offsets */  	id_start = 0; -	tbl[i++] = htole64(info->super.bytes_used); +	tbl[i++] = htole64(super->bytes_used); -	for (it = info->fs.xattr; it != NULL; it = it->next) { +	for (it = fs->xattr; it != NULL; it = it->next) {  		id_ent.xattr = htole64((it->block << 16) | it->offset);  		id_ent.count = htole32(it->num_attr);  		id_ent.size = htole32(it->size); @@ -155,7 +155,7 @@ int write_xattr(sqfs_info_t *info)  		if (block != id_start) {  			id_start = block; -			tbl[i++] = htole64(info->super.bytes_used + id_start); +			tbl[i++] = htole64(super->bytes_used + id_start);  		}  	} @@ -163,27 +163,27 @@ int write_xattr(sqfs_info_t *info)  		goto fail_tbl;  	meta_writer_get_position(mw, &block, &offset); -	info->super.bytes_used += block; +	super->bytes_used += block;  	/* write offset table */  	idtbl.xattr_table_start = htole64(kv_start);  	idtbl.xattr_ids = htole32(count);  	idtbl.unused = 0; -	ret = write_retry(info->outfd, &idtbl, sizeof(idtbl)); +	ret = write_retry(outfd, &idtbl, sizeof(idtbl));  	if (ret < 0)  		goto fail_wr;  	if ((size_t)ret < sizeof(idtbl))  		goto fail_trunc; -	write_retry(info->outfd, tbl, sizeof(tbl[0]) * blocks); +	write_retry(outfd, tbl, sizeof(tbl[0]) * blocks);  	if (ret < 0)  		goto fail_wr;  	if ((size_t)ret < sizeof(tbl[0]) * blocks)  		goto fail_trunc; -	info->super.xattr_id_table_start = info->super.bytes_used; -	info->super.bytes_used += sizeof(idtbl) + sizeof(tbl[0]) * blocks; +	super->xattr_id_table_start = super->bytes_used; +	super->bytes_used += sizeof(idtbl) + sizeof(tbl[0]) * blocks;  	free(tbl);  	meta_writer_destroy(mw); | 
