Completed -tell_media_space, checked space before burn, failed -end exits >0
This commit is contained in:
parent
361b93caa2
commit
8738e9ada2
@ -4469,15 +4469,22 @@ int Xorriso_option_status_history_max(struct XorrisO *xorriso, int num,
|
|||||||
/* Option -tell_media_space */
|
/* Option -tell_media_space */
|
||||||
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag)
|
int Xorriso_option_tell_media_space(struct XorrisO *xorriso, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, free_space= 0, media_space= 0;
|
||||||
|
|
||||||
ret= Xorriso_tell_media_space(xorriso, 0);
|
ret= Xorriso_tell_media_space(xorriso, &media_space, &free_space, 0);
|
||||||
if(ret<0) {
|
if(ret<0) {
|
||||||
sprintf(xorriso->info_text, "Cannot -tell_media_space");
|
sprintf(xorriso->info_text, "Cannot -tell_media_space");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
sprintf(xorriso->result_line, "%d\n", ret);
|
if(free_space<0) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Pending image size larger than free space on media");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||||
|
}
|
||||||
|
sprintf(xorriso->result_line, "Write space : %d\n", media_space);
|
||||||
|
Xorriso_result(xorriso, 0);
|
||||||
|
sprintf(xorriso->result_line, "Free space : %d\n", free_space);
|
||||||
Xorriso_result(xorriso, 0);
|
Xorriso_result(xorriso, 0);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -4688,6 +4695,9 @@ next_command:;
|
|||||||
|
|
||||||
} else if(strcmp(cmd,"-end")==0) {
|
} else if(strcmp(cmd,"-end")==0) {
|
||||||
Xorriso_option_end(xorriso, 0);
|
Xorriso_option_end(xorriso, 0);
|
||||||
|
ret= Xorriso_eval_problem_status(xorriso, ret, 0);
|
||||||
|
if(ret<0)
|
||||||
|
return(ret);
|
||||||
{ret= 3; goto ex;}
|
{ret= 3; goto ex;}
|
||||||
|
|
||||||
} else if(strcmp(cmd,"-f")==0) {
|
} else if(strcmp(cmd,"-f")==0) {
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2007.10.20.171046"
|
#define Xorriso_timestamP "2007.10.20.194918"
|
||||||
|
@ -268,7 +268,7 @@ int Xorriso_make_write_options(
|
|||||||
*/
|
*/
|
||||||
int Xorriso_write_growing(struct XorrisO *xorriso, int flag)
|
int Xorriso_write_growing(struct XorrisO *xorriso, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret, media_space;
|
||||||
struct isoburn_source_opts sopts;
|
struct isoburn_source_opts sopts;
|
||||||
struct burn_drive_info *dinfo;
|
struct burn_drive_info *dinfo;
|
||||||
struct burn_drive *drive;
|
struct burn_drive *drive;
|
||||||
@ -309,15 +309,22 @@ int Xorriso_write_growing(struct XorrisO *xorriso, int flag)
|
|||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(flag&1) {
|
|
||||||
ret= burn_disc_get_sectors(disc);
|
|
||||||
goto ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
|
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
|
ret= burn_disc_get_sectors(disc);
|
||||||
|
if(flag&1)
|
||||||
|
goto ex;
|
||||||
|
media_space= burn_disc_available_space(drive, burn_options) / (off_t) 2048;
|
||||||
|
if(media_space < ret) {
|
||||||
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
|
sprintf(xorriso->info_text,"Image size %ds exceeds free space on media %ds",
|
||||||
|
ret, media_space);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
|
{ret= 0; goto ex;}
|
||||||
|
}
|
||||||
|
|
||||||
isoburn_disc_write(burn_options, disc);
|
isoburn_disc_write(burn_options, disc);
|
||||||
burn_write_opts_free(burn_options);
|
burn_write_opts_free(burn_options);
|
||||||
|
|
||||||
@ -767,13 +774,16 @@ int Xorriso_show_devices(struct XorrisO *xorriso, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Xorriso_tell_media_space(struct XorrisO *xorriso, int flag)
|
int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
||||||
|
int *media_space, int *free_space, int flag)
|
||||||
{
|
{
|
||||||
int ret, free_space;
|
int ret;
|
||||||
struct burn_drive_info *dinfo;
|
struct burn_drive_info *dinfo;
|
||||||
struct burn_drive *drive;
|
struct burn_drive *drive;
|
||||||
struct burn_write_opts *burn_options;
|
struct burn_write_opts *burn_options;
|
||||||
|
|
||||||
|
(*free_space)= (*media_space)= 0;
|
||||||
|
|
||||||
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive,
|
||||||
"on attempt to -tell_media_space", 2);
|
"on attempt to -tell_media_space", 2);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
@ -782,15 +792,20 @@ int Xorriso_tell_media_space(struct XorrisO *xorriso, int flag)
|
|||||||
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
|
ret= Xorriso_make_write_options(xorriso, drive, &burn_options, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
return(-1);
|
return(-1);
|
||||||
free_space= burn_disc_available_space(drive, burn_options) / (off_t) 2048;
|
(*free_space)= (*media_space)=
|
||||||
|
burn_disc_available_space(drive, burn_options) / (off_t) 2048;
|
||||||
burn_write_opts_free(burn_options);
|
burn_write_opts_free(burn_options);
|
||||||
|
|
||||||
/* >>> subtract space needed for pending session image */
|
if(xorriso->volset_change_pending) {
|
||||||
|
|
||||||
|
/* >>> care for modifying */
|
||||||
|
|
||||||
|
ret= Xorriso_write_growing(xorriso, 1);
|
||||||
|
if(ret>0)
|
||||||
|
(*free_space)-= ret;
|
||||||
|
}
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
if(free_space<=0)
|
return(1);
|
||||||
free_space= 0;
|
|
||||||
return(free_space);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +37,8 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag);
|
|||||||
|
|
||||||
int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
|
int Xorriso_show_devices(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
int Xorriso_tell_media_space(struct XorrisO *xorriso, int flag);
|
int Xorriso_tell_media_space(struct XorrisO *xorriso,
|
||||||
|
int *media_space, int *free_space, int flag);
|
||||||
|
|
||||||
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
int Xorriso_blank_media(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user