New -zisofs parameter bpt_free_ratio=
This commit is contained in:
@ -2263,8 +2263,8 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
{
|
||||
int was_level, was_blocksize, was_v2_enabled, was_blocksize_v2;
|
||||
uint64_t was_max_total_blocks, was_max_file_blocks, was_block_number_target;
|
||||
int ret, l, i;
|
||||
double num;
|
||||
int ret, l, i, sticky;
|
||||
double num, was_bpt_discard_free_ratio;
|
||||
char *cpt, *npt, text[16];
|
||||
|
||||
was_level= xorriso->zlib_level;
|
||||
@ -2274,6 +2274,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
was_max_file_blocks= xorriso->zisofs_max_file_blocks;
|
||||
was_blocksize_v2= xorriso->zisofs_v2_block_size;
|
||||
was_block_number_target= xorriso->zisofs_block_number_target;
|
||||
was_bpt_discard_free_ratio= xorriso->zisofs_bpt_discard_free_ratio;
|
||||
npt= cpt= mode;
|
||||
for(cpt= mode; npt!=NULL; cpt= npt+1) {
|
||||
npt= strchr(cpt,':');
|
||||
@ -2298,6 +2299,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
strncmp(cpt, "osiz_used=", 10) == 0 ||
|
||||
strncmp(cpt, "gzip_used=", 10) == 0 ||
|
||||
strncmp(cpt, "gunzip_used=", 12) == 0 ||
|
||||
strncmp(cpt, "bpt_ratio_used=", 15) == 0 ||
|
||||
strncmp(cpt, "bpt_used=", 9) == 0) {
|
||||
/* (ignored info from -status) */;
|
||||
|
||||
@ -2341,8 +2343,12 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
"-zisofs: Unsupported block pointer pool size (allowed: 1k to 128g)");
|
||||
goto sorry_ex;
|
||||
}
|
||||
sticky= 0;
|
||||
if(xorriso->zisofs_max_total_blocks == xorriso->zisofs_max_file_blocks)
|
||||
sticky= 1;
|
||||
xorriso->zisofs_max_total_blocks= num / 8.0;
|
||||
if(xorriso->zisofs_max_total_blocks < xorriso->zisofs_max_file_blocks)
|
||||
if(xorriso->zisofs_max_total_blocks < xorriso->zisofs_max_file_blocks ||
|
||||
sticky)
|
||||
xorriso->zisofs_max_file_blocks= xorriso->zisofs_max_total_blocks;
|
||||
|
||||
} else if(strncmp(cpt, "max_bpt_f=", 10) == 0) {
|
||||
@ -2372,6 +2378,18 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
parse_zisofs_param(cpt, 11, l, &num);
|
||||
xorriso->zisofs_block_number_target= num;
|
||||
|
||||
} else if(strncmp(cpt, "bpt_free_ratio=", 15) == 0) {
|
||||
parse_zisofs_param(cpt, 15, l, &num);
|
||||
/* 0 means to libisofs "do not change" */
|
||||
if(num == 0.0)
|
||||
num= -1.0;
|
||||
if(num != -1.0 && (num <= 0.0 || num > 1.0)) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-zisofs: Unsupported free blockpointer ratio (allowed -1 or 0.0 to 1.0)");
|
||||
goto sorry_ex;
|
||||
}
|
||||
xorriso->zisofs_bpt_discard_free_ratio = num;
|
||||
|
||||
} else if(strncmp(cpt, "default", l)==0) {
|
||||
xorriso->zlib_level= xorriso->zlib_level_default;
|
||||
xorriso->zisofs_block_size= xorriso->zisofs_block_size_default;
|
||||
@ -2381,6 +2399,8 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
xorriso->zisofs_max_file_blocks= xorriso->zisofs_max_file_blocks_default;
|
||||
xorriso->zisofs_v2_block_size= xorriso->zisofs_v2_block_size_default;
|
||||
xorriso->zisofs_block_number_target= -1;
|
||||
xorriso->zisofs_bpt_discard_free_ratio=
|
||||
xorriso->zisofs_bpt_discard_free_ratio_default;
|
||||
|
||||
} else {
|
||||
unknown_mode:;
|
||||
@ -2397,6 +2417,7 @@ sorry_ex:
|
||||
xorriso->zisofs_max_file_blocks= was_max_file_blocks;
|
||||
xorriso->zisofs_v2_block_size= was_blocksize_v2;
|
||||
xorriso->zisofs_block_number_target= was_block_number_target;
|
||||
xorriso->zisofs_bpt_discard_free_ratio= was_bpt_discard_free_ratio;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user