New option -padding
This commit is contained in:
@ -70,8 +70,8 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
|
||||
#define LIBISO_ISSOCK(node) (iso_node_get_type(node) == LIBISO_SPECIAL && \
|
||||
S_ISSOCK(iso_node_get_mode(node)))
|
||||
|
||||
|
||||
#define Xorriso_min_track_sizE 300
|
||||
/* CD specs say one shall not write tracks < 600 kiB */
|
||||
#define Xorriso_cd_min_track_sizE 300
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
@ -678,7 +678,8 @@ int Xorriso_make_write_options(
|
||||
*/
|
||||
int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
{
|
||||
int ret, media_space, img_sectors;
|
||||
int ret, media_space, img_sectors, padding= 0, profile= 0;
|
||||
char profile_name[80];
|
||||
struct isoburn_imgen_opts *sopts= NULL;
|
||||
struct burn_drive_info *dinfo, *source_dinfo;
|
||||
struct burn_drive *drive, *source_drive;
|
||||
@ -772,40 +773,46 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||
if(flag&1)
|
||||
goto ex;
|
||||
|
||||
sessions= burn_disc_get_sessions(disc, &num_sessions);
|
||||
if(sessions==NULL || num_sessions < 1) {
|
||||
no_track:;
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,"Program error : no track in prepared disc");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||
isoburn_cancel_prepared_write(source_drive, drive, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
tracks= burn_session_get_tracks(sessions[0], &num_tracks);
|
||||
if(tracks==NULL || num_tracks < 1)
|
||||
goto no_track;
|
||||
|
||||
padding= 0;
|
||||
ret= burn_disc_get_profile(drive, &profile, profile_name);
|
||||
padding= xorriso->padding / 2048;
|
||||
if(xorriso->padding > padding * 2048)
|
||||
padding++;
|
||||
if(profile==0x09 || profile==0x0a) { /* CD-R , CD-RW */
|
||||
if(img_sectors + padding < Xorriso_cd_min_track_sizE) {
|
||||
padding= Xorriso_cd_min_track_sizE - img_sectors;
|
||||
sprintf(xorriso->info_text,
|
||||
"Expanded track to minimum size of %d sectors",
|
||||
Xorriso_cd_min_track_sizE);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
}
|
||||
burn_track_define_data(tracks[0], 0, padding * 2048, 0, BURN_MODE1);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
|
||||
media_space= burn_disc_available_space(drive, burn_options) / (off_t) 2048;
|
||||
if(media_space < img_sectors || media_space < Xorriso_min_track_sizE) {
|
||||
if(media_space < img_sectors + padding) {
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,"Image size %ds exceeds free space on media %ds",
|
||||
(img_sectors < Xorriso_min_track_sizE ? Xorriso_min_track_sizE
|
||||
: img_sectors ),
|
||||
media_space);
|
||||
img_sectors + padding, media_space);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||
isoburn_cancel_prepared_write(source_drive, drive, 0);
|
||||
{ret= 0; goto ex;}
|
||||
}
|
||||
|
||||
if(img_sectors < Xorriso_min_track_sizE) {
|
||||
sessions= burn_disc_get_sessions(disc, &num_sessions);
|
||||
if(sessions==NULL || num_sessions < 1) {
|
||||
no_track:;
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text,"Program error : no track in prepared disc");
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||
isoburn_cancel_prepared_write(source_drive, drive, 0);
|
||||
{ret= -1; goto ex;}
|
||||
}
|
||||
tracks= burn_session_get_tracks(sessions[0], &num_tracks);
|
||||
if(tracks==NULL || num_tracks < 1)
|
||||
goto no_track;
|
||||
burn_track_define_data(tracks[0], 0,
|
||||
(Xorriso_min_track_sizE - img_sectors) * 2048,
|
||||
0, BURN_MODE1);
|
||||
Xorriso_process_msg_queues(xorriso,0);
|
||||
sprintf(xorriso->info_text, "Expanded track to minimum size of %d sectors",
|
||||
Xorriso_min_track_sizE);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
}
|
||||
|
||||
isoburn_disc_write(burn_options, disc);
|
||||
burn_write_opts_free(burn_options);
|
||||
|
||||
|
Reference in New Issue
Block a user