New -find test -bad_outname, new -find action print_outname
This commit is contained in:
@ -741,15 +741,171 @@ int Xorriso_retry_write_session(struct XorrisO *xorriso, int flag)
|
||||
}
|
||||
|
||||
|
||||
int Xorriso_make_iso_write_opts(struct XorrisO *xorriso, IsoImage *image,
|
||||
struct isoburn_imgen_opts *sopts, int flag)
|
||||
{
|
||||
int ext, i, ret, pad_by_libisofs= 0, is_bootable= 0, relax;
|
||||
char *out_cs, *part_image;
|
||||
IsoNode *root_node;
|
||||
uint32_t padding;
|
||||
|
||||
relax= xorriso->relax_compliance;
|
||||
if(image != NULL)
|
||||
is_bootable= iso_image_get_boot_image(image, NULL, NULL, NULL);
|
||||
if(xorriso->patch_isolinux_image & 1) {
|
||||
if(is_bootable == 1)
|
||||
relax|= isoburn_igopt_allow_full_ascii;
|
||||
else if(xorriso->keep_boot_image && is_bootable == 1)
|
||||
relax|= isoburn_igopt_allow_full_ascii;
|
||||
}
|
||||
|
||||
out_cs= xorriso->out_charset;
|
||||
if(out_cs == NULL)
|
||||
Xorriso_get_local_charset(xorriso, &out_cs, 0);
|
||||
|
||||
isoburn_igopt_set_level(sopts, xorriso->iso_level);
|
||||
ext= ((!!xorriso->do_rockridge) * isoburn_igopt_rockridge) |
|
||||
((!!xorriso->do_joliet) * isoburn_igopt_joliet) |
|
||||
((!!xorriso->do_hfsplus) * isoburn_igopt_hfsplus) |
|
||||
((!!xorriso->do_fat) * isoburn_igopt_fat) |
|
||||
((!!xorriso->do_iso1999) * isoburn_igopt_iso1999) |
|
||||
(( !(xorriso->ino_behavior & 2)) * isoburn_igopt_hardlinks) |
|
||||
(( (!(xorriso->ino_behavior & 2)) ||
|
||||
(xorriso->do_aaip & (2 | 8 | 16 | 256)) ||
|
||||
(xorriso->do_md5 & (2 | 4)) ||
|
||||
xorriso->do_hfsplus
|
||||
) * isoburn_igopt_aaip) |
|
||||
((!!(xorriso->do_md5 & 2)) * isoburn_igopt_session_md5) |
|
||||
((!!(xorriso->do_md5 & 4)) * isoburn_igopt_file_md5) |
|
||||
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability) |
|
||||
((!!xorriso->do_old_empty) * isoburn_igopt_old_empty) |
|
||||
((flag & 1) * isoburn_igopt_will_cancel);
|
||||
if(xorriso->no_emul_toc & 1)
|
||||
ext|= isoburn_igopt_no_emul_toc;
|
||||
isoburn_igopt_set_extensions(sopts, ext);
|
||||
isoburn_igopt_set_relaxed(sopts, relax);
|
||||
ret = isoburn_igopt_set_rr_reloc(sopts, xorriso->rr_reloc_dir,
|
||||
xorriso->rr_reloc_flags);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
ret= isoburn_igopt_set_untranslated_name_len(sopts,
|
||||
xorriso->untranslated_name_len);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
isoburn_igopt_set_sort_files(sopts, 1);
|
||||
isoburn_igopt_set_over_mode(sopts, 0, 0, (mode_t) 0, (mode_t) 0);
|
||||
isoburn_igopt_set_over_ugid(sopts, 2 * !!xorriso->do_global_uid,
|
||||
2 * !!xorriso->do_global_gid,
|
||||
(uid_t) xorriso->global_uid,
|
||||
(gid_t) xorriso->global_gid);
|
||||
isoburn_igopt_set_out_charset(sopts, out_cs);
|
||||
isoburn_igopt_set_fifo_size(sopts, xorriso->fs * 2048);
|
||||
Ftimetxt(time(NULL), xorriso->scdbackup_tag_time, 8);
|
||||
isoburn_igopt_set_scdbackup_tag(sopts, xorriso->scdbackup_tag_name,
|
||||
xorriso->scdbackup_tag_time,
|
||||
xorriso->scdbackup_tag_written);
|
||||
if(xorriso->prep_partition[0]) {
|
||||
ret= isoburn_igopt_set_prep_partition(sopts, xorriso->prep_partition, 0);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
if(xorriso->efi_boot_partition[0]) {
|
||||
ret= isoburn_igopt_set_efi_bootp(sopts, xorriso->efi_boot_partition, 0);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
|
||||
if(xorriso->appended_partitions[i] == NULL)
|
||||
continue;
|
||||
if(xorriso->appended_partitions[i][0] == 0)
|
||||
continue;
|
||||
if(strcmp(xorriso->appended_partitions[i], ".") == 0)
|
||||
part_image= "";
|
||||
else
|
||||
part_image= xorriso->appended_partitions[i];
|
||||
isoburn_igopt_set_partition_img(sopts, i + 1,
|
||||
xorriso->appended_part_types[i], part_image);
|
||||
}
|
||||
isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label);
|
||||
isoburn_igopt_set_hfsp_serial_number(sopts, xorriso->hfsp_serial_number);
|
||||
isoburn_igopt_set_hfsp_block_size(sopts, xorriso->hfsp_block_size,
|
||||
xorriso->apm_block_size);
|
||||
isoburn_igopt_set_pvd_times(sopts,
|
||||
xorriso->vol_creation_time, xorriso->vol_modification_time,
|
||||
xorriso->vol_expiration_time, xorriso->vol_effective_time,
|
||||
xorriso->vol_uuid);
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
if(xorriso->libjte_handle && (xorriso->libjte_params_given & (4 | 8))) {
|
||||
|
||||
/* >>> Check whether the mandatory parameters are set */;
|
||||
|
||||
ret= libjte_set_outfile(xorriso->libjte_handle, xorriso->outdev);
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
isoburn_igopt_attach_jte(sopts, xorriso->libjte_handle);
|
||||
pad_by_libisofs= 1;
|
||||
}
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
if(xorriso->do_padding_by_libisofs || pad_by_libisofs) {
|
||||
/* Padding to be done by libisofs, not by libburn.
|
||||
*/
|
||||
padding= xorriso->padding / 2048;
|
||||
if((uint32_t) xorriso->padding > padding * 2048)
|
||||
padding++;
|
||||
/*
|
||||
fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n",
|
||||
(int) padding);
|
||||
*/
|
||||
isoburn_igopt_set_tail_blocks(sopts, padding);
|
||||
}
|
||||
|
||||
/* Make final abort check before starting expensive activities */
|
||||
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
|
||||
if(ret<0)
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
if(xorriso->zisofs_by_magic && image != NULL) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Checking disk file content for zisofs compression headers.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
|
||||
root_node= (IsoNode *) iso_image_get_root(image);
|
||||
ret= iso_node_zf_by_magic(root_node,
|
||||
(xorriso->out_drive_handle == xorriso->in_drive_handle) | 2 | 16);
|
||||
if(ret<0) {
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when examining file content for zisofs headers",
|
||||
0, "FAILURE", 1);
|
||||
}
|
||||
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
|
||||
if(ret<0)
|
||||
{ret= 0; goto ex;}
|
||||
sprintf(xorriso->info_text,
|
||||
"Check for zisofs compression headers done.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
|
||||
}
|
||||
|
||||
ret = isoburn_igopt_set_write_type(sopts, xorriso->do_tao);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
|
||||
ret= 1;
|
||||
ex:;
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
/* @param flag bit0= do not write but only prepare and return size in sectors
|
||||
@return <=0 error , 1= success
|
||||
2= failure with DVD-RW, please call Xorriso_retry_write_session()
|
||||
*/
|
||||
int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret, relax= 0, i, pacifier_speed= 0, data_lba, ext, is_bootable= 0;
|
||||
int freshly_bootable= 0, hide_attr, pad_by_libisofs= 0, signal_mode, role;
|
||||
char *xorriso_id= NULL, *img_id, *sfe= NULL, *out_cs, *part_image;
|
||||
int ret, i, pacifier_speed= 0, data_lba, is_bootable= 0;
|
||||
int freshly_bootable= 0, hide_attr, signal_mode, role;
|
||||
char *xorriso_id= NULL, *img_id, *sfe= NULL, *out_cs;
|
||||
struct isoburn_imgen_opts *sopts= NULL;
|
||||
struct burn_drive_info *dinfo, *source_dinfo;
|
||||
struct burn_drive *drive, *source_drive;
|
||||
@ -762,11 +918,9 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
enum burn_disc_status s;
|
||||
struct burn_multi_caps *caps= NULL;
|
||||
IsoImage *image= NULL;
|
||||
IsoNode *root_node;
|
||||
int profile_number;
|
||||
char *profile_name= NULL, *reasons= NULL;
|
||||
IsoBoot *bootcat_node;
|
||||
uint32_t padding;
|
||||
|
||||
Xorriso_alloc_meM(sfe, char, 5 * SfileadrL);
|
||||
Xorriso_alloc_meM(xorriso_id, char, 256);
|
||||
@ -849,7 +1003,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
goto ex;
|
||||
}
|
||||
relax= xorriso->relax_compliance;
|
||||
|
||||
xorriso->alignment= 0;
|
||||
image= isoburn_get_attached_image(source_drive);
|
||||
@ -876,6 +1029,19 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
goto ex;
|
||||
}
|
||||
|
||||
if(image!=NULL && 12+strlen(Xorriso_timestamP)<80) {
|
||||
strcpy(xorriso_id, xorriso->preparer_id);
|
||||
img_id= (char *) iso_image_get_data_preparer_id(image);
|
||||
if(img_id!=NULL) {
|
||||
for(i= strlen(img_id)-1; i>=0 && img_id[i]==' '; i--);
|
||||
if(i>0) {
|
||||
sprintf(xorriso->info_text, "Overwrote previous preparer id '%s'",
|
||||
img_id);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
||||
}
|
||||
}
|
||||
iso_image_set_data_preparer_id(image, xorriso_id);
|
||||
}
|
||||
ret= Xorriso_set_system_area(xorriso, source_drive, image, sopts, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
@ -914,7 +1080,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
iso_image_set_boot_catalog_hidden(image, hide_attr);
|
||||
} else if(xorriso->patch_isolinux_image & 1) {
|
||||
if(is_bootable == 1) {
|
||||
relax|= isoburn_igopt_allow_full_ascii;
|
||||
/* will imply isoburn_igopt_allow_full_ascii */
|
||||
sprintf(xorriso->info_text, "Patching boot info table");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
|
||||
@ -943,7 +1109,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||
}
|
||||
} else if(xorriso->keep_boot_image && is_bootable == 1) {
|
||||
relax|= isoburn_igopt_allow_full_ascii;
|
||||
/* will imply isoburn_igopt_allow_full_ascii */
|
||||
sprintf(xorriso->info_text, "Keeping boot image unchanged");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
} else if(is_bootable == 1) {
|
||||
@ -965,143 +1131,9 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
&value_length, &value, 2 | 8);
|
||||
}
|
||||
|
||||
isoburn_igopt_set_level(sopts, xorriso->iso_level);
|
||||
ext= ((!!xorriso->do_rockridge) * isoburn_igopt_rockridge) |
|
||||
((!!xorriso->do_joliet) * isoburn_igopt_joliet) |
|
||||
((!!xorriso->do_hfsplus) * isoburn_igopt_hfsplus) |
|
||||
((!!xorriso->do_fat) * isoburn_igopt_fat) |
|
||||
((!!xorriso->do_iso1999) * isoburn_igopt_iso1999) |
|
||||
(( !(xorriso->ino_behavior & 2)) * isoburn_igopt_hardlinks) |
|
||||
(( (!(xorriso->ino_behavior & 2)) ||
|
||||
(xorriso->do_aaip & (2 | 8 | 16 | 256)) ||
|
||||
(xorriso->do_md5 & (2 | 4)) ||
|
||||
xorriso->do_hfsplus
|
||||
) * isoburn_igopt_aaip) |
|
||||
((!!(xorriso->do_md5 & 2)) * isoburn_igopt_session_md5) |
|
||||
((!!(xorriso->do_md5 & 4)) * isoburn_igopt_file_md5) |
|
||||
((!!(xorriso->do_md5 & 8)) * isoburn_igopt_file_stability) |
|
||||
((!!xorriso->do_old_empty) * isoburn_igopt_old_empty) |
|
||||
((flag & 1) * isoburn_igopt_will_cancel);
|
||||
if(xorriso->no_emul_toc & 1)
|
||||
ext|= isoburn_igopt_no_emul_toc;
|
||||
isoburn_igopt_set_extensions(sopts, ext);
|
||||
isoburn_igopt_set_relaxed(sopts, relax);
|
||||
ret = isoburn_igopt_set_rr_reloc(sopts, xorriso->rr_reloc_dir,
|
||||
xorriso->rr_reloc_flags);
|
||||
ret= Xorriso_make_iso_write_opts(xorriso, image, sopts, 0);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
ret= isoburn_igopt_set_untranslated_name_len(sopts,
|
||||
xorriso->untranslated_name_len);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
isoburn_igopt_set_sort_files(sopts, 1);
|
||||
isoburn_igopt_set_over_mode(sopts, 0, 0, (mode_t) 0, (mode_t) 0);
|
||||
isoburn_igopt_set_over_ugid(sopts, 2 * !!xorriso->do_global_uid,
|
||||
2 * !!xorriso->do_global_gid,
|
||||
(uid_t) xorriso->global_uid,
|
||||
(gid_t) xorriso->global_gid);
|
||||
isoburn_igopt_set_out_charset(sopts, out_cs);
|
||||
isoburn_igopt_set_fifo_size(sopts, xorriso->fs * 2048);
|
||||
Ftimetxt(time(NULL), xorriso->scdbackup_tag_time, 8);
|
||||
isoburn_igopt_set_scdbackup_tag(sopts, xorriso->scdbackup_tag_name,
|
||||
xorriso->scdbackup_tag_time,
|
||||
xorriso->scdbackup_tag_written);
|
||||
if(xorriso->prep_partition[0]) {
|
||||
ret= isoburn_igopt_set_prep_partition(sopts, xorriso->prep_partition, 0);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
if(xorriso->efi_boot_partition[0]) {
|
||||
ret= isoburn_igopt_set_efi_bootp(sopts, xorriso->efi_boot_partition, 0);
|
||||
if(ret <= 0)
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
for(i= 0; i < Xorriso_max_appended_partitionS; i++) {
|
||||
if(xorriso->appended_partitions[i] == NULL)
|
||||
continue;
|
||||
if(xorriso->appended_partitions[i][0] == 0)
|
||||
continue;
|
||||
if(strcmp(xorriso->appended_partitions[i], ".") == 0)
|
||||
part_image= "";
|
||||
else
|
||||
part_image= xorriso->appended_partitions[i];
|
||||
isoburn_igopt_set_partition_img(sopts, i + 1,
|
||||
xorriso->appended_part_types[i], part_image);
|
||||
}
|
||||
isoburn_igopt_set_disc_label(sopts, xorriso->ascii_disc_label);
|
||||
isoburn_igopt_set_hfsp_serial_number(sopts, xorriso->hfsp_serial_number);
|
||||
isoburn_igopt_set_hfsp_block_size(sopts, xorriso->hfsp_block_size,
|
||||
xorriso->apm_block_size);
|
||||
|
||||
if(image!=NULL && 12+strlen(Xorriso_timestamP)<80) {
|
||||
strcpy(xorriso_id, xorriso->preparer_id);
|
||||
img_id= (char *) iso_image_get_data_preparer_id(image);
|
||||
if(img_id!=NULL) {
|
||||
for(i= strlen(img_id)-1; i>=0 && img_id[i]==' '; i--);
|
||||
if(i>0) {
|
||||
sprintf(xorriso->info_text, "Overwrote previous preparer id '%s'",
|
||||
img_id);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
|
||||
}
|
||||
}
|
||||
iso_image_set_data_preparer_id(image, xorriso_id);
|
||||
}
|
||||
isoburn_igopt_set_pvd_times(sopts,
|
||||
xorriso->vol_creation_time, xorriso->vol_modification_time,
|
||||
xorriso->vol_expiration_time, xorriso->vol_effective_time,
|
||||
xorriso->vol_uuid);
|
||||
|
||||
#ifdef Xorriso_with_libjtE
|
||||
if(xorriso->libjte_handle && (xorriso->libjte_params_given & (4 | 8))) {
|
||||
|
||||
/* >>> Check whether the mandatory parameters are set */;
|
||||
|
||||
ret= libjte_set_outfile(xorriso->libjte_handle, xorriso->outdev);
|
||||
Xorriso_process_msg_queues(xorriso, 0);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
isoburn_igopt_attach_jte(sopts, xorriso->libjte_handle);
|
||||
pad_by_libisofs= 1;
|
||||
}
|
||||
#endif /* Xorriso_with_libjtE */
|
||||
|
||||
if(xorriso->do_padding_by_libisofs || pad_by_libisofs) {
|
||||
/* Padding to be done by libisofs, not by libburn.
|
||||
*/
|
||||
padding= xorriso->padding / 2048;
|
||||
if((uint32_t) xorriso->padding > padding * 2048)
|
||||
padding++;
|
||||
/*
|
||||
fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n",
|
||||
(int) padding);
|
||||
*/
|
||||
isoburn_igopt_set_tail_blocks(sopts, padding);
|
||||
}
|
||||
|
||||
/* Make final abort check before starting expensive activities */
|
||||
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
|
||||
if(ret<0)
|
||||
{ret= 0; goto ex;}
|
||||
|
||||
if(xorriso->zisofs_by_magic) {
|
||||
sprintf(xorriso->info_text,
|
||||
"Checking disk file content for zisofs compression headers.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
|
||||
root_node= (IsoNode *) iso_image_get_root(image);
|
||||
ret= iso_node_zf_by_magic(root_node,
|
||||
(xorriso->out_drive_handle == xorriso->in_drive_handle) | 2 | 16);
|
||||
if(ret<0) {
|
||||
Xorriso_report_iso_error(xorriso, "", ret,
|
||||
"Error when examining file content for zisofs headers",
|
||||
0, "FAILURE", 1);
|
||||
}
|
||||
ret= Xorriso_eval_problem_status(xorriso, 1, 0);
|
||||
if(ret<0)
|
||||
{ret= 0; goto ex;}
|
||||
sprintf(xorriso->info_text,
|
||||
"Check for zisofs compression headers done.");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
|
||||
}
|
||||
goto ex;
|
||||
|
||||
/* >>> omit iso_image_update_sizes if the image was filled up very quickly */;
|
||||
|
||||
@ -1118,10 +1150,6 @@ fprintf(stderr, "XORRISO_DEBUG: isoburn_igopt_set_tail_blocks(%d)\n",
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
|
||||
ret = isoburn_igopt_set_write_type(sopts, xorriso->do_tao);
|
||||
if(ret <= 0)
|
||||
goto ex;
|
||||
|
||||
Xorriso_set_abort_severity(xorriso, 1);
|
||||
if (xorriso->grow_blindly_msc2 >= 0 &&
|
||||
xorriso->out_drive_handle != xorriso->in_drive_handle) {
|
||||
|
Reference in New Issue
Block a user