From 5038e2afb024b218cdcb176a49567fc82dc81791 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 24 Sep 2006 18:07:10 +0000 Subject: [PATCH] Made use of new message handling facility and removed first bugs --- cdrskin/cdrskin.c | 13 +++-------- cdrskin/cdrskin_timestamp.h | 2 +- libburn/init.c | 2 +- libburn/libdax_msgs.c | 6 +++-- libburn/libdax_msgs.h | 4 ++-- libburn/sg.c | 44 +++++++++++++++++++++++-------------- 6 files changed, 39 insertions(+), 32 deletions(-) diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index 4dcfa0e..83f9f6f 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -4454,14 +4454,7 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin, *exit_value= 0; *lib_initialized= 0; - printf("cdrskin: initializing libburn ..."); - fflush(stdout); - if(burn_initialize()) { - printf(" ok\n"); - fflush(stdout); - } else { - printf(" failed\n"); - fflush(stdout); + if(!burn_initialize()) { fprintf(stderr,"cdrskin : FATAL : initialization of libburn failed\n"); {*exit_value= 11; goto ex;} } @@ -4496,7 +4489,7 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin, else if(skin->preskin->abort_handler==2) Cleanup_set_handlers(skin,(Cleanup_app_handler_T) Cdrskin_abort_handler,2|8); - printf("cdrskin: scanning for devices ..."); + printf("cdrskin: scanning for devices ...\n"); fflush(stdout); while (!burn_drive_scan(&(skin->drives), &(skin->n_drives))) { if(skin->verbosity>=Cdrskin_verbose_debuG) @@ -4504,7 +4497,7 @@ int Cdrskin_create(struct CdrskiN **o, struct CdrpreskiN **preskin, /* >>> ??? wait a while ? */ /* >>> ??? set a timeout ? */ } - printf(" done\n"); + printf("cdrskin: ... scanning for devices done\n"); fflush(stdout); ex:; return((*exit_value)==0); diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 4446da9..b298b66 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2006.09.24.171706" +#define Cdrskin_timestamP "2006.09.24.180836" diff --git a/libburn/init.c b/libburn/init.c index b546681..58e72e4 100644 --- a/libburn/init.c +++ b/libburn/init.c @@ -18,7 +18,7 @@ /* ts A60924 : a new message handling facility */ #include "libdax_msgs.h" -static struct libdax_msgs *libdax_messenger= NULL; +struct libdax_msgs *libdax_messenger= NULL; int burn_running = 0; diff --git a/libburn/libdax_msgs.c b/libburn/libdax_msgs.c index 04dc943..43b578f 100644 --- a/libburn/libdax_msgs.c +++ b/libburn/libdax_msgs.c @@ -270,7 +270,7 @@ int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code, int os_errno, int flag) { int ret; - char *textpt,*sev_name,sev_text[81]; + char *textpt,*sev_name,sev_text[81],error_buf[1024]; struct libdax_msgs_item *item= NULL; if(severity >= m->print_severity) { @@ -285,7 +285,9 @@ int libdax_msgs_submit(struct libdax_msgs *m, int driveno, int error_code, fprintf(stderr,"%s%s%s\n",m->print_id,sev_text,textpt); if(os_errno!=0) - perror(m->print_id); + fprintf(stderr,"%s( Most recent system error: %d '%s' )\n", + m->print_id,os_errno,strerror_r(os_errno, error_buf,1024)); + } if(severity < m->queue_severity) return(0); diff --git a/libburn/libdax_msgs.h b/libburn/libdax_msgs.h index 2414194..d6ca852 100644 --- a/libburn/libdax_msgs.h +++ b/libburn/libdax_msgs.h @@ -168,8 +168,8 @@ int libdax_msgs_destroy(struct libdax_msgs **m, int flag); occasions but those should be equivalent out of the view of a libdax application. (E.g. "cannot open ATA drive" versus "cannot open SCSI drive" would be equivalent.) - @param severity The LIBDAX_MSGS_SEVERITY_* of the event. - @param priority The LIBDAX_MSGS_PRIORITY_* number of the event. + @param severity The LIBDAX_MSGS_SEV_* of the event. + @param priority The LIBDAX_MSGS_PRIO_* number of the event. @param msg_text Printable and human readable message text. @param os_errno Eventual error code from operating system (0 if none) @param flag Bitfield for control purposes (unused yet, submit 0) diff --git a/libburn/sg.c b/libburn/sg.c index 3cfdc8a..e2139cc 100644 --- a/libburn/sg.c +++ b/libburn/sg.c @@ -23,6 +23,9 @@ #include "toc.h" #include "util.h" +#include "libdax_msgs.h" +extern struct libdax_msgs *libdax_messenger; + static void enumerate_common(char *fname, int host_no, int channel_no, int target_no, int lun_no); @@ -115,6 +118,27 @@ int sg_is_enumerable_adr(char *adr) } +/* ts A60924 */ +int sg_handle_busy_drive(char *fname, int os_errno) +{ + char msg[4096]; + + /* ts A60814 : i saw no way to do this more nicely */ + if (burn_sg_open_abort_busy) { + fprintf(stderr, + "\nlibburn: FATAL : Application triggered abort on busy drive '%s'\n", + fname); + assert("drive busy" == "non fatal"); + } + + /* ts A60924 : now reporting to libdax_msgs */ + sprintf(msg, "Cannot open busy drive '%s'", fname); + libdax_msgs_submit(libdax_messenger, -1, 0x00020001, + LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_LOW, + msg, os_errno, 0); + return 1; +} + void ata_enumerate(void) { struct hd_driveid tm; @@ -152,14 +176,8 @@ void ata_enumerate(void) "\nlibburn: experimental: fname= %s , errno= %d\n", fname,errno); */ - /* ts A60814 : i see no way to do this more nicely */ - if (errno == EBUSY && burn_sg_open_abort_busy) { - fprintf(stderr, - "\nlibburn: FATAL : Application triggered abort on busy drive '%s'\n", - fname); - /* <<< maybe one should plainly exit here */ - assert("drive busy" == "non fatal"); - } + if (errno == EBUSY) + sg_handle_busy_drive(fname, errno); continue; } /* found a drive */ @@ -230,14 +248,8 @@ void sg_enumerate(void) "\n cdrskin: experimental: fname= %s , errno= %d\n", fname,errno); */ - /* ts A60814 : i see no way to do this more nicely */ - if (errno == EBUSY && burn_sg_open_abort_busy) { - fprintf(stderr, - "\nlibburn: FATAL : Application triggered abort on busy drive '%s'\n", - fname); - /* <<< maybe one should plainly exit here */ - assert("drive busy" == "non fatal"); - } + if (errno == EBUSY) + sg_handle_busy_drive(fname, errno); continue; } /* found a drive */