New -zisofs parameters version_2=, block_size_v2=, max_bpt=, max_bpt_f=

This commit is contained in:
2020-10-14 22:59:35 +02:00
parent 9a7dfd7721
commit dcb13954bd
11 changed files with 349 additions and 6026 deletions

View File

@ -1,7 +1,7 @@
/* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images.
Copyright 2007-2014 Thomas Schmitt, <scdbackup@gmx.net>
Copyright 2007-2020 Thomas Schmitt, <scdbackup@gmx.net>
Provided under GPL version 2 or later.
@ -659,10 +659,12 @@ int Xorriso_status_extf(struct XorrisO *xorriso, char *filter, FILE *fp,
int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag)
{
int ret;
int ret, i;
struct iso_zisofs_ctrl ctrl;
ctrl.version= 0;
memset(&ctrl, 0, sizeof(ctrl));
ctrl.version= 1;
ctrl.compression_level= xorriso->zlib_level;
if(xorriso->zisofs_block_size == (1 << 16))
ctrl.block_size_log2= 16;
@ -670,6 +672,15 @@ int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag)
ctrl.block_size_log2= 17;
else
ctrl.block_size_log2= 15;
ctrl.v2_enabled= xorriso->zisofs_v2_enabled;
ctrl.max_total_blocks= xorriso->zisofs_max_total_blocks;
ctrl.max_file_blocks= xorriso->zisofs_max_file_blocks;
ctrl.v2_block_size_log2= 17;
for(i= 15; i <= 17; i++)
if(xorriso->zisofs_v2_block_size == (1 << i))
ctrl.v2_block_size_log2= i;
ret= iso_zisofs_set_params(&ctrl, 0);
Xorriso_process_msg_queues(xorriso,0);
if(ret < 0) {
@ -681,21 +692,48 @@ int Xorriso_set_zisofs_params(struct XorrisO *xorriso, int flag)
}
uint64_t Xorriso_zisofs_current_blocks(struct XorrisO *xorriso, int flag)
{
int ret;
struct iso_zisofs_ctrl ctrl;
memset(&ctrl, 0, sizeof(ctrl));
ctrl.version= 1;
ret = iso_zisofs_get_params(&ctrl, 0);
if(ret != 1)
return(0);
return(ctrl.current_total_blocks);
}
int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
int flag)
/*
bit0= do only report non-default settings
bit1= do only report to fp
bit0= only report non-default settings
bit1= only report to fp
*/
{
off_t ziso_count= 0, osiz_count= 0;
off_t gzip_count= 0, gunzip_count= 0;
uint64_t used_blocks;
int always= 0;
iso_zisofs_get_refcounts(&ziso_count, &osiz_count, 0);
iso_gzip_get_refcounts(&gzip_count, &gunzip_count, 0);
if(!(flag & 1)) {
always= 1;
} else if(filter != NULL) {
if(filter[0] != 0)
always= 1;
}
#ifdef NIX
if((flag & 1) && xorriso->zlib_level == xorriso->zlib_level_default &&
xorriso->zisofs_block_size == xorriso->zisofs_block_size_default &&
xorriso->zisofs_by_magic == 0 &&
xorriso->zisofs_by_magic == 0 && xorriso->zisofs_v2_enabled == 0 &&
xorriso->zisofs_max_file_blocks ==
xorriso->zisofs_max_file_blocks_default &&
xorriso->zisofs_v2_block_size == xorriso->zisofs_v2_block_size_default &&
ziso_count == 0 && osiz_count == 0 &&
gzip_count == 0 && gunzip_count == 0) {
if(filter == NULL)
@ -703,15 +741,52 @@ int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
if(filter[0] == 0)
return 2;
}
sprintf(xorriso->result_line,
"-zisofs level=%d:block_size=%dk:by_magic=%s:ziso_used=%.f:osiz_used=%.f",
xorriso->zlib_level, xorriso->zisofs_block_size / 1024,
xorriso->zisofs_by_magic ? "on" : "off",
(double) ziso_count, (double) osiz_count);
sprintf(xorriso->result_line + strlen(xorriso->result_line),
":gzip_used=%.f:gunzip_used=%.f\n",
#endif
if(always || !(
xorriso->zlib_level == xorriso->zlib_level_default &&
xorriso->zisofs_block_size == xorriso->zisofs_block_size_default &&
xorriso->zisofs_by_magic == 0)) {
sprintf(xorriso->result_line,
"-zisofs level=%d:block_size=%dk:by_magic=%s\n",
xorriso->zlib_level, xorriso->zisofs_block_size / 1024,
xorriso->zisofs_by_magic ? "on" : "off");
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
if(always || !(
xorriso->zisofs_v2_enabled == 0 &&
xorriso->zisofs_v2_block_size == xorriso->zisofs_v2_block_size_default)){
sprintf(xorriso->result_line,
"-zisofs version_2=%s:block_size_v2=%dk\n",
xorriso->zisofs_v2_enabled ? xorriso->zisofs_v2_enabled == 1 ?
"as_needed" : "on" : "off",
xorriso->zisofs_v2_block_size / 1024);
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
used_blocks= Xorriso_zisofs_current_blocks(xorriso, 0);
if(always || !(
xorriso->zisofs_max_total_blocks ==
xorriso->zisofs_max_total_blocks_default &&
xorriso->zisofs_max_file_blocks ==
xorriso->zisofs_max_file_blocks_default &&
used_blocks == 0)) {
sprintf(xorriso->result_line,
"-zisofs max_bpt=%.f:bpt_used=%.f:max_bpt_f=%.f\n",
(double) xorriso->zisofs_max_total_blocks * 8.0,
(double) used_blocks * 8.0,
(double) xorriso->zisofs_max_file_blocks * 8.0);
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
if(always || !(
ziso_count == 0 && osiz_count == 0 &&
gzip_count == 0 && gunzip_count == 0)) {
sprintf(xorriso->result_line,
"-zisofs ziso_used=%.f:osiz_used=%.f:gzip_used=%.f:gunzip_used=%.f\n",
(double) ziso_count, (double) osiz_count,
(double) gzip_count, (double) gunzip_count);
Xorriso_status_result(xorriso, filter, fp, flag&2);
Xorriso_status_result(xorriso, filter, fp, flag & 2);
}
return(1);
}