New -zisofs parameters version_2=, block_size_v2=, max_bpt=, max_bpt_f=
This commit is contained in:
@ -2245,15 +2245,34 @@ int Xorriso_option_xattr(struct XorrisO *xorriso, char *mode, int flag)
|
||||
}
|
||||
|
||||
|
||||
static int parse_zisofs_param(char *cpt, int key_l, int l, double *num)
|
||||
{
|
||||
char text[16];
|
||||
|
||||
*num= 0.0;
|
||||
if(l <= key_l || l >= key_l + 16)
|
||||
return(0);
|
||||
strncpy(text, cpt + key_l, l - key_l);
|
||||
text[l - key_l]= 0;
|
||||
*num= Scanf_io_size(text, 0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
/* Option -zisofs */
|
||||
int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
{
|
||||
int was_level, was_blocksize, ret, l;
|
||||
int was_level, was_blocksize, was_v2_enabled, was_blocksize_v2;
|
||||
uint64_t was_max_total_blocks, was_max_file_blocks;
|
||||
int ret, l, i;
|
||||
double num;
|
||||
char *cpt, *npt, text[16];
|
||||
|
||||
was_level= xorriso->zlib_level;
|
||||
was_blocksize= xorriso->zisofs_block_size;
|
||||
was_v2_enabled= xorriso->zisofs_v2_enabled;
|
||||
was_max_total_blocks= xorriso->zisofs_max_total_blocks;
|
||||
was_max_file_blocks= xorriso->zisofs_max_file_blocks;
|
||||
was_blocksize_v2= xorriso->zisofs_v2_block_size;
|
||||
npt= cpt= mode;
|
||||
for(cpt= mode; npt!=NULL; cpt= npt+1) {
|
||||
npt= strchr(cpt,':');
|
||||
@ -2277,7 +2296,8 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
} else if(strncmp(cpt, "ziso_used=", 10) == 0 ||
|
||||
strncmp(cpt, "osiz_used=", 10) == 0 ||
|
||||
strncmp(cpt, "gzip_used=", 10) == 0 ||
|
||||
strncmp(cpt, "gunzip_used=", 12) == 0) {
|
||||
strncmp(cpt, "gunzip_used=", 12) == 0 ||
|
||||
strncmp(cpt, "bpt_used=", 9) == 0) {
|
||||
/* (ignored info from -status) */;
|
||||
|
||||
} else if(strncmp(cpt, "block_size=", 11)==0) {
|
||||
@ -2294,16 +2314,67 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
}
|
||||
xorriso->zisofs_block_size= num;
|
||||
|
||||
} else if(strncmp(cpt, "by_magic=", 8)==0) {
|
||||
} else if(strncmp(cpt, "by_magic=", 9)==0) {
|
||||
if(strncmp(cpt + 9, "on", l - 9) == 0)
|
||||
xorriso->zisofs_by_magic= 1;
|
||||
else
|
||||
xorriso->zisofs_by_magic= 0;
|
||||
|
||||
} else if(strncmp(cpt, "version_2=", 10) == 0) {
|
||||
if(strncmp(cpt + 10, "off", l - 10) == 0) {
|
||||
xorriso->zisofs_v2_enabled= 0;
|
||||
} else if(strncmp(cpt + 10, "as_needed", l - 11) == 0) {
|
||||
xorriso->zisofs_v2_enabled= 1;
|
||||
} else if(strncmp(cpt + 10, "on", l - 11) == 0) {
|
||||
xorriso->zisofs_v2_enabled= 2;
|
||||
} else {
|
||||
sprintf(xorriso->info_text,
|
||||
"-zisofs: Unrecognized version_2 mode (allowed: on, off, as_needed)");
|
||||
goto sorry_ex;
|
||||
}
|
||||
|
||||
} else if(strncmp(cpt, "max_bpt=", 8) == 0) {
|
||||
parse_zisofs_param(cpt, 8, l, &num);
|
||||
if(num < 1024.0 || num > 128.0 * 1024.0 * 1024.0 * 1024.0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-zisofs: Unsupported block pointer pool size (allowed: 1k to 128g)");
|
||||
goto sorry_ex;
|
||||
}
|
||||
xorriso->zisofs_max_total_blocks= num / 8.0;
|
||||
if(xorriso->zisofs_max_total_blocks < xorriso->zisofs_max_file_blocks)
|
||||
xorriso->zisofs_max_file_blocks= xorriso->zisofs_max_total_blocks;
|
||||
|
||||
} else if(strncmp(cpt, "max_bpt_f=", 10) == 0) {
|
||||
parse_zisofs_param(cpt, 10, l, &num);
|
||||
if(num < 1024.0 || num > 128.0 * 1024.0 * 1024.0 * 1024.0) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-zisofs: Unsupported block pointer list size (allowed: 1k to 128g)");
|
||||
goto sorry_ex;
|
||||
}
|
||||
xorriso->zisofs_max_file_blocks= num / 8.0;
|
||||
if(xorriso->zisofs_max_file_blocks > xorriso->zisofs_max_total_blocks)
|
||||
xorriso->zisofs_max_total_blocks= xorriso->zisofs_max_file_blocks;
|
||||
|
||||
} else if(strncmp(cpt, "block_size_v2=", 14) == 0) {
|
||||
parse_zisofs_param(cpt, 14, l, &num);
|
||||
for(i= 15 ; i <= 20; i++)
|
||||
if(num == (1 << i))
|
||||
break;
|
||||
if(i > 20) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-zisofs: Unsupported block size (allowed 32k, 64k, 128k, ... 1024k)");
|
||||
goto sorry_ex;
|
||||
}
|
||||
xorriso->zisofs_v2_block_size= num;
|
||||
|
||||
} else if(strncmp(cpt, "default", l)==0) {
|
||||
xorriso->zlib_level= xorriso->zlib_level_default;
|
||||
xorriso->zisofs_block_size= xorriso->zisofs_block_size_default;
|
||||
xorriso->zisofs_by_magic= 0;
|
||||
xorriso->zisofs_v2_enabled= 0;
|
||||
xorriso->zisofs_max_total_blocks= xorriso->zisofs_max_total_blocks_default;
|
||||
xorriso->zisofs_max_file_blocks= xorriso->zisofs_max_file_blocks_default;
|
||||
xorriso->zisofs_v2_block_size= xorriso->zisofs_v2_block_size_default;
|
||||
|
||||
} else {
|
||||
unknown_mode:;
|
||||
@ -2315,6 +2386,10 @@ sorry_ex:
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
xorriso->zlib_level= was_level;
|
||||
xorriso->zisofs_block_size= was_blocksize;
|
||||
xorriso->zisofs_v2_enabled= was_v2_enabled;
|
||||
xorriso->zisofs_max_total_blocks= was_max_total_blocks;
|
||||
xorriso->zisofs_max_file_blocks= was_max_file_blocks;
|
||||
xorriso->zisofs_v2_block_size= was_blocksize_v2;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user