Worked on failure severities, message system, program abort decision

This commit is contained in:
Thomas Schmitt 2007-10-17 13:02:32 +00:00
parent b4e4b8116d
commit 67fba52fb2
1 changed files with 64 additions and 43 deletions

View File

@ -49,6 +49,7 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag)
{ {
int ret; int ret;
char *handler_prefix= NULL; char *handler_prefix= NULL;
char *queue_sev, *print_sev;
sprintf(xorriso->info_text, "Starting up libraries ...\n"); sprintf(xorriso->info_text, "Starting up libraries ...\n");
Xorriso_info(xorriso, 0); Xorriso_info(xorriso, 0);
@ -62,19 +63,24 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag)
} }
ret= isoburn_initialize(); ret= isoburn_initialize();
if(ret==0) { if(ret==0) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text, "Cannot initialize libraries"); sprintf(xorriso->info_text, "Cannot initialize libraries");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
free(handler_prefix); free(handler_prefix);
return(0); return(0);
} }
/* >>> need option for controlling this in XorrisO */ queue_sev= "DEBUG";
/* >>> change from printing to queuing */ if(xorriso->library_msg_direct_print) {
iso_msgs_set_severities("NEVER", "DEBUG", "libisofs : ");
burn_msgs_set_severities("NEVER", "DEBUG", "libburn : "); /* >>> need option for controlling this in XorrisO.
See also Xorriso_msgs_submit */;
print_sev= "DEBUG";
} else
print_sev= "NEVER";
iso_msgs_set_severities(queue_sev, print_sev, "libisofs : ");
burn_msgs_set_severities(queue_sev, print_sev, "libburn : ");
/* ??? >>> do we want united queues ? */ /* ??? >>> do we want united queues ? */
/* burn_set_messenger(iso_get_messenger()); */ /* burn_set_messenger(iso_get_messenger()); */
@ -82,6 +88,7 @@ int Xorriso_startup_libraries(struct XorrisO *xorriso, int flag)
sprintf(handler_prefix, "%s : ", xorriso->progname); sprintf(handler_prefix, "%s : ", xorriso->progname);
burn_set_signal_handling(handler_prefix, NULL, 0); burn_set_signal_handling(handler_prefix, NULL, 0);
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text, "Library startup done.\n"); sprintf(xorriso->info_text, "Library startup done.\n");
Xorriso_info(xorriso, 0); Xorriso_info(xorriso, 0);
free(handler_prefix); free(handler_prefix);
@ -113,10 +120,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
return(ret); return(ret);
ret= isoburn_drive_scan_and_grab(&dinfo, adr, 1); ret= isoburn_drive_scan_and_grab(&dinfo, adr, 1);
Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) { if(ret<=0) {
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text,"Cannot aquire drive '%s'", adr); sprintf(xorriso->info_text,"Cannot aquire drive '%s'", adr);
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);
@ -132,7 +137,8 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
/* check for invalid state */ /* check for invalid state */
state= isoburn_disc_get_status(drive); state= isoburn_disc_get_status(drive);
Xorriso_process_msg_queues(xorriso,0);
/* >>> show drive and media status */; /* >>> show drive and media status */;
if(state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) { if(state != BURN_DISC_BLANK && state != BURN_DISC_APPENDABLE) {
@ -149,9 +155,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
ropts.mode= 0555; ropts.mode= 0555;
if(isoburn_read_volset(drive, &ropts, &volset) <= 0) { if(isoburn_read_volset(drive, &ropts, &volset) <= 0) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text,"Caninot read ISO image volset"); sprintf(xorriso->info_text,"Caninot read ISO image volset");
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 ex; ret= 0; goto ex;
@ -164,6 +168,7 @@ ex:
/* >>> ??? give up not-so-suitable drive ? */; /* >>> ??? give up not-so-suitable drive ? */;
} }
Xorriso_process_msg_queues(xorriso,0);
return(ret); return(ret);
} }
@ -204,6 +209,7 @@ int Xorriso_give_up_drive(struct XorrisO *xorriso, int flag)
xorriso->out_drive_handle= NULL; xorriso->out_drive_handle= NULL;
} }
Xorriso_process_msg_queues(xorriso,0);
return(1); return(1);
} }
@ -248,9 +254,7 @@ int Xorriso_write_growing(struct XorrisO *xorriso, int flag)
/* >>> -fs : isoburn_prepare_disc() needs fifo parameters */ /* >>> -fs : isoburn_prepare_disc() needs fifo parameters */
if (isoburn_prepare_disc(drive, &disc, &sopts) <= 0) { if (isoburn_prepare_disc(drive, &disc, &sopts) <= 0) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text,"Cannot prepare disc"); sprintf(xorriso->info_text,"Cannot prepare disc");
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);
@ -258,9 +262,7 @@ int Xorriso_write_growing(struct XorrisO *xorriso, int flag)
burn_options= burn_write_opts_new(drive); burn_options= burn_write_opts_new(drive);
if(burn_options==NULL) { if(burn_options==NULL) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text,"Cannot allocate option set"); sprintf(xorriso->info_text,"Cannot allocate option set");
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);
@ -278,13 +280,17 @@ int Xorriso_write_growing(struct XorrisO *xorriso, int flag)
return(ret); return(ret);
ret= isoburn_activate_session(drive); ret= isoburn_activate_session(drive);
Xorriso_process_msg_queues(xorriso,0);
if(ret<=0) { if(ret<=0) {
fprintf(stderr, "--- Could not write new set olf volume descriptors\n"); sprintf(xorriso->info_text,
"Could not write new set of volume descriptors");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
return(ret); return(ret);
} }
/* >>> cleanup disc ? */ /* >>> cleanup disc ? */
Xorriso_process_msg_queues(xorriso,0);
return(1); return(1);
} }
@ -311,9 +317,7 @@ int Xorriso_pacifier_loop(struct XorrisO *xorriso, struct burn_drive *drive,
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "UPDATE", 0);
for(i= 0; i<10; i++) { for(i= 0; i<10; i++) {
Xorriso_process_msg_queues(xorriso, 0);
/* >>> check message system of libburn */;
usleep(100000); usleep(100000);
} }
} }
@ -333,9 +337,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
struct stat stbuf; struct stat stbuf;
if(xorriso->in_volset_handle==NULL) { if(xorriso->in_volset_handle==NULL) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text,"No volset is loaded."); sprintf(xorriso->info_text,"No volset is loaded.");
if(xorriso->indev[0]==0) if(xorriso->indev[0]==0)
sprintf(xorriso->info_text," No -dev or -indev is selected."); sprintf(xorriso->info_text," No -dev or -indev is selected.");
@ -353,9 +355,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
(struct iso_volset *) xorriso->in_volset_handle, 0); (struct iso_volset *) xorriso->in_volset_handle, 0);
if(lstat(disk_path, &stbuf) == -1) { if(lstat(disk_path, &stbuf) == -1) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Cannot determine attributes of source file '%s'",disk_path); "Cannot determine attributes of source file '%s'",disk_path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, errno, "SORRY", 0);
@ -364,9 +364,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
if(S_ISDIR(stbuf.st_mode)) if(S_ISDIR(stbuf.st_mode))
is_dir= 1; is_dir= 1;
else if(!(S_ISREG(stbuf.st_mode) || S_ISLNK(stbuf.st_mode))) { else if(!(S_ISREG(stbuf.st_mode) || S_ISLNK(stbuf.st_mode))) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Source file '%s' is of non-supported file type", disk_path); "Source file '%s' is of non-supported file type", disk_path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "SORRY", 0);
@ -386,9 +384,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
dir= iso_volume_get_root(volume); dir= iso_volume_get_root(volume);
if(dir==NULL) { if(dir==NULL) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"While grafting '%s' : no root node available", img_path); "While grafting '%s' : no root node available", img_path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
@ -411,13 +407,13 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
node= iso_tree_volume_path_to_node(volume,path); node= iso_tree_volume_path_to_node(volume,path);
if(node!=NULL) { if(node!=NULL) {
if(iso_tree_node_get_type(node)!=LIBISO_NODE_DIR) { if(iso_tree_node_get_type(node)!=LIBISO_NODE_DIR) {
Xorriso_process_msg_queues(xorriso,0);
if(done) { if(done) {
/* >>> handle overwrite situation */; /* >>> handle overwrite situation */;
} }
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"While grafting '%s' : '%s' exists and is not a directory", "While grafting '%s' : '%s' exists and is not a directory",
img_path, path); img_path, path);
@ -428,9 +424,7 @@ int Xorriso_graft_in(struct XorrisO *xorriso, char *disk_path, char *img_path,
} else if(is_dir || !done) { } else if(is_dir || !done) {
dir= iso_tree_add_dir(dir, apt); dir= iso_tree_add_dir(dir, apt);
if(dir==NULL) { if(dir==NULL) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
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);
@ -444,9 +438,7 @@ attach_source:;
} else { } else {
node= iso_tree_add_node(dir, disk_path); node= iso_tree_add_node(dir, disk_path);
if(node == NULL) { if(node == NULL) {
Xorriso_process_msg_queues(xorriso,0);
/* >>> fetch all messages from library message queue first */
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"While grafting '%s'='%s' : libisofs_errno = %d", "While grafting '%s'='%s' : libisofs_errno = %d",
img_path, disk_path, libisofs_errno); img_path, disk_path, libisofs_errno);
@ -458,6 +450,7 @@ attach_source:;
} else } else
*npt= '/'; *npt= '/';
} }
Xorriso_process_msg_queues(xorriso,0);
sprintf(xorriso->info_text, sprintf(xorriso->info_text,
"Added %s '%s'='%s'", (is_dir ? "directory" : "node"), "Added %s '%s'='%s'", (is_dir ? "directory" : "node"),
img_path, disk_path); img_path, disk_path);
@ -479,3 +472,31 @@ int Xorriso__text_to_sev(char *severity_name, int *severity_number, int flag)
} }
int Xorriso_process_msg_queues(struct XorrisO *xorriso, int flag)
{
int ret, error_code= 0, os_errno= 0, count= 0, pass;
char severity[80];
for(pass= 0; pass< 2; pass++) {
while(1) {
if(pass==0)
ret= iso_msgs_obtain("ALL", &error_code, xorriso->info_text, &os_errno,
severity);
else
ret= burn_msgs_obtain("ALL", &error_code, xorriso->info_text, &os_errno,
severity);
if(ret<=0)
break;
Xorriso_msgs_submit(xorriso, error_code, xorriso->info_text, os_errno,
severity, 0);
count++;
}
}
if(xorriso->library_msg_direct_print && count>0) {
sprintf(xorriso->info_text," (%d library messages repeated by xorriso)\n",
count);
Xorriso_info(xorriso, 0);
}
return(1);
}