Now loading libraries before -version, pacifier for -add

This commit is contained in:
Thomas Schmitt 2008-02-06 13:11:20 +00:00
parent e947087b0d
commit e24cfbbe9c
7 changed files with 225 additions and 28 deletions

View File

@ -193,6 +193,26 @@ LIBBURN_MISCONFIGURATION_ = 0;
} }
/* API @since 0.1.0 */
int isoburn_libisofs_req(int *major, int *minor, int *micro)
{
*major= iso_lib_header_version_major;
*minor= iso_lib_header_version_minor;
*micro= iso_lib_header_version_micro;
return(1);
}
/* API @since 0.1.0 */
int isoburn_libburn_req(int *major, int *minor, int *micro)
{
*major= burn_header_version_major;
*minor= burn_header_version_minor;
*micro= burn_header_version_micro;
return(1);
}
/** Examine the media and sets appropriate emulation if needed. /** Examine the media and sets appropriate emulation if needed.
*/ */
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,

View File

@ -160,17 +160,37 @@ int isoburn_is_compatible(int major, int minor, int micro, int flag);
void isoburn_version(int *major, int *minor, int *micro); void isoburn_version(int *major, int *minor, int *micro);
/** The minimum version of libisofs to be used with this version of libisoburn /** The minimum version of libisofs to be used with this version of libisoburn
at compile time.
*/ */
#define isoburn_libisofs_req_major 0 #define isoburn_libisofs_req_major 0
#define isoburn_libisofs_req_minor 6 #define isoburn_libisofs_req_minor 6
#define isoburn_libisofs_req_micro 1 #define isoburn_libisofs_req_micro 1
/** The minimum version of libburn to be used with this version of libisoburn /** The minimum version of libburn to be used with this version of libisoburn
at compile time.
*/ */
#define isoburn_libburn_req_major 0 #define isoburn_libburn_req_major 0
#define isoburn_libburn_req_minor 4 #define isoburn_libburn_req_minor 4
#define isoburn_libburn_req_micro 2 #define isoburn_libburn_req_micro 2
/** The minimum version of libisofs to be used with this version of libisoburn
at runtime. This is checked already in isoburn_initialize() which will
refuse on outdated version. So this call is for information purposes after
successful startup only.
*/
int isoburn_libisofs_req(int *major, int *minor, int *micro);
/** The minimum version of libburn to be used with this version of libisoburn
at runtime. This is checked already in isoburn_initialize() which will
refuse on outdated version. So this call is for information purposes after
successful startup only.
*/
int isoburn_libburn_req(int *major, int *minor, int *micro);
/** These three release version numbers tell the revision of this header file /** These three release version numbers tell the revision of this header file
and of the API it describes. They are memorized by applications at build and of the API it describes. They are memorized by applications at build
time. time.

View File

@ -2920,6 +2920,11 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->insert_count= 0; m->insert_count= 0;
m->insert_bytes= 0; m->insert_bytes= 0;
m->error_count= 0; m->error_count= 0;
m->pacifier_interval= 1.0;
m->pacifier_count= 0;
m->pacifier_total= 0;
m->start_time= 0.0;
m->last_update_time= 0.0;
m->result_line[0]= 0; m->result_line[0]= 0;
m->result_line_counter= 0; m->result_line_counter= 0;
m->result_page_counter= 0; m->result_page_counter= 0;
@ -3356,14 +3361,67 @@ int Xorriso_restxt(struct XorrisO *xorriso, char *text)
} }
int Xorriso_reset_counters(struct XorrisO *xorriso, int flag) int Xorriso_pacifier_reset(struct XorrisO *xorriso, int flag)
/* {
bit0= reset xorriso->found to -1 xorriso->start_time= Sfile_microtime(0);
xorriso->last_update_time= xorriso->start_time;
xorriso->pacifier_count= 0;
xorriso->pacifier_total= 0;
return(1);
}
/* This call is to be issued by long running workers in short intervals.
It will check whether enough time has elapsed since the last pacifier
message and eventually issue an update message.
@param what_done A sparse description of the action, preferrably in past
tense. E.g. "done" , "files added".
@param count The number of objects processed so far.
Is ignored if <=0.
@param todo The number of objects to be done in total.
Is ignored if <=0.
@param current_object A string telling the object currently processed.
Ignored if "".
@param flag Bitfield. Unused yet. Submit 0.
*/ */
int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
off_t count, off_t todo, char *current_object,
int flag)
{
double current_time, since;
current_time= Sfile_microtime(0);
if(current_time - xorriso->last_update_time < xorriso->pacifier_interval)
return(1);
xorriso->last_update_time= Sfile_microtime(0);
since= current_time - xorriso->start_time;
if(count<=0.0) {
if(current_object[0]==0)
sprintf(xorriso->info_text,
"%s since %.f seconds", what_done, since);
else
sprintf(xorriso->info_text,
"Thank you for being patient since %.f seconds", since);
} else if(todo<=0.0) {
sprintf(xorriso->info_text,
"%.f %s in %.f seconds", (double) count, what_done, since);
} else {
sprintf(xorriso->info_text, "%.f of %.f %s in %.f seconds",
(double) count, (double) todo, what_done, since);
}
if(current_object[0]!=0)
sprintf(xorriso->info_text+strlen(xorriso->info_text),
", now at %s", current_object);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
return(1);
}
int Xorriso_reset_counters(struct XorrisO *xorriso, int flag)
{ {
xorriso->error_count= 0; xorriso->error_count= 0;
xorriso->insert_count= 0; xorriso->insert_count= 0;
xorriso->insert_bytes= 0; xorriso->insert_bytes= 0;
Xorriso_pacifier_reset(xorriso, 0);
return(1); return(1);
} }
@ -6012,7 +6070,9 @@ int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag)
/* Option -add */ /* Option -add */
/* @param flag bit0=do not report the added item */ /* @param flag bit0=do not report the added item
bit1=do not reset pacifier
*/
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag) int *idx, int flag)
{ {
@ -6025,6 +6085,8 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
if(ret<=0) if(ret<=0)
goto ex; goto ex;
if(!(flag&2))
Xorriso_pacifier_reset(xorriso, 0);
for(i= 0; i<optc; i++) { for(i= 0; i<optc; i++) {
if(Sfile_str(target,optv[i],0)<=0) if(Sfile_str(target,optv[i],0)<=0)
{ret= -1; goto ex;} {ret= -1; goto ex;}
@ -6609,7 +6671,9 @@ int Xorriso_option_cpri(struct XorrisO *xorriso, int argc, char **argv,
is_dir= 1; is_dir= 1;
strcpy(dest_dir, eff_dest); strcpy(dest_dir, eff_dest);
} }
/* Perform graft-ins */ /* Perform graft-ins */
Xorriso_pacifier_reset(xorriso, 0);
for(i= 0; i<optc && !xorriso->request_to_abort; i++) { for(i= 0; i<optc && !xorriso->request_to_abort; i++) {
ret= Xorriso_normalize_img_path(xorriso, xorriso->wdx, optv[i], eff_origin, ret= Xorriso_normalize_img_path(xorriso, xorriso->wdx, optv[i], eff_origin,
2|4); 2|4);
@ -7300,6 +7364,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Give up any unejected drive afterwards.", " Give up any unejected drive afterwards.",
" -close \"on\"|\"off\"", " -close \"on\"|\"off\"",
" If \"on\" then mark the written media as not appendable.", " If \"on\" then mark the written media as not appendable.",
" -padding number[\"k\"|\"m\"]",
" Append extra bytes to image stream. (Default is 300k)",
" -dummy \"on\"|\"off\"", " -dummy \"on\"|\"off\"",
" If \"on\" simulate burning. Refuse if media cannot simulate.", " If \"on\" simulate burning. Refuse if media cannot simulate.",
" -speed number[\"k\"|\"m\"|\"[x]CD\"|\"[x]DVD\"]", " -speed number[\"k\"|\"m\"|\"[x]CD\"|\"[x]DVD\"]",
@ -7855,7 +7921,7 @@ problem_handler:;
goto ex; goto ex;
} }
ex:; ex:;
Xorriso_reset_counters(xorriso,1); Xorriso_reset_counters(xorriso,0);
if(fp!=NULL) if(fp!=NULL)
fclose(fp); fclose(fp);
if(ret<=0) { if(ret<=0) {
@ -7930,6 +7996,7 @@ int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag)
FILE *fp= NULL; FILE *fp= NULL;
char *argpt, sfe[5*SfileadrL],line[SfileadrL]; char *argpt, sfe[5*SfileadrL],line[SfileadrL];
Xorriso_pacifier_reset(xorriso, 0);
if(adr[0]==0) { if(adr[0]==0) {
sprintf(xorriso->info_text,"Empty file name given with -path-list"); sprintf(xorriso->info_text,"Empty file name given with -path-list");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
@ -7950,7 +8017,7 @@ int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag)
continue; continue;
argpt= line; argpt= line;
null= 0; null= 0;
ret= Xorriso_option_add(xorriso, 1, &argpt, &null, 1); ret= Xorriso_option_add(xorriso, 1, &argpt, &null, 1|2);
if(ret<=0 || xorriso->request_to_abort) if(ret<=0 || xorriso->request_to_abort)
goto problem_handler; goto problem_handler;
insertcount++; insertcount++;
@ -8412,11 +8479,15 @@ int Xorriso_option_version(struct XorrisO *xorriso, int flag)
"xorriso %s : RockRidge filesystem manipulator\n", PROG_VERSION); "xorriso %s : RockRidge filesystem manipulator\n", PROG_VERSION);
sprintf(xorriso->result_line+strlen(xorriso->result_line), sprintf(xorriso->result_line+strlen(xorriso->result_line),
"Copyright (C) 2008, Thomas Schmitt <scdbackup@gmx.net>, libburnia project\n"); "Copyright (C) 2008, Thomas Schmitt <scdbackup@gmx.net>, libburnia project\n");
Xorriso_result(xorriso, 0);
sprintf(xorriso->result_line,
"xorriso version : %s\n", PROG_VERSION);
sprintf(xorriso->result_line+strlen(xorriso->result_line), sprintf(xorriso->result_line+strlen(xorriso->result_line),
"Version timestamp : %s\n",Xorriso_timestamP); "Version timestamp : %s\n",Xorriso_timestamP);
sprintf(xorriso->result_line+strlen(xorriso->result_line), sprintf(xorriso->result_line+strlen(xorriso->result_line),
"Build timestamp : %s\n",Xorriso_build_timestamP); "Build timestamp : %s\n",Xorriso_build_timestamP);
Xorriso_result(xorriso, 0); Xorriso_result(xorriso, 0);
Xorriso_report_lib_versions(xorriso, 0);
return(1); return(1);
} }
@ -8917,7 +8988,7 @@ int Xorriso_execute_option(struct XorrisO *xorriso, char *line, int flag)
struct timezone tz; struct timezone tz;
gettimeofday(&tv,&tz); gettimeofday(&tv,&tz);
Xorriso_reset_counters(xorriso,1); Xorriso_reset_counters(xorriso,0);
xorriso->idle_time= 0.0; xorriso->idle_time= 0.0;
tdiff= tv.tv_sec+(1.e-6*(double) tv.tv_usec); tdiff= tv.tv_sec+(1.e-6*(double) tv.tv_usec);
@ -8951,7 +9022,7 @@ int Xorriso_execute_option(struct XorrisO *xorriso, char *line, int flag)
Xorriso_info(xorriso,0); Xorriso_info(xorriso,0);
xorriso->bar_is_fresh= 1; xorriso->bar_is_fresh= 1;
} }
Xorriso_reset_counters(xorriso,1); Xorriso_reset_counters(xorriso,0);
ex:; ex:;
Sfile_make_argv("", "", &argc, &argv, 2); /* release memory */ Sfile_make_argv("", "", &argc, &argv, 2); /* release memory */
return(ret); return(ret);
@ -9048,10 +9119,14 @@ int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
Xorriso_option_help(xorriso,0); Xorriso_option_help(xorriso,0);
xorriso->did_something_useful= 1; xorriso->did_something_useful= 1;
return(0); return(0);
#ifdef NIX
} else if(strcmp(cmd,"version")==0) { } else if(strcmp(cmd,"version")==0) {
Xorriso_option_version(xorriso, 0); Xorriso_option_version(xorriso, 0);
xorriso->did_something_useful= 1; xorriso->did_something_useful= 1;
return(0); return(0);
#endif
} }
} else if(i==1 && strcmp(cmd,"no_rc")==0) { } else if(i==1 && strcmp(cmd,"no_rc")==0) {
ret= Xorriso_option_no_rc(xorriso, 0); ret= Xorriso_option_no_rc(xorriso, 0);
@ -9152,8 +9227,7 @@ int Xorriso_main(int argc, char **argv)
} }
/* The prescan of arguments performs actions which have to happen before /* The prescan of arguments performs actions which have to happen before
the normal processing of startup files and arguments. Currently: the normal processing of startup files and arguments.
-no_rc and single-argument runs like -help or -version.
*/ */
ret= Xorriso_prescan_args(xorriso,argc,argv,0); ret= Xorriso_prescan_args(xorriso,argc,argv,0);
if(ret==0) if(ret==0)

View File

@ -178,6 +178,14 @@ struct XorrisO { /* the global context of xorriso */
double insert_bytes; double insert_bytes;
double error_count; /* double will not roll over */ double error_count; /* double will not roll over */
/* pacifiers */
double pacifier_interval;
double start_time;
double last_update_time;
/* optional global counters for brain reduced callback functions */
off_t pacifier_count;
off_t pacifier_total;
/* result (stdout, R: ) */ /* result (stdout, R: ) */
char result_line[5*SfileadrL]; char result_line[5*SfileadrL];
int result_line_counter; int result_line_counter;
@ -271,6 +279,24 @@ int Xorriso__bourne_to_reg(char bourne_expr[], char reg_expr[], int flag);
int Xorriso_no_malloc_memory(struct XorrisO *xorriso, char **to_free, int Xorriso_no_malloc_memory(struct XorrisO *xorriso, char **to_free,
int flag); int flag);
int Xorriso_pacifier_reset(struct XorrisO *xorriso, int flag);
/* This call is to be issued by long running workers in short intervals.
It will check whether enough time has elapsed since the last pacifier
message and eventually issue an update message.
@param what_done A sparse description of the action, preferrably in past
tense. E.g. "done" , "files added".
@param count The number of objects processed so far.
Is ignored if <=0.
@param todo The number of objects to be done in total.
Is ignored if <=0.
@param current_object A string telling the object currently processed.
Ignored if "".
@param flag Bitfield. Unused yet. Submit 0.
*/
int Xorriso_pacifier_callback(struct XorrisO *xorriso, char *what_done,
off_t count, off_t todo, char *current_object,
int flag);
int Sfile_str(char target[SfileadrL], char *source, int flag); int Sfile_str(char target[SfileadrL], char *source, int flag);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.02.05.191456" #define Xorriso_timestamP "2008.02.06.131028"

View File

@ -291,12 +291,13 @@ int Xorriso__sev_to_text(int severity, char **severity_name,
/* @param flag bit0=report libisofs error text */ /* @param flag bit0=report libisofs error text */
int Xorriso_report_iso_error(struct XorrisO *xorriso, int Xorriso_report_iso_error(struct XorrisO *xorriso, char *victim,
int iso_error_code, char msg_text[], int os_errno, int iso_error_code, char msg_text[], int os_errno,
char min_severity[], int flag) char min_severity[], int flag)
{ {
int error_code, iso_sev, min_sev, ret; int error_code, iso_sev, min_sev, ret;
char *sev_text_pt, *msg_text_pt= NULL; char *sev_text_pt, *msg_text_pt= NULL;
char sfe[6*SfileadrL];
error_code= 0x00050000; error_code= 0x00050000;
@ -315,8 +316,12 @@ int Xorriso_report_iso_error(struct XorrisO *xorriso,
if(min_sev < iso_sev) if(min_sev < iso_sev)
/* >>> with libburn-0.4.4 do: burn_sev_to_text(iso_sev, &sev_text_pt, 0); */ /* >>> with libburn-0.4.4 do: burn_sev_to_text(iso_sev, &sev_text_pt, 0); */
Xorriso__sev_to_text(iso_sev, &sev_text_pt, 0); Xorriso__sev_to_text(iso_sev, &sev_text_pt, 0);
ret= Xorriso_msgs_submit(xorriso, error_code, msg_text_pt, strcpy(sfe, msg_text_pt);
os_errno, sev_text_pt, 0); if(victim[0]) {
strcat(sfe, ": ");
Text_shellsafe(victim, sfe+strlen(sfe), 0);
}
ret= Xorriso_msgs_submit(xorriso, error_code, sfe, os_errno, sev_text_pt, 0);
return(ret); return(ret);
} }
@ -384,7 +389,8 @@ int Xorriso_create_empty_iso(struct XorrisO *xorriso, int flag)
isoburn_ropt_destroy(&ropts, 0); isoburn_ropt_destroy(&ropts, 0);
if(ret<=0) { if(ret<=0) {
sprintf(xorriso->info_text, "Failed to create new empty ISO image object"); sprintf(xorriso->info_text, "Failed to create new empty ISO image object");
Xorriso_report_iso_error(xorriso, ret, xorriso->info_text, 0, "FATAL", 0); Xorriso_report_iso_error(xorriso, "", ret, xorriso->info_text, 0, "FATAL",
0);
return(-1); return(-1);
} }
xorriso->in_volset_handle= (void *) volset; xorriso->in_volset_handle= (void *) volset;
@ -868,6 +874,9 @@ ex:;
} }
/* This loop watches burn runs until they end.
It issues pacifying update messages to the user.
*/
int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive, int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
int flag) int flag)
{ {
@ -1115,7 +1124,7 @@ int Xorriso_add_tree(struct XorrisO *xorriso, IsoDir *dir,
int ret, target_is_dir, source_is_dir, source_is_link, fret, was_failure= 0; int ret, target_is_dir, source_is_dir, source_is_link, fret, was_failure= 0;
int do_not_dive; int do_not_dive;
struct DirseQ *dirseq= NULL; struct DirseQ *dirseq= NULL;
char *name, *img_name, *srcpt; char *name, *img_name, *srcpt, *stbuf_src= "";
struct stat stbuf, hstbuf; struct stat stbuf, hstbuf;
dev_t dir_dev; dev_t dir_dev;
struct LinkiteM *own_link_stack; struct LinkiteM *own_link_stack;
@ -1148,12 +1157,14 @@ int Xorriso_add_tree(struct XorrisO *xorriso, IsoDir *dir,
if(ret<=0) if(ret<=0)
goto ex; goto ex;
stbuf_src= disk_dir_path;
if(lstat(disk_dir_path, &stbuf)==-1) if(lstat(disk_dir_path, &stbuf)==-1)
goto cannot_open_dir; goto cannot_open_dir;
dir_dev= stbuf.st_dev; dir_dev= stbuf.st_dev;
if(S_ISLNK(stbuf.st_mode)) { if(S_ISLNK(stbuf.st_mode)) {
if(!(xorriso->do_follow_links || (xorriso->do_follow_param && !(flag&1)))) if(!(xorriso->do_follow_links || (xorriso->do_follow_param && !(flag&1))))
{ret= 2; goto ex;} {ret= 2; goto ex;}
stbuf_src= disk_dir_path;
if(stat(disk_dir_path, &stbuf)==-1) if(stat(disk_dir_path, &stbuf)==-1)
goto cannot_open_dir; goto cannot_open_dir;
if(dir_dev != stbuf.st_dev && if(dir_dev != stbuf.st_dev &&
@ -1186,6 +1197,7 @@ cannot_open_dir:;
img_name= img_path+strlen(img_path); img_name= img_path+strlen(img_path);
while(1) { /* loop over directory content */ while(1) { /* loop over directory content */
stbuf_src= "";
Linkitem_reset_stack(&own_link_stack, link_stack, 0); Linkitem_reset_stack(&own_link_stack, link_stack, 0);
srcpt= disk_path; srcpt= disk_path;
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
@ -1202,6 +1214,7 @@ cannot_open_dir:;
{ret= 0; goto was_problem;} {ret= 0; goto was_problem;}
if(Xorriso_much_too_long(xorriso, strlen(srcpt), 0)<=0) if(Xorriso_much_too_long(xorriso, strlen(srcpt), 0)<=0)
{ret= 0; goto was_problem;} {ret= 0; goto was_problem;}
stbuf_src= srcpt;
if(lstat(srcpt, &stbuf)==-1) { if(lstat(srcpt, &stbuf)==-1) {
cannot_lstat:; cannot_lstat:;
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
@ -1222,6 +1235,7 @@ cannot_lstat:;
if(ret<=0) if(ret<=0)
goto was_problem; goto was_problem;
srcpt= link_target; srcpt= link_target;
stbuf_src= srcpt;
if(lstat(srcpt, &stbuf)==-1) if(lstat(srcpt, &stbuf)==-1)
goto cannot_lstat; goto cannot_lstat;
} else { } else {
@ -1295,15 +1309,15 @@ cannot_lstat:;
if(ret<=0) if(ret<=0)
goto was_problem; goto was_problem;
} else { } else {
Xorriso_report_iso_error(xorriso, ret, "Cannot create symbolic link", Xorriso_report_iso_error(xorriso, stbuf_src, ret,
0, "SORRY", 1); "Cannot create symbolic link", 0, "SORRY", 1);
{ret= 0; goto was_problem;} {ret= 0; goto was_problem;}
} }
} else { } else {
ret= iso_tree_add_node(volume, dir, srcpt, &node); ret= iso_tree_add_node(volume, dir, srcpt, &node);
if(ret<0) { if(ret<0) {
Xorriso_report_iso_error(xorriso, ret, "Cannot add node to tree", Xorriso_report_iso_error(xorriso, stbuf_src, ret,
0, "SORRY", 1); "Cannot add node to tree", 0, "SORRY", 1);
goto was_problem; goto was_problem;
} }
} }
@ -1315,6 +1329,12 @@ cannot_lstat:;
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
ret=0; goto was_problem; ret=0; goto was_problem;
} }
xorriso->pacifier_count++;
if(xorriso->pacifier_count%100)
Xorriso_pacifier_callback(xorriso, "files added", xorriso->pacifier_count,
xorriso->pacifier_total, "", 0);
xorriso->volset_change_pending= 1; xorriso->volset_change_pending= 1;
if(source_is_dir) { if(source_is_dir) {
if(do_not_dive) { if(do_not_dive) {
@ -1501,8 +1521,8 @@ handle_path_node:;
ret= iso_tree_add_new_dir(dir, apt, &hdir); ret= iso_tree_add_new_dir(dir, apt, &hdir);
if(ret<0) { if(ret<0) {
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, ret, "Cannot create directory", Xorriso_report_iso_error(xorriso, img_path, ret,
0, "SORRY", 1); "Cannot create directory", 0, "SORRY", 1);
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"While grafting '%s' : could not insert '%s'", img_path, path); "While grafting '%s' : could not insert '%s'", img_path, path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
@ -1520,6 +1540,11 @@ handle_path_node:;
} }
if(done) { if(done) {
attach_source:; attach_source:;
xorriso->pacifier_count++;
if(xorriso->pacifier_count%100)
Xorriso_pacifier_callback(xorriso, "files added",
xorriso->pacifier_count,
xorriso->pacifier_total, "", 0);
if(flag&1) { if(flag&1) {
/* directory node was created above */; /* directory node was created above */;
@ -1533,7 +1558,7 @@ attach_source:;
ret= iso_tree_add_node(volume, dir, disk_path, &node); ret= iso_tree_add_node(volume, dir, disk_path, &node);
if(ret<0) { if(ret<0) {
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, ret, "Cannot create node", Xorriso_report_iso_error(xorriso, img_path, ret, "Cannot create node",
0, "SORRY", 1); 0, "SORRY", 1);
sprintf(xorriso->info_text, "Grafting failed: %s = %s", sprintf(xorriso->info_text, "Grafting failed: %s = %s",
Text_shellsafe(img_path,sfe,0), Text_shellsafe(disk_path,sfe2,0)); Text_shellsafe(img_path,sfe,0), Text_shellsafe(disk_path,sfe2,0));
@ -2011,7 +2036,7 @@ int Xorriso_format_media(struct XorrisO *xorriso, int flag)
int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag) int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag)
{ {
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, iso_error, "Cannot create iter", 0, Xorriso_report_iso_error(xorriso, "", iso_error, "Cannot create iter", 0,
"FATAL", 1); "FATAL", 1);
sprintf(xorriso->info_text, "Cannot create IsoDirIter object"); sprintf(xorriso->info_text, "Cannot create IsoDirIter object");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
@ -2207,7 +2232,8 @@ dir_not_removed:;
ret= iso_node_remove(victim_node); ret= iso_node_remove(victim_node);
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
if(ret<0) { if(ret<0) {
Xorriso_report_iso_error(xorriso, ret, "Cannot remove node", 0, "FATAL", 1); Xorriso_report_iso_error(xorriso, path, ret, "Cannot remove node", 0,
"FATAL", 1);
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Internal failure to remove %s from loaded ISO image", "Internal failure to remove %s from loaded ISO image",
Text_shellsafe(path, sfe, 0)); Text_shellsafe(path, sfe, 0));
@ -2926,7 +2952,7 @@ int Xorriso_rename(struct XorrisO *xorriso, char *origin, char *dest, int flag)
ret= iso_node_take(node); ret= iso_node_take(node);
if(ret<0) { if(ret<0) {
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, 0, "Cannot take", 0, "FATAL", 1); Xorriso_report_iso_error(xorriso, eff_dest, 0, "Cannot take", 0, "FATAL",1);
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Internal error on rename: failed to take node"); "Internal error on rename: failed to take node");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
@ -2935,7 +2961,7 @@ int Xorriso_rename(struct XorrisO *xorriso, char *origin, char *dest, int flag)
ret= iso_dir_add_node(dest_dir, node, 0); ret= iso_dir_add_node(dest_dir, node, 0);
if(ret<0) { if(ret<0) {
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, 0, "Cannot add", 0, "FATAL", 1); Xorriso_report_iso_error(xorriso, eff_dest, 0, "Cannot add", 0, "FATAL", 1);
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Internal error on rename: failed to insert node"); "Internal error on rename: failed to insert node");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
@ -2954,7 +2980,8 @@ int Xorriso_rename(struct XorrisO *xorriso, char *origin, char *dest, int flag)
ret= 1; ret= 1;
if(ret<0) { if(ret<0) {
Xorriso_process_msg_queues(xorriso,0); Xorriso_process_msg_queues(xorriso,0);
Xorriso_report_iso_error(xorriso, 0, "Cannot set name", 0, "FATAL", 1); Xorriso_report_iso_error(xorriso, eff_dest, 0, "Cannot set name", 0,
"FATAL", 1);
sprintf(xorriso->info_text, "Internal error on rename: failed to set name"); sprintf(xorriso->info_text, "Internal error on rename: failed to set name");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(-1); return(-1);
@ -3494,3 +3521,31 @@ int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag)
return(ret>=0); return(ret>=0);
} }
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag)
{
int major, minor, micro;
int req_major, req_minor, req_micro;
iso_lib_version(&major, &minor, &micro);
isoburn_libisofs_req(&req_major, &req_minor, &req_micro);
sprintf(xorriso->result_line,
"libisofs in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro, req_major, req_minor, req_micro);
Xorriso_result(xorriso, 0);
burn_version(&major, &minor, &micro);
isoburn_libburn_req(&req_major, &req_minor, &req_micro);
sprintf(xorriso->result_line,
"libburn in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro, req_major, req_minor, req_micro);
Xorriso_result(xorriso, 0);
isoburn_version(&major, &minor, &micro);
sprintf(xorriso->result_line,
"libisoburn in use : %d.%d.%d (min. %d.%d.%d)\n",
major, minor, micro,
isoburn_header_version_major, isoburn_header_version_minor,
isoburn_header_version_micro);
Xorriso_result(xorriso, 0);
return(1);
}

View File

@ -143,6 +143,8 @@ int Xorriso_get_volid(struct XorrisO *xorriso, char volid[33], int flag);
int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag); int Xorriso_set_abort_severity(struct XorrisO *xorriso, int flag);
int Xorriso_report_lib_versions(struct XorrisO *xorriso, int flag);
#endif /* Xorrisoburn_includeD */ #endif /* Xorrisoburn_includeD */