|
|
|
@ -1527,6 +1527,31 @@ struct elto_img_par {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* @param ptype 0= unknown, 1= gpt-basdat, 2=gpt-hfsplus, 3=EFI
|
|
|
|
|
@param flag bit0= isohybrid
|
|
|
|
|
*/
|
|
|
|
|
static int Xorriso_register_eltorito_gpt(struct XorrisO *xorriso,
|
|
|
|
|
struct elto_img_par *et_img,
|
|
|
|
|
int ptype,
|
|
|
|
|
int *efi_boot_part, int *first_efi,
|
|
|
|
|
int flag)
|
|
|
|
|
{
|
|
|
|
|
if(flag & 1) {
|
|
|
|
|
if(ptype == 1 || ptype == 3)
|
|
|
|
|
et_img->do_gpt_basdat= 1;
|
|
|
|
|
else if(ptype == 2)
|
|
|
|
|
et_img->do_gpt_hfsplus= 1;
|
|
|
|
|
return(1);
|
|
|
|
|
} else if(*first_efi && et_img->platform_id == 0xef) {
|
|
|
|
|
*efi_boot_part= 1;
|
|
|
|
|
return(1);
|
|
|
|
|
}
|
|
|
|
|
if(et_img->platform_id == 0xef)
|
|
|
|
|
*first_efi= 0;
|
|
|
|
|
return(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* @param ptype 0= unknown, 1= gpt-basdat, 2=gpt-hfsplus, 3=EFI
|
|
|
|
|
@param flag bit0= isohybrid
|
|
|
|
|
*/
|
|
|
|
@ -1536,23 +1561,15 @@ static int Xorriso_search_eltorito_path(struct XorrisO *xorriso,
|
|
|
|
|
int *found, int *efi_boot_part,
|
|
|
|
|
int flag)
|
|
|
|
|
{
|
|
|
|
|
int first_efi= 1, et_idx;
|
|
|
|
|
int first_efi= 1, et_idx, ret;
|
|
|
|
|
|
|
|
|
|
for(et_idx= 0; et_idx < elto_count; et_idx++) {
|
|
|
|
|
if(strcmp(et_imgs[et_idx].path, path) != 0)
|
|
|
|
|
continue;
|
|
|
|
|
if(flag & 1) {
|
|
|
|
|
if(ptype == 1 || ptype == 3)
|
|
|
|
|
et_imgs[et_idx].do_gpt_basdat= 1;
|
|
|
|
|
else if(ptype == 2)
|
|
|
|
|
et_imgs[et_idx].do_gpt_hfsplus= 1;
|
|
|
|
|
break;
|
|
|
|
|
} else if(first_efi && et_imgs[et_idx].platform_id == 0xef) {
|
|
|
|
|
*efi_boot_part= 1;
|
|
|
|
|
ret= Xorriso_register_eltorito_gpt(xorriso, et_imgs + et_idx,
|
|
|
|
|
ptype, efi_boot_part, &first_efi, flag);
|
|
|
|
|
if(ret > 0)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if(et_imgs[et_idx].platform_id == 0xef)
|
|
|
|
|
first_efi= 0;
|
|
|
|
|
}
|
|
|
|
|
*found= et_idx;
|
|
|
|
|
if(et_idx < elto_count)
|
|
|
|
@ -1561,7 +1578,51 @@ static int Xorriso_search_eltorito_path(struct XorrisO *xorriso,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int Xorriso_search_eltorito_lba(struct XorrisO *xorriso,
|
|
|
|
|
struct elto_img_par *et_imgs,
|
|
|
|
|
int elto_count,
|
|
|
|
|
unsigned int lba,
|
|
|
|
|
int *found, int flag)
|
|
|
|
|
{
|
|
|
|
|
int et_idx;
|
|
|
|
|
|
|
|
|
|
for(et_idx= 0; et_idx < elto_count; et_idx++)
|
|
|
|
|
if(et_imgs[et_idx].lba == lba)
|
|
|
|
|
break;
|
|
|
|
|
*found= et_idx;
|
|
|
|
|
if(et_idx < elto_count)
|
|
|
|
|
return(1);
|
|
|
|
|
return(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Xorriso_highest_data_block(struct XorrisO *xorriso, uint32_t *high_block,
|
|
|
|
|
int flag)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
struct FindjoB *job= NULL;
|
|
|
|
|
struct stat dir_stbuf;
|
|
|
|
|
|
|
|
|
|
*high_block= 0;
|
|
|
|
|
ret= Findjob_new(&job, "/", 0);
|
|
|
|
|
if(ret <= 0) {
|
|
|
|
|
Xorriso_no_findjob(xorriso, "[internal:last_data_file_block]", 0);
|
|
|
|
|
{ret= -1; goto ex;}
|
|
|
|
|
}
|
|
|
|
|
Findjob_set_action_type(job, 58, 0, 0);
|
|
|
|
|
ret= Xorriso_findi(xorriso, job, NULL, (off_t) 0,
|
|
|
|
|
NULL, "/", &dir_stbuf, 0, 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
Findjob_get_last_data_file_block(job, high_block, 0);
|
|
|
|
|
ex:;
|
|
|
|
|
Findjob_destroy(&job, 0);
|
|
|
|
|
return(ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* @param flag bit0= do not record but only count
|
|
|
|
|
bit1= as_mkisofs
|
|
|
|
|
*/
|
|
|
|
|
static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
char **et_lines, int et_line_count,
|
|
|
|
@ -1569,14 +1630,15 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
char **cmds, int *cmd_count, int flag)
|
|
|
|
|
{
|
|
|
|
|
int ret= 0, i, num_count, mkisofs, line_count, idx, et_idx, isohybrid= 0;
|
|
|
|
|
int ptype, gpt_idx, j, pad;
|
|
|
|
|
int efi_boot_part= 0, full_sparc_part= 0, have_sparc_part= 0;
|
|
|
|
|
int ptype, gpt_idx, j, pad, mbr_idx;
|
|
|
|
|
int efi_boot_part= 0, full_sparc_part= 0, have_sparc_part= 0, fe_dummy= 1;
|
|
|
|
|
int appended_as_gpt= 0, have_prep= 0, did_sysarea= 0, cared_for_apm= 0;
|
|
|
|
|
int cared_for_sparc= 0, have_hfsplus= 0;
|
|
|
|
|
int have_sysarea= 0, ptable_killer, imported_iso, have_alpha_ldr_path= 0;
|
|
|
|
|
int have_protective_msdos= 0;
|
|
|
|
|
int have_protective_msdos= 0, appended_partition= 0, part_like_isohybrid= 0;
|
|
|
|
|
unsigned long int sa_options= 0, partno, id_tag, perms, start_cyl, num_blocks;
|
|
|
|
|
unsigned long int part_status, part_type, start_block;
|
|
|
|
|
uint32_t high_block= 0;
|
|
|
|
|
char name[24], *textpt, *contentpt, *buf= NULL;
|
|
|
|
|
char **lines= NULL;
|
|
|
|
|
double num[8];
|
|
|
|
@ -1595,14 +1657,18 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
uint64_t start_block;
|
|
|
|
|
uint64_t block_count;
|
|
|
|
|
int appended;
|
|
|
|
|
int has_path;
|
|
|
|
|
};
|
|
|
|
|
struct mbr_par *mbrpts= NULL;
|
|
|
|
|
int mbr_count= 0;
|
|
|
|
|
|
|
|
|
|
struct gpt_par {
|
|
|
|
|
int ptype; /* 0= unknown, 1= gpt-basdat, 2=gpt-hfsplus, 3=EFI */
|
|
|
|
|
int is_gap;
|
|
|
|
|
int has_path;
|
|
|
|
|
char *path;
|
|
|
|
|
uint64_t start_block;
|
|
|
|
|
uint64_t block_count;
|
|
|
|
|
};
|
|
|
|
|
struct gpt_par *gpts= NULL;
|
|
|
|
|
int gpt_count= 0;
|
|
|
|
@ -1672,6 +1738,12 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret= Xorriso_highest_data_block(xorriso, &high_block, 0);
|
|
|
|
|
if(ret < 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
if(ret == 0)
|
|
|
|
|
high_block = img_blocks - 1;
|
|
|
|
|
|
|
|
|
|
if(elto_count > 0) {
|
|
|
|
|
Xorriso_alloc_meM(et_imgs, struct elto_img_par, elto_count);
|
|
|
|
|
for(et_idx= 0; et_idx < elto_count; et_idx++) {
|
|
|
|
@ -1812,6 +1884,10 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
if(num_blocks > 0 && start_block + num_blocks > mbr_parts_end)
|
|
|
|
|
mbr_parts_end= start_block + num_blocks;
|
|
|
|
|
|
|
|
|
|
} else if(strcmp(name, "MBR partition path :") == 0) {
|
|
|
|
|
idx= num[0] - 1;
|
|
|
|
|
mbrpts[idx].has_path= 1;
|
|
|
|
|
|
|
|
|
|
} else if(strcmp(name, "GPT type GUID :") == 0) {
|
|
|
|
|
idx= num[0] - 1;
|
|
|
|
|
if(strcmp(textpt, "a2a0d0ebe5b9334487c068b6b72699c7") == 0)
|
|
|
|
@ -1827,14 +1903,19 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
idx= num[0] - 1;
|
|
|
|
|
if(img_blocks <= num[1] && num[2] > 0)
|
|
|
|
|
appended_as_gpt= 1;
|
|
|
|
|
|
|
|
|
|
/* >>> ??? can there be independent partitions inside the image ? */;
|
|
|
|
|
gpts[idx].start_block= num[1];
|
|
|
|
|
gpts[idx].block_count= num[2];
|
|
|
|
|
|
|
|
|
|
} else if(strcmp(name, "GPT partition path :") == 0) {
|
|
|
|
|
idx= num[0] - 1;
|
|
|
|
|
gpts[idx].has_path= 1;
|
|
|
|
|
gpts[idx].path= textpt;
|
|
|
|
|
|
|
|
|
|
} else if(strcmp(name, "GPT partition name :") == 0) {
|
|
|
|
|
idx= num[0] - 1;
|
|
|
|
|
if(strstr(contentpt, " 470061007000") != NULL) /* "Gap"... */
|
|
|
|
|
gpts[idx].is_gap= 1;
|
|
|
|
|
|
|
|
|
|
} else if(strcmp(name, "APM partition name :") == 0) {
|
|
|
|
|
idx= num[0] - 1;
|
|
|
|
|
if(strcmp(textpt, "HFSPLUS_Hybrid") == 0)
|
|
|
|
@ -1855,6 +1936,9 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!have_protective_msdos)
|
|
|
|
|
appended_as_gpt= 0;
|
|
|
|
|
|
|
|
|
|
/* Second pass: scan for System Area info */
|
|
|
|
|
for(i= 0; i < line_count; i++) {
|
|
|
|
|
buf[0]= 0;
|
|
|
|
@ -1953,6 +2037,7 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
imported_iso);
|
|
|
|
|
if(partno >= 1 && (int) partno <= mbr_count)
|
|
|
|
|
mbrpts[partno - 1].appended= 1;
|
|
|
|
|
appended_partition= 1;
|
|
|
|
|
}
|
|
|
|
|
} else if(part_type == 0x41 && have_prep) {
|
|
|
|
|
if(mkisofs) {
|
|
|
|
@ -2041,19 +2126,49 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
part_type= 0xef;
|
|
|
|
|
else
|
|
|
|
|
part_type= 0xcd;
|
|
|
|
|
if(img_blocks <= num[1] && num[2] > 0) {
|
|
|
|
|
if(appended_as_gpt == 1) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-appended_part_as_gpt");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image any appended_part_as=gpt");
|
|
|
|
|
Xorriso_record_cmd_linE
|
|
|
|
|
appended_as_gpt= 2;
|
|
|
|
|
|
|
|
|
|
if(high_block < num[1] && num[2] > 0 && !gpts[idx].is_gap) {
|
|
|
|
|
for(mbr_idx = 0; mbr_idx < mbr_count; mbr_idx++) {
|
|
|
|
|
if(mbrpts[mbr_idx].start_block == num[1] &&
|
|
|
|
|
mbrpts[mbr_idx].block_count == num[2])
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if(mbr_idx >= mbr_count) {
|
|
|
|
|
if(appended_as_gpt == 1) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-appended_part_as_gpt");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image any appended_part_as=gpt");
|
|
|
|
|
Xorriso_record_cmd_linE
|
|
|
|
|
appended_as_gpt= 2;
|
|
|
|
|
}
|
|
|
|
|
sprintf(buf, "-append_partition %d 0x%lx ", idx + 1, part_type);
|
|
|
|
|
Xorriso_add_intvl_adr(xorriso, buf, (uint64_t) num[1],
|
|
|
|
|
(uint64_t) (num[1] + num[2] - 1.0), "d",
|
|
|
|
|
imported_iso);
|
|
|
|
|
appended_partition= 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret= Xorriso_search_eltorito_lba(xorriso, et_imgs, elto_count,
|
|
|
|
|
(unsigned int) (num[1] / 4.0),
|
|
|
|
|
&et_idx, 0);
|
|
|
|
|
if(ret > 0) {
|
|
|
|
|
if(!(et_imgs[et_idx].do_gpt_basdat ||
|
|
|
|
|
et_imgs[et_idx].do_gpt_hfsplus ||
|
|
|
|
|
part_like_isohybrid)) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-part_like_isohybrid");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image any part_like_isohybrid=on");
|
|
|
|
|
Xorriso_record_cmd_linE
|
|
|
|
|
buf[0]= 0;
|
|
|
|
|
part_like_isohybrid= 1;
|
|
|
|
|
}
|
|
|
|
|
/* mark el torito for -isohybrid-gpt-... */
|
|
|
|
|
Xorriso_register_eltorito_gpt(xorriso, et_imgs + et_idx,
|
|
|
|
|
gpts[idx].ptype, &efi_boot_part,
|
|
|
|
|
&fe_dummy, 1);
|
|
|
|
|
}
|
|
|
|
|
sprintf(buf, "-append_partition %d 0x%lx ", idx + 1, part_type);
|
|
|
|
|
Xorriso_add_intvl_adr(xorriso, buf, (uint64_t) num[1],
|
|
|
|
|
(uint64_t) (num[1] + num[2] - 1.0), "d",
|
|
|
|
|
imported_iso);
|
|
|
|
|
|
|
|
|
|
} else if(gpts[idx].ptype == 3 && gpts[idx].has_path == 0 &&
|
|
|
|
|
img_blocks >= num[1] + num[2] && !efi_boot_part) {
|
|
|
|
@ -2312,45 +2427,58 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
sprintf(buf, "-boot_image any next");
|
|
|
|
|
Xorriso_record_cmd_linE
|
|
|
|
|
}
|
|
|
|
|
if(et_imgs[idx].platform_id == 0) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-b ");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image %s bin_path=", et_imgs[idx].boot_image_type);
|
|
|
|
|
} else if(et_imgs[idx].platform_id == 0xef) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-e ");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image %s efi_path=", et_imgs[idx].boot_image_type);
|
|
|
|
|
} else {
|
|
|
|
|
if(mkisofs && !(flag & 1)) {
|
|
|
|
|
sprintf(xorriso->info_text,
|
|
|
|
|
"Cannot enable EL Torito boot image #%d because Platform Id 0x%2.2x cannot be expressed in mkisofs emulation",
|
|
|
|
|
idx + 1, et_imgs[idx].platform_id);
|
|
|
|
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(et_imgs[idx].path[0] == 0) {
|
|
|
|
|
|
|
|
|
|
/* >>> need way to eploit El Torito img blks : */;
|
|
|
|
|
|
|
|
|
|
/* Check whether appended partition */;
|
|
|
|
|
for(i= 0; i < mbr_count; i++)
|
|
|
|
|
if(mbrpts[i].appended &&
|
|
|
|
|
if((mbrpts[i].appended || !mbrpts[i].has_path) &&
|
|
|
|
|
mbrpts[i].start_block == ((uint64_t) et_imgs[idx].lba) * 4 &&
|
|
|
|
|
(mbrpts[i].block_count == (uint64_t) et_imgs[idx].ldsiz ||
|
|
|
|
|
et_imgs[idx].ldsiz == 0 || et_imgs[idx].ldsiz == 1))
|
|
|
|
|
break;
|
|
|
|
|
if (i < mbr_count) {
|
|
|
|
|
if(!mbrpts[i].appended) {
|
|
|
|
|
mbrpts[i].appended= 1;
|
|
|
|
|
if(!appended_as_gpt) {
|
|
|
|
|
sprintf(buf, "-append_partition %lu 0x%lx ", (unsigned long) i + 1,
|
|
|
|
|
(unsigned long) mbrpts[i].ptype);
|
|
|
|
|
Xorriso_add_intvl_adr(xorriso, buf,
|
|
|
|
|
(uint64_t) mbrpts[i].start_block,
|
|
|
|
|
((uint64_t) mbrpts[i].start_block) +
|
|
|
|
|
mbrpts[i].block_count - 1,
|
|
|
|
|
"d", imported_iso);
|
|
|
|
|
Xorriso_record_cmd_linE
|
|
|
|
|
appended_partition= 1;
|
|
|
|
|
buf[0]= 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sprintf(app_pseudo_paths[idx],
|
|
|
|
|
"--interval:appended_partition_%d_start_%lus_size_%lud:all::",
|
|
|
|
|
i + 1,
|
|
|
|
|
(unsigned long) et_imgs[idx].lba,
|
|
|
|
|
(unsigned long) mbrpts[i].block_count);
|
|
|
|
|
et_imgs[idx].path= app_pseudo_paths[idx];
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
if (et_imgs[idx].path[0] == 0) {
|
|
|
|
|
for(i= 0; i < gpt_count; i++) {
|
|
|
|
|
if(have_protective_msdos && (
|
|
|
|
|
gpts[i].start_block == ((uint64_t) et_imgs[idx].lba) * 4 &&
|
|
|
|
|
(gpts[i].block_count == (uint64_t) et_imgs[idx].ldsiz ||
|
|
|
|
|
et_imgs[idx].ldsiz == 0 || et_imgs[idx].ldsiz == 1)))
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (i < gpt_count) {
|
|
|
|
|
sprintf(app_pseudo_paths[idx],
|
|
|
|
|
"--interval:appended_partition_%d_start_%lus_size_%lud:all::",
|
|
|
|
|
i + 1,
|
|
|
|
|
(unsigned long) et_imgs[idx].lba,
|
|
|
|
|
(unsigned long) gpts[i].block_count);
|
|
|
|
|
et_imgs[idx].path= app_pseudo_paths[idx];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (et_imgs[idx].path[0] == 0) {
|
|
|
|
|
if(!(flag & 1)) {
|
|
|
|
|
sprintf(xorriso->info_text,
|
|
|
|
|
"Cannot enable EL Torito boot image #%d because it is not a data file in the ISO filesystem",
|
|
|
|
@ -2358,6 +2486,25 @@ static int Xorriso_scan_report_lines(struct XorrisO *xorriso,
|
|
|
|
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
|
|
|
|
}
|
|
|
|
|
buf[0]= 0;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(et_imgs[idx].platform_id == 0) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-b ");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image %s bin_path=", et_imgs[idx].boot_image_type);
|
|
|
|
|
} else if(et_imgs[idx].platform_id == 0xef) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-e ");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-boot_image %s efi_path=", et_imgs[idx].boot_image_type);
|
|
|
|
|
} else {
|
|
|
|
|
if(mkisofs && !(flag & 1)) {
|
|
|
|
|
sprintf(xorriso->info_text,
|
|
|
|
|
"Cannot enable EL Torito boot image #%d because Platform Id 0x%2.2x cannot be expressed in mkisofs emulation",
|
|
|
|
|
idx + 1, et_imgs[idx].platform_id);
|
|
|
|
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -2453,6 +2600,14 @@ after_el_torito:
|
|
|
|
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(appended_partition) {
|
|
|
|
|
if(mkisofs)
|
|
|
|
|
sprintf(buf, "-no-pad");
|
|
|
|
|
else
|
|
|
|
|
sprintf(buf, "-padding 0");
|
|
|
|
|
Xorriso_record_cmd_linE
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret= 1;
|
|
|
|
|
ex:
|
|
|
|
|
xorriso->show_hfs_cmds= NULL;
|
|
|
|
|