|
|
|
@ -9953,6 +9953,17 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
|
|
|
|
internal_filter= 1; |
|
|
|
|
} else if(strcmp(filter_name, "--zisofs-decode") == 0) { |
|
|
|
|
internal_filter= 2; |
|
|
|
|
} else if(strcmp(filter_name, "--gzip") == 0) { |
|
|
|
|
internal_filter= 3; |
|
|
|
|
suffix= ".gz"; |
|
|
|
|
strip_suffix= 0; |
|
|
|
|
explicit_suffix= 1; |
|
|
|
|
} else if(strcmp(filter_name, "--gunzip") == 0 || |
|
|
|
|
strcmp(filter_name, "--gzip-decode") == 0) { |
|
|
|
|
internal_filter= 4; |
|
|
|
|
suffix= ".gz"; |
|
|
|
|
strip_suffix= 1; |
|
|
|
|
explicit_suffix= 1; |
|
|
|
|
} else { |
|
|
|
|
ret= Xorriso_lookup_extf(xorriso, filter_name, &found_lst, 0); |
|
|
|
|
if(ret < 0) |
|
|
|
@ -9985,19 +9996,29 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
|
|
|
|
while(1) { |
|
|
|
|
if(!explicit_suffix) { |
|
|
|
|
stream= iso_file_get_stream(file); |
|
|
|
|
ret= iso_stream_get_external_filter(stream, &cmd, 0); |
|
|
|
|
if(ret > 0) { |
|
|
|
|
if(cmd->suffix[0]) { |
|
|
|
|
|
|
|
|
|
/* >>> would need the current renaming state of path */; |
|
|
|
|
|
|
|
|
|
ret= Xorriso_rename_suffix(xorriso, node, cmd->suffix, NULL, |
|
|
|
|
new_name, |
|
|
|
|
(flag & 1) | (!(cmd->behavior & 8) << 1)); |
|
|
|
|
if(ret <= 0 || ret == 2) |
|
|
|
|
goto ex; |
|
|
|
|
if(strncmp(stream->class->type, "gzip", 4) == 0) { |
|
|
|
|
suffix= ".gz"; |
|
|
|
|
strip_suffix= 1; |
|
|
|
|
} else if(strncmp(stream->class->type, "pizg", 4) == 0) { |
|
|
|
|
suffix= ".gz"; |
|
|
|
|
strip_suffix= 0; |
|
|
|
|
} else { |
|
|
|
|
ret= iso_stream_get_external_filter(stream, &cmd, 0); |
|
|
|
|
if(ret > 0) { |
|
|
|
|
suffix= cmd->suffix; |
|
|
|
|
strip_suffix= !(cmd->behavior & 8); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(suffix[0]) { |
|
|
|
|
|
|
|
|
|
/* >>> would need the current renaming state of path */; |
|
|
|
|
|
|
|
|
|
ret= Xorriso_rename_suffix(xorriso, node, suffix, NULL, new_name, |
|
|
|
|
(flag & 1) | (strip_suffix << 1)); |
|
|
|
|
if(ret <= 0 || ret == 2) |
|
|
|
|
goto ex; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
ret= iso_file_remove_filter(file, 0); |
|
|
|
|
if(ret != 1) |
|
|
|
@ -10012,6 +10033,14 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
|
|
|
|
Xorriso_report_iso_error(xorriso, "", filter_ret, |
|
|
|
|
"Error when setting filter to ISO node", 0, "FAILURE", 1); |
|
|
|
|
} |
|
|
|
|
} else if (internal_filter == 3 || internal_filter == 4) { |
|
|
|
|
filter_ret = iso_file_add_gzip_filter(file, |
|
|
|
|
1 | ((internal_filter == 4) << 1)); |
|
|
|
|
if(filter_ret < 0) { |
|
|
|
|
Xorriso_process_msg_queues(xorriso,0); |
|
|
|
|
Xorriso_report_iso_error(xorriso, "", filter_ret, |
|
|
|
|
"Error when setting filter to ISO node", 0, "FAILURE", 1); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
#ifndef Xorriso_allow_extf_suiD |
|
|
|
@ -10288,6 +10317,10 @@ int Xorriso_stream_type(struct XorrisO *xorriso, IsoNode *node,
|
|
|
|
|
strcpy(type_text, "--zisofs"); |
|
|
|
|
} else if(strcmp(text, "osiz") == 0) { |
|
|
|
|
strcpy(type_text, "--zisofs-decode"); |
|
|
|
|
} else if(strcmp(text, "gzip") == 0) { |
|
|
|
|
strcpy(type_text, "--gzip"); |
|
|
|
|
} else if(strcmp(text, "pizg") == 0) { |
|
|
|
|
strcpy(type_text, "--gunzip"); |
|
|
|
|
} else if(strcmp(text, "cout") == 0 || strcmp(text, "boot") == 0 || |
|
|
|
|
strcmp(text, "user") == 0 || strcmp(text, "extf") == 0) { |
|
|
|
|
strcpy(type_text, text); |
|
|
|
@ -10394,20 +10427,25 @@ int Xorriso_status_zisofs(struct XorrisO *xorriso, char *filter, FILE *fp,
|
|
|
|
|
*/
|
|
|
|
|
{ |
|
|
|
|
off_t ziso_count= 0, osiz_count= 0; |
|
|
|
|
off_t gzip_count= 0, gunzip_count= 0; |
|
|
|
|
|
|
|
|
|
iso_zisofs_get_refcounts(&ziso_count, &osiz_count, 0); |
|
|
|
|
iso_gzip_get_refcounts(&gzip_count, &gunzip_count, 0); |
|
|
|
|
if((flag & 1) && xorriso->zlib_level == xorriso->zlib_level_default && |
|
|
|
|
xorriso->zisofs_block_size == xorriso->zisofs_block_size_default && |
|
|
|
|
xorriso->zisofs_by_magic == 0 && |
|
|
|
|
ziso_count == 0 && osiz_count == 0 && |
|
|
|
|
gzip_count == 0 && gunzip_count == 0 && |
|
|
|
|
filter[0] == 0) |
|
|
|
|
return 2; |
|
|
|
|
sprintf(xorriso->result_line, |
|
|
|
|
"-zisofs level=%d:block_size=%dk:by_magic=%s:ziso_used=%.f:osiz_used=%.f\n", |
|
|
|
|
xorriso->zlib_level, xorriso->zisofs_block_size / 1024, |
|
|
|
|
xorriso->zisofs_by_magic ? "on" : "off", |
|
|
|
|
(double) ziso_count, (double) osiz_count); |
|
|
|
|
|
|
|
|
|
"-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", |
|
|
|
|
(double) gzip_count, (double) gunzip_count); |
|
|
|
|
Xorriso_status_result(xorriso, filter, fp, flag&2); |
|
|
|
|
return(1); |
|
|
|
|
} |
|
|
|
|