In case of ISO_ZISOFS_TOO_MANY_PTR remove all dispensable block pointers
This commit is contained in:
@ -378,6 +378,25 @@ int Xorriso_set_filter(struct XorrisO *xorriso, void *in_node,
|
||||
filter_ret= 1;
|
||||
} else if (internal_filter == 1 || internal_filter == 2) {
|
||||
filter_ret = iso_file_add_zisofs_filter(file, 1 | (internal_filter & 2));
|
||||
if(filter_ret == (int) ISO_ZISOFS_TOO_MANY_PTR) {
|
||||
/* Remove all buffered currently unused block pointers and try again */
|
||||
ret= Xorriso_get_volume(xorriso, &volume, 0);
|
||||
if(ret < 0)
|
||||
goto ex;
|
||||
if(ret > 0) {
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"Overflow of zisofs block pointers happened.",
|
||||
0, "WARNING", 0);
|
||||
Xorriso_msgs_submit(xorriso, 0,
|
||||
"zisofs falling back to mode which needs 3 input read runs.",
|
||||
0, "WARNING", 0);
|
||||
ret = iso_image_zisofs_discard_bpt(volume, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
filter_ret = iso_file_add_zisofs_filter(file,
|
||||
1 | (internal_filter & 2));
|
||||
}
|
||||
}
|
||||
if(filter_ret < 0) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
if(!(internal_filter == 2 && filter_ret == (int) ISO_ZISOFS_WRONG_INPUT))
|
||||
|
Reference in New Issue
Block a user