|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|