Worked on failure severities, message system, program abort decision
This commit is contained in:
parent
37969ff37f
commit
b4e4b8116d
159
test/xorriso.c
159
test/xorriso.c
@ -1772,6 +1772,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
for(i=0; i<4; i++)
|
for(i=0; i<4; i++)
|
||||||
m->logfile[i][0]= 0;
|
m->logfile[i][0]= 0;
|
||||||
m->status_history_max= Xorriso_status_history_maX;
|
m->status_history_max= Xorriso_status_history_maX;
|
||||||
|
m->library_msg_direct_print= 0;
|
||||||
strcpy(m->abort_on_text,"FATAL");
|
strcpy(m->abort_on_text,"FATAL");
|
||||||
Xorriso__text_to_sev(m->abort_on_text, &m->abort_on_severity, 0);
|
Xorriso__text_to_sev(m->abort_on_text, &m->abort_on_severity, 0);
|
||||||
m->problem_status= 0;
|
m->problem_status= 0;
|
||||||
@ -2316,9 +2317,9 @@ int Xorriso_prepare_regex(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
if(xorriso->search_mode==2 ||
|
if(xorriso->search_mode==2 ||
|
||||||
(xorriso->search_mode==3 && xorriso->structured_search==0)) {
|
(xorriso->search_mode==3 && xorriso->structured_search==0)) {
|
||||||
no_regex_available:;
|
no_regex_available:;
|
||||||
sprintf(xorriso->info_text,"%s : regular expressions not implemented\n",
|
sprintf(xorriso->info_text,"%s : regular expressions not implemented",
|
||||||
xorriso->progname);
|
xorriso->progname);
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2328,8 +2329,8 @@ no_regex_available:;
|
|||||||
if(xorriso->search_mode==3 || xorriso->search_mode==4) {
|
if(xorriso->search_mode==3 || xorriso->search_mode==4) {
|
||||||
l= strlen(adr)+strlen(xorriso->wdi)+1;
|
l= strlen(adr)+strlen(xorriso->wdi)+1;
|
||||||
if(l*2+2>sizeof(xorriso->reg_expr) || l*2+2>sizeof(adr_part)) {
|
if(l*2+2>sizeof(xorriso->reg_expr) || l*2+2>sizeof(adr_part)) {
|
||||||
sprintf(xorriso->info_text,"%s : search text too long\n",xorriso->progname);
|
sprintf(xorriso->info_text,"Search pattern too long");
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2426,8 +2427,8 @@ no_regex_available:;
|
|||||||
#else /* Xorriso_with_regeX */
|
#else /* Xorriso_with_regeX */
|
||||||
if(!warned_of_regex) {
|
if(!warned_of_regex) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"=== Note: no wildcards get recognized besides single '*'\n");
|
"No wildcards get recognized besides single '*'");
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING",0);
|
||||||
warned_of_regex= 1;
|
warned_of_regex= 1;
|
||||||
}
|
}
|
||||||
if(Sregex_string(&(xorriso->re_constants[xorriso->re_fill]),adr_part,0)
|
if(Sregex_string(&(xorriso->re_constants[xorriso->re_fill]),adr_part,0)
|
||||||
@ -2445,9 +2446,8 @@ next_adr_part:;
|
|||||||
cpt++;
|
cpt++;
|
||||||
}
|
}
|
||||||
if(bonked) {
|
if(bonked) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text, "Your '..' bonked at the root directory.");
|
||||||
"=== Note: Your '..' bonked at the root directory.\n");
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING",0);
|
||||||
Xorriso_info(xorriso,0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Xorriso__bourne_to_reg(adr_start,xorriso->reg_expr,0); /* just for show */
|
Xorriso__bourne_to_reg(adr_start,xorriso->reg_expr,0); /* just for show */
|
||||||
@ -2485,14 +2485,15 @@ next_adr_part:;
|
|||||||
return(-1);
|
return(-1);
|
||||||
if(regcomp(&(xorriso->re[0]),xorriso->reg_expr,0)!=0) {
|
if(regcomp(&(xorriso->re[0]),xorriso->reg_expr,0)!=0) {
|
||||||
cannot_compile:;
|
cannot_compile:;
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text, "Cannot compile regular expression : %s",
|
||||||
"%s : cannot compile regular expression : %s\n",
|
xorriso->reg_expr);
|
||||||
xorriso->progname,xorriso->reg_expr);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY",0);
|
||||||
Xorriso_info(xorriso,0);
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
#else /* Xorriso_with_regeX */
|
#else /* Xorriso_with_regeX */
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
|
"No wildcards get recognized besides single '*'");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING",0);
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_info(xorriso,0);
|
||||||
if(Sregex_string(&(xorriso->re_constants[0]),adr,0)<=0)
|
if(Sregex_string(&(xorriso->re_constants[0]),adr,0)<=0)
|
||||||
return(-1);
|
return(-1);
|
||||||
@ -2866,6 +2867,12 @@ int Xorriso_exec(struct XorrisO *xorriso, char *cmd, int flag)
|
|||||||
int is_done= 0,argc= 0,widx= 0,cmd_l,pass,ret;
|
int is_done= 0,argc= 0,widx= 0,cmd_l,pass,ret;
|
||||||
|
|
||||||
cmd_l= strlen(cmd);
|
cmd_l= strlen(cmd);
|
||||||
|
if(cmd_l>SfileadrL) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Command for external process too long : %d (max %d)",
|
||||||
|
cmd_l, SfileadrL);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
|
}
|
||||||
for(pass=0;pass<2;pass++) {
|
for(pass=0;pass<2;pass++) {
|
||||||
is_done= 0;
|
is_done= 0;
|
||||||
widx= 0;
|
widx= 0;
|
||||||
@ -2900,12 +2907,11 @@ int Xorriso_exec(struct XorrisO *xorriso, char *cmd, int flag)
|
|||||||
for(widx=0; widx<cmd_l; widx++)
|
for(widx=0; widx<cmd_l; widx++)
|
||||||
if(cmd[widx]==0)
|
if(cmd[widx]==0)
|
||||||
cmd[widx]= ' ';
|
cmd[widx]= ' ';
|
||||||
sprintf(xorriso->info_text,"--- failed : %s\n",cmd);
|
sprintf(xorriso->info_text,"External process failed : %s",cmd);
|
||||||
Xorriso_info(xorriso,0);
|
if(errmsg[0]!=0)
|
||||||
if(errmsg[0]!=0) {
|
sprintf(xorriso->info_text+strlen(xorriso->info_text),
|
||||||
sprintf(xorriso->info_text,"--- message: %s\n",errmsg);
|
"message: %s\n",errmsg);
|
||||||
Xorriso_info(xorriso,1);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 1);
|
||||||
}
|
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
ret= 1;
|
ret= 1;
|
||||||
@ -2954,6 +2960,10 @@ int Xorriso_set_problem_status(struct XorrisO *xorriso, char *severity,
|
|||||||
|
|
||||||
|
|
||||||
/* Note: It is ok to submit xorriso->info_text as msg_text here. */
|
/* Note: It is ok to submit xorriso->info_text as msg_text here. */
|
||||||
|
/* flag:
|
||||||
|
bit0= for Xorriso_info() : use pager (as with result)
|
||||||
|
bit1= for Xorriso_info() : permission to suppress output
|
||||||
|
*/
|
||||||
int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
||||||
int error_code, char msg_text[], int os_errno,
|
int error_code, char msg_text[], int os_errno,
|
||||||
char severity[], int flag)
|
char severity[], int flag)
|
||||||
@ -2973,6 +2983,9 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Report problem event */
|
/* Report problem event */
|
||||||
|
|
||||||
|
/* >>> need option with threshhold for message reporting */
|
||||||
|
|
||||||
sprintf(prefix,"xorriso : %s : ", sev_text);
|
sprintf(prefix,"xorriso : %s : ", sev_text);
|
||||||
li= strlen(prefix);
|
li= strlen(prefix);
|
||||||
lt= strlen(msg_text);
|
lt= strlen(msg_text);
|
||||||
@ -2989,17 +3002,48 @@ int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
|||||||
}
|
}
|
||||||
xorriso->info_text[li+lt]= '\n';
|
xorriso->info_text[li+lt]= '\n';
|
||||||
xorriso->info_text[li+lt+1]= 0;
|
xorriso->info_text[li+lt+1]= 0;
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_info(xorriso,flag&3);
|
||||||
if(os_errno>0) {
|
if(os_errno>0) {
|
||||||
/* >>> report errno and strerror */;
|
sprintf(xorriso->info_text, "xorriso : system: %s (%d)\n",
|
||||||
|
strerror(os_errno), os_errno);
|
||||||
/* (errno > 0 ? strerror(errno) : "unknown error"), errno); */
|
Xorriso_info(xorriso,flag&3);
|
||||||
|
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_eval_problem_status(struct XorrisO *xorriso, int ret, int flag)
|
||||||
|
{
|
||||||
|
static int sev= 0;
|
||||||
|
|
||||||
|
if(sev==0)
|
||||||
|
Xorriso__text_to_sev("SORRY", &sev, 0);
|
||||||
|
|
||||||
|
Xorriso_process_msg_queues(xorriso, 0);
|
||||||
|
if(ret>0 && xorriso->problem_status <= 0)
|
||||||
|
return(1);
|
||||||
|
|
||||||
|
if(xorriso->problem_status < xorriso->abort_on_severity &&
|
||||||
|
xorriso->problem_status > 0) {
|
||||||
|
if(xorriso->problem_status >= sev) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"xorriso : NOTE : Tolerated problem event of severity '%s'\n",
|
||||||
|
xorriso->problem_status_text);
|
||||||
|
Xorriso_info(xorriso, 0);/* submit not as problem event */
|
||||||
|
}
|
||||||
|
ret= 2;
|
||||||
|
} else if(xorriso->problem_status > 0) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"xorriso : ABORT : -abort_on '%s' encountered '%s'",
|
||||||
|
xorriso->abort_on_text, xorriso->problem_status_text);
|
||||||
|
Xorriso_info(xorriso, 0);/* submit not as problem event */
|
||||||
|
ret= -1;
|
||||||
|
} else if(ret>0)
|
||||||
|
ret= 1;
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------- Options API ------------------------ */
|
/* ---------------------------- Options API ------------------------ */
|
||||||
|
|
||||||
|
|
||||||
@ -3104,9 +3148,9 @@ int Xorriso_option_cdi(struct XorrisO *xorriso, char *iso_rr_path, int flag)
|
|||||||
int ret, l;
|
int ret, l;
|
||||||
|
|
||||||
if (strlen(iso_rr_path)>sizeof(xorriso->wdi)) {
|
if (strlen(iso_rr_path)>sizeof(xorriso->wdi)) {
|
||||||
sprintf(xorriso->info_text,"%s: -cdi: iso_rr_path too long (%d > %d)\n",
|
sprintf(xorriso->info_text,"-cdi: iso_rr_path too long (%d > %d)",
|
||||||
xorriso->progname, strlen(iso_rr_path), sizeof(xorriso->wdi)-1);
|
strlen(iso_rr_path), sizeof(xorriso->wdi)-1);
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
sprintf(xorriso->info_text,"previous working directory:\n");
|
sprintf(xorriso->info_text,"previous working directory:\n");
|
||||||
@ -3148,9 +3192,9 @@ int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag)
|
|||||||
int ret, l;
|
int ret, l;
|
||||||
|
|
||||||
if (strlen(disk_path)>sizeof(xorriso->wdx)) {
|
if (strlen(disk_path)>sizeof(xorriso->wdx)) {
|
||||||
sprintf(xorriso->info_text,"%s: -cdx: disk_path too long (%d > %d)\n",
|
sprintf(xorriso->info_text,"-cdx: disk_path too long (%d > %d)",
|
||||||
xorriso->progname, strlen(disk_path), sizeof(xorriso->wdx)-1);
|
strlen(disk_path), sizeof(xorriso->wdx)-1);
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
sprintf(xorriso->info_text,"previous working directory on hard disk:\n");
|
sprintf(xorriso->info_text,"previous working directory on hard disk:\n");
|
||||||
@ -3166,13 +3210,14 @@ int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag)
|
|||||||
ret= 1;
|
ret= 1;
|
||||||
ret= Sfile_type(disk_path,1|4|8);
|
ret= Sfile_type(disk_path,1|4|8);
|
||||||
if(ret<0) {
|
if(ret<0) {
|
||||||
sprintf(xorriso->info_text,"-cdx: file not found :\n%s\n",disk_path);
|
sprintf(xorriso->info_text,"-cdx: file not found :\n%s",disk_path);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if(ret!=2) {
|
if(ret!=2) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"-cdx: file is not a directory :\n%s\n",disk_path);
|
"-cdx: file is not a directory :\n%s",disk_path);
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if(Sfile_str(xorriso->wdx,disk_path,0)<=0)
|
if(Sfile_str(xorriso->wdx,disk_path,0)<=0)
|
||||||
@ -3800,8 +3845,8 @@ int Xorriso_option_logfile(struct XorrisO *xorriso, char *channel,
|
|||||||
|
|
||||||
if(channel[0]==0) {
|
if(channel[0]==0) {
|
||||||
logfile_wrong_form:;
|
logfile_wrong_form:;
|
||||||
sprintf(xorriso->info_text,"--- Wrong form. Correct would be: -logfile \".\"|\"R\"|\"I\"|\"M\" file_address\n");
|
sprintf(xorriso->info_text,"Wrong form. Correct would be: -logfile \".\"|\"R\"|\"I\"|\"M\" file_address");
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
hflag= 2;
|
hflag= 2;
|
||||||
@ -3820,10 +3865,8 @@ logfile_wrong_form:;
|
|||||||
xorriso->logfile[channel_no][0]= 0;
|
xorriso->logfile[channel_no][0]= 0;
|
||||||
ret= Write_to_channel(fileadr,channel_no,hflag);
|
ret= Write_to_channel(fileadr,channel_no,hflag);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text, "Cannot open logfile: %s", fileadr);
|
||||||
"--- Cannot open logfile: %s\n %s\n",
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
fileadr,(errno>0?strerror(errno):"-unknown error-"));
|
|
||||||
Xorriso_info(xorriso,0);
|
|
||||||
} else if(!(hflag&(1<<15)))
|
} else if(!(hflag&(1<<15)))
|
||||||
if(Sfile_str(xorriso->logfile[channel_no], fileadr, 0)<=0)
|
if(Sfile_str(xorriso->logfile[channel_no], fileadr, 0)<=0)
|
||||||
return(-1);
|
return(-1);
|
||||||
@ -3906,8 +3949,8 @@ return:
|
|||||||
char **argv= NULL;
|
char **argv= NULL;
|
||||||
|
|
||||||
if(adr[0]==0) {
|
if(adr[0]==0) {
|
||||||
sprintf(xorriso->info_text,"--- Empty file name with -options_from_file\n");
|
sprintf(xorriso->info_text,"Empty file name given with -options_from_file");
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
Text_shellsafe(adr,shellsafe,0);
|
Text_shellsafe(adr,shellsafe,0);
|
||||||
@ -3956,9 +3999,9 @@ ex:;
|
|||||||
fclose(fp);
|
fclose(fp);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"--- error triggered by line %d of file:\n %s\n",
|
"error triggered by line %d of file:\n %s\n",
|
||||||
linecount,shellsafe);
|
linecount,shellsafe);
|
||||||
Xorriso_info(xorriso,1);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 1);
|
||||||
}
|
}
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
@ -3977,9 +4020,9 @@ int Xorriso_option_page(struct XorrisO *xorriso, int len, int width, int flag)
|
|||||||
{
|
{
|
||||||
if(len<0 || width<=0) {
|
if(len<0 || width<=0) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"--- Improper numeric value of arguments of -page: %d %d\n",
|
"Improper numeric value of arguments of -page: %d %d",
|
||||||
len, width);
|
len, width);
|
||||||
Xorriso_info(xorriso,1);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
xorriso->result_page_length= len;
|
xorriso->result_page_length= len;
|
||||||
@ -4032,9 +4075,9 @@ int Xorriso_option_prog(struct XorrisO *xorriso, char *name, int flag)
|
|||||||
{
|
{
|
||||||
if(strlen(name)>=sizeof(xorriso->progname)) {
|
if(strlen(name)>=sizeof(xorriso->progname)) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"--- Name too long with option -prog (%d > %d)\n",
|
"Name too long with option -prog (%d > %d)",
|
||||||
strlen(name), sizeof(xorriso->progname)-1);
|
strlen(name), sizeof(xorriso->progname)-1);
|
||||||
Xorriso_info(xorriso,1);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
if(Sfile_str(xorriso->progname,name,0)<=0)
|
if(Sfile_str(xorriso->progname,name,0)<=0)
|
||||||
@ -4634,7 +4677,7 @@ next_command:;
|
|||||||
"=== Input line beginning with '-' is not a known option\n");
|
"=== Input line beginning with '-' is not a known option\n");
|
||||||
sprintf(xorriso->info_text+strlen(xorriso->info_text),
|
sprintf(xorriso->info_text+strlen(xorriso->info_text),
|
||||||
"=== '%s'\n",cmd);
|
"=== '%s'\n",cmd);
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
|
||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -4644,19 +4687,11 @@ next_command:;
|
|||||||
sprintf(xorriso->info_text, "Ignored argument : '%s'", cmd);
|
sprintf(xorriso->info_text, "Ignored argument : '%s'", cmd);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0);
|
||||||
}
|
}
|
||||||
if(ret<=0) {
|
|
||||||
if(xorriso->problem_status < xorriso->abort_on_severity &&
|
ret= Xorriso_eval_problem_status(xorriso, ret, 0);
|
||||||
xorriso->problem_status > 0) {
|
if(ret<0)
|
||||||
sprintf(xorriso->info_text,
|
return(ret);
|
||||||
"xorriso: NOTE : Tolerated problem event of severity '%s'",
|
|
||||||
xorriso->problem_status_text);
|
|
||||||
Xorriso_info(xorriso, 0);/* submit as info output, not as problem event */
|
|
||||||
ret= 2;
|
|
||||||
} else if(xorriso->problem_status > 0) {
|
|
||||||
ret= -1; goto ex;
|
|
||||||
} else
|
|
||||||
goto ex;
|
|
||||||
}
|
|
||||||
if(*idx<argc)
|
if(*idx<argc)
|
||||||
goto next_command;
|
goto next_command;
|
||||||
|
|
||||||
@ -4873,6 +4908,7 @@ int Xorriso_main(int argc, char **argv)
|
|||||||
ret= Xorriso_startup_libraries(xorriso, 0);
|
ret= Xorriso_startup_libraries(xorriso, 0);
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
exit(4);
|
exit(4);
|
||||||
|
Xorriso_process_msg_queues(xorriso, 0);
|
||||||
|
|
||||||
/* Interpret startup file */
|
/* Interpret startup file */
|
||||||
if(!xorriso->no_rc) {
|
if(!xorriso->no_rc) {
|
||||||
@ -4897,6 +4933,7 @@ int Xorriso_main(int argc, char **argv)
|
|||||||
exit(6);
|
exit(6);
|
||||||
}
|
}
|
||||||
end_sucessfully:;
|
end_sucessfully:;
|
||||||
|
Xorriso_process_msg_queues(xorriso, 0);
|
||||||
Xorriso_destroy(&xorriso,0);
|
Xorriso_destroy(&xorriso,0);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,107 @@
|
|||||||
struct XorrisO;
|
struct XorrisO;
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------- Problem Status and Message API ------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
/** Submit a problem message to the xorriso problem reporting and handling
|
||||||
|
system. This will eventually increase problem status rank, which may
|
||||||
|
at certain stages in the program be pardoned and reset to 0.
|
||||||
|
The pardon is governed by Xorriso_option_abort_on() and by the anger
|
||||||
|
of the affected program part. If no pardon has been given, then the problem
|
||||||
|
status reaches the caller of option functions.
|
||||||
|
Problem status should be inquired by Xorriso_eval_problem_status() and be
|
||||||
|
reset before next option execution by Xorriso_set_problem_status().
|
||||||
|
The problem status itself does not cause the failure of option functions.
|
||||||
|
But in case of failures for other reasons, a remnant overly severe problem
|
||||||
|
status can cause overly harsh program reactions.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param error_code The unique error code of your message.
|
||||||
|
Submit 0 if you do not have reserved error codes within
|
||||||
|
the libburnia project.
|
||||||
|
@param msg_text Not more than 8196 characters of message text.
|
||||||
|
A final newline character gets appended automatically.
|
||||||
|
@param os_errno Eventual errno related to the message. Submit 0 if
|
||||||
|
the message is not related to a operating system error.
|
||||||
|
@param severity One of "ABORT", "FATAL", "SORRY", "WARNING", "HINT",
|
||||||
|
"NOTE", "UPDATE", "DEBUG". Defaults to "FATAL".
|
||||||
|
@param flag Bitfield for control purposes
|
||||||
|
bit0= use pager (as with result)
|
||||||
|
bit1= permission to suppress output
|
||||||
|
@return 1 if message was delivered, <=0 if failure
|
||||||
|
*/
|
||||||
|
int Xorriso_msgs_submit(struct XorrisO *xorriso,
|
||||||
|
int error_code, char msg_text[], int os_errno,
|
||||||
|
char severity[], int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Evaluate an advise whether to abort or whether to go on with option
|
||||||
|
processing. This should be called after any option function was processed.
|
||||||
|
It updates the problem status by processing the library message queues
|
||||||
|
and then it uses this status and the submitted return value ot the
|
||||||
|
option function to evaluate the situation.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param ret The return value of the prviously called option function
|
||||||
|
@param flag Unused yet. Submit 0.
|
||||||
|
@return Gives the advice:
|
||||||
|
2= pardon was given, go on
|
||||||
|
1= no problem, go on
|
||||||
|
0= function failed but xorriso would not abort, go on
|
||||||
|
<0= do abort
|
||||||
|
*/
|
||||||
|
int Xorriso_eval_problem_status(struct XorrisO *xorriso, int ret, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the current problem status of the xorriso handle.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param severity A severity text. Empty text resets to "No Problem".
|
||||||
|
@param flag Unused yet. Submit 0.
|
||||||
|
@return <=0 failure (e.g. wrong severity text), 1 success.
|
||||||
|
*/
|
||||||
|
int Xorriso_set_problem_status(struct XorrisO *xorriso, char *severity,
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/* The next two functions are part of Xorriso_eval_problem_status().
|
||||||
|
You may use them to build an own advisor function or to drain the
|
||||||
|
library message queues more frequently.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Obtain the current problem status of the xorriso handle.
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param severity The severity text matching the current problem status
|
||||||
|
@param flag Unused yet. Submit 0.
|
||||||
|
@return The severity rank number. 0= no problem occured.
|
||||||
|
*/
|
||||||
|
int Xorriso_get_problem_status(struct XorrisO *xorriso, char severity[80],
|
||||||
|
int flag);
|
||||||
|
|
||||||
|
|
||||||
|
/** Forward any pending messages from the library message queues to the
|
||||||
|
xorriso message system which puts out on info channel. This registers
|
||||||
|
the severity of the library events like the severity of a message submitted
|
||||||
|
via Xorriso_msgs_submit().
|
||||||
|
xorriso sets the message queues of the libraries to queuing "ALL".
|
||||||
|
So it is essential that they get
|
||||||
|
@param xorriso The environment handle
|
||||||
|
@param flag Unused yet. Submit 0.
|
||||||
|
@return 1 on success, <=0 if failure
|
||||||
|
*/
|
||||||
|
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------- Options API ------------------------ */
|
/* ---------------------------- Options API ------------------------ */
|
||||||
/* See man 1 xorriso for explanation of the particular options */
|
/* See man 1 xorriso for explanation of the particular options */
|
||||||
|
/*
|
||||||
|
Before each call to an option function, there should happen:
|
||||||
|
Xorriso_set_problem_status() with empty severity text.
|
||||||
|
|
||||||
|
After each call to an option function, there should happen:
|
||||||
|
Xorriso_eval_problem_status()
|
||||||
|
One should follow its eventual advice to abort.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/* Option -abort_on */
|
/* Option -abort_on */
|
||||||
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
|
int Xorriso_option_abort_on(struct XorrisO *xorriso, char *severity, int flag);
|
||||||
|
@ -123,8 +123,11 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int status_history_max; /* for -status long_history */
|
int status_history_max; /* for -status long_history */
|
||||||
|
|
||||||
/* >>> put -abort_on severity parameters here <<< */
|
/* >>> put -abort_on severity parameters here <<< */
|
||||||
char abort_on_severity[20];
|
int library_msg_direct_print;
|
||||||
|
char abort_on_text[20];
|
||||||
|
int abort_on_severity; /* A severity rank number as threshold */
|
||||||
|
int problem_status; /* Severity rank number. 0= no abort condition present */
|
||||||
|
char problem_status_text[20];
|
||||||
|
|
||||||
/* temporary search facilities */
|
/* temporary search facilities */
|
||||||
#ifdef Xorriso_with_regeX
|
#ifdef Xorriso_with_regeX
|
||||||
@ -142,7 +145,7 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
int is_dialog;
|
int is_dialog;
|
||||||
int bar_is_fresh;
|
int bar_is_fresh;
|
||||||
char pending_option[SfileadrL]; /* eventual option entered at page prompt */
|
char pending_option[SfileadrL]; /* eventual option entered at page prompt */
|
||||||
int request_to_abort;
|
int request_to_abort; /* abort a single operation like -ls, not the program */
|
||||||
double idle_time;
|
double idle_time;
|
||||||
int re_failed_at; /* mismatch position with structured_search */
|
int re_failed_at; /* mismatch position with structured_search */
|
||||||
int prepended_wd;
|
int prepended_wd;
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2007.10.16.210911"
|
#define Xorriso_timestamP "2007.10.17.130041"
|
||||||
|
@ -33,6 +33,5 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
|
|||||||
|
|
||||||
int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
|
int Xorriso__text_to_sev(char *severity_name, int *severity_number,int flag);
|
||||||
|
|
||||||
|
|
||||||
#endif /* Xorrisoburn_includeD */
|
#endif /* Xorrisoburn_includeD */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user