New -osirrox option sparse= controls extraction into sparse files
This commit is contained in:
@ -147,8 +147,11 @@ int Xorriso_option_paste_in(struct XorrisO *xorriso, char *iso_rr_path,
|
||||
(double) startbyte, (double) (startbyte+bytecount));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
||||
|
||||
Xorriso_pacifier_reset(xorriso, 0);
|
||||
ret= Xorriso_paste_in(xorriso, disk_path, startbyte, bytecount,
|
||||
iso_rr_path, 0);
|
||||
Xorriso_pacifier_callback(xorriso, "files restored",xorriso->pacifier_count,
|
||||
xorriso->pacifier_total, "", 1 | 4 | 8 | 32);
|
||||
return(ret);
|
||||
}
|
||||
|
||||
@ -2245,19 +2248,6 @@ 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)
|
||||
{
|
||||
@ -2307,7 +2297,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
/* (ignored info from -status) */;
|
||||
|
||||
} else if(strncmp(cpt, "block_size=", 11)==0) {
|
||||
parse_zisofs_param(cpt, 11, l, &num);
|
||||
Xorriso__parse_size_param(cpt, 11, l, &num);
|
||||
if (num != (1 << 15) && num != (1 << 16) && num != (1 << 17)) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-zisofs: Unsupported block size (allowed 32k, 64k, 128k)");
|
||||
@ -2342,7 +2332,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
}
|
||||
|
||||
} else if(strncmp(cpt, "max_bpt=", 8) == 0) {
|
||||
parse_zisofs_param(cpt, 8, l, &num);
|
||||
Xorriso__parse_size_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)");
|
||||
@ -2357,7 +2347,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
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);
|
||||
Xorriso__parse_size_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)");
|
||||
@ -2368,7 +2358,7 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
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);
|
||||
Xorriso__parse_size_param(cpt, 14, l, &num);
|
||||
for(i= 15 ; i <= 20; i++)
|
||||
if(num == (1 << i))
|
||||
break;
|
||||
@ -2380,11 +2370,11 @@ int Xorriso_option_zisofs(struct XorrisO *xorriso, char *mode, int flag)
|
||||
xorriso->zisofs_v2_block_size= num;
|
||||
|
||||
} else if(strncmp(cpt, "bpt_target=", 11) == 0) {
|
||||
parse_zisofs_param(cpt, 11, l, &num);
|
||||
Xorriso__parse_size_param(cpt, 11, l, &num);
|
||||
xorriso->zisofs_block_number_target= num;
|
||||
|
||||
} else if(strncmp(cpt, "bpt_free_ratio=", 15) == 0) {
|
||||
parse_zisofs_param(cpt, 15, l, &num);
|
||||
Xorriso__parse_size_param(cpt, 15, l, &num);
|
||||
/* 0 means to libisofs "do not change" */
|
||||
if(num == 0.0)
|
||||
num= -1.0;
|
||||
|
Reference in New Issue
Block a user