diff options
Diffstat (limited to 'mkfs')
| -rw-r--r-- | mkfs/block.c | 21 | 
1 files changed, 21 insertions, 0 deletions
| diff --git a/mkfs/block.c b/mkfs/block.c index 545df53..de2c962 100644 --- a/mkfs/block.c +++ b/mkfs/block.c @@ -211,8 +211,25 @@ static int find_and_process_files(sqfs_info_t *info, tree_node_t *n,  int write_data_to_image(sqfs_info_t *info)  { +	bool need_restore = false; +	const char *ptr;  	int ret; +	if (info->opt.packdir != NULL) { +		if (pushd(info->opt.packdir)) +			return -1; +		need_restore = true; +	} else { +		ptr = strrchr(info->opt.infile, '/'); + +		if (ptr != NULL) { +			if (pushdn(info->opt.infile, ptr - info->opt.infile)) +				return -1; + +			need_restore = true; +		} +	} +  	info->block = malloc(info->super.block_size);  	if (info->block == NULL) { @@ -245,5 +262,9 @@ int write_data_to_image(sqfs_info_t *info)  	info->block = NULL;  	info->fragment = NULL;  	info->scratch = NULL; + +	if (need_restore) +		ret = popd(); +  	return ret;  } | 
