From ab0bfdb04fc67f05eb2200ab5536b811b2e61c89 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Tue, 8 Aug 2023 13:43:51 +0200 Subject: [PATCH] New bit1 with API call Xorriso_change_is_pending() issues a note if return is 0 and indev and outdev point to different drives --- xorriso/base_obj.c | 4 ++++ xorriso/iso_img.c | 24 ++++++++++++++++++++++-- xorriso/opts_a_c.c | 1 + xorriso/opts_p_z.c | 1 + xorriso/write_run.c | 3 +++ xorriso/xorriso.h | 8 ++++++-- xorriso/xorriso_private.h | 5 +++++ xorriso/xorriso_timestamp.h | 2 +- 8 files changed, 43 insertions(+), 5 deletions(-) diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index 110c5a31..d8e42823 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -238,6 +238,10 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->indev_off_adr[0]= 0; m->isofs_st_in= 0; m->volset_change_pending= 0; + m->commit_attempts= 0; + m->print_size_attempts= 0; + m->write_session_counter= 0; + m->print_size_counter= 0; m->no_volset_present= 0; m->in_sector_map= NULL; m->check_media_default= NULL; diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index c935d534..1da9c349 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -995,12 +995,32 @@ int Xorriso_get_volume(struct XorrisO *xorriso, IsoImage **volume, /* @param flag bit0= do not return 1 on volset_change_pending != 1 + bit1= issue NOTE if return is 0, + indev and outdev point to different drives, + and no write run or size run has happened */ int Xorriso_change_is_pending(struct XorrisO *xorriso, int flag) { + int ret; + if(flag & 1) - return(xorriso->volset_change_pending == 1); - return(!!xorriso->volset_change_pending); + ret= (xorriso->volset_change_pending == 1); + else + ret= !!xorriso->volset_change_pending; + + if((flag & 2) && xorriso->volset_change_pending == 0 && + xorriso->commit_attempts <= 0 && + xorriso->print_size_attempts <= 0 && + xorriso->write_session_counter <= 0 && + xorriso->print_size_counter <= 0) { + if(xorriso->indev[0] != 0 && xorriso->outdev[0] != 0 && + strcmp(xorriso->indev, xorriso->outdev) != 0) { + Xorriso_msgs_submit(xorriso, 0, + "-indev and -outdev differ. But no pending image modifications.", + 0, "NOTE", 0); + } + } + return(ret); } diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index b3ec6176..e8cd1256 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -2343,6 +2343,7 @@ int Xorriso_option_commit(struct XorrisO *xorriso, int flag) int ret; char eternal_problem_status_text_mem[80]; + xorriso->commit_attempts++; if(!Xorriso_change_is_pending(xorriso, 0)) { sprintf(xorriso->info_text, "-commit: No image modifications pending"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); diff --git a/xorriso/opts_p_z.c b/xorriso/opts_p_z.c index c410afdb..03f7b9b3 100644 --- a/xorriso/opts_p_z.c +++ b/xorriso/opts_p_z.c @@ -335,6 +335,7 @@ int Xorriso_option_print_size(struct XorrisO *xorriso, int flag) { int ret, fd; + xorriso->print_size_attempts++; if(!Xorriso_change_is_pending(xorriso, 0)) { sprintf(xorriso->info_text,"-print_size: No image modifications pending"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); diff --git a/xorriso/write_run.c b/xorriso/write_run.c index 507613d7..89999756 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -1488,6 +1488,8 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) Xorriso_set_image_severities(xorriso, 2); if(flag&1) /* reset queue severity */ Xorriso_set_image_severities(xorriso, 0); + if(flag & 1) + xorriso->print_size_counter++; goto cancel_iso; } @@ -1571,6 +1573,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) sprintf(xorriso->info_text, "Writing to %s completed successfully.\n\n", Text_shellsafe(xorriso->outdev,sfe,0)); Xorriso_info(xorriso, 0); + xorriso->write_session_counter++; ret= 1; ex:; xorriso->run_state= 0; /* Indicate that burning has ended */ diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index b3f2b0a6..2630081a 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -214,9 +214,13 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag); /* Inquire whether option -commit would make sense. @param xorriso The context object to inquire. - @param flag @since 0.6.6 - bit0= do not return 1 if -as mkisofs -print-size was + @param flag bit0= do not return 1 if -as mkisofs -print-size was performed on the current image. + @since 0.6.6 + bit1= issue NOTE if return is 0, + indev and outdev point to different drives, + and no write run has happened + @since 1.5.8 @return 0= -commit would have nothing to do 1= a new image session would emerge at -commit */ diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 38b75a4c..3b8aa10d 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -357,6 +357,11 @@ struct XorrisO { /* the global context of xorriso */ 3= change pending, but the attempt to write it failed */ + int commit_attempts; /* For Xorriso_change_is_pending bit1 */ + int print_size_attempts; /* For Xorriso_change_is_pending bit1 */ + int write_session_counter; /* For Xorriso_change_is_pending bit1 */ + int print_size_counter; /* For Xorriso_change_is_pending bit1 */ + int no_volset_present; /* set to 1 on first failure */ struct CheckmediajoB *check_media_default; diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index b56b88f0..af933224 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2023.08.07.132608" +#define Xorriso_timestamP "2023.08.08.114313"