diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index 6068abf..c69f657 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2013.06.28.104316" +#define Cdrskin_timestamP "2013.07.01.155958" diff --git a/libburn/cleanup.c b/libburn/cleanup.c index c52bf44..7d15163 100644 --- a/libburn/cleanup.c +++ b/libburn/cleanup.c @@ -133,15 +133,27 @@ static void Cleanup_handler_generic(int signum) } +static char *Cleanup_signo_to_name(int signo) +{ + int i; + for(i= 0; i < signal_list_count; i++) + if(signal_list[i] == signo) + return(signal_name_list[i]); + return(""); +} + + int Cleanup_set_handlers(void *handle, Cleanup_app_handler_T handler, int flag) /* bit0= set to default handlers bit1= set to ignore bit2= set cleanup_perform_app_handler_first bit3= set SIGABRT to handler (makes sense with bits 0 or 1) + bit8= set SIGPIPE to SIGIGN */ { int i,j,max_sig= -1,min_sig= 0x7fffffff; + char *sig_name; sighandler_t sig_handler; cleanup_msg[0]= 0; @@ -172,8 +184,17 @@ int Cleanup_set_handlers(void *handle, Cleanup_app_handler_T handler, int flag) if(i==non_signal_list[j]) break; if(j>=non_signal_list_count) { - if(i==SIGABRT && (flag&8)) + /* Avoid to use particular SIG macros which might not be defined. + If ithey are defined, then their names are in the name list. + */ + if(flag & (8 | 256)) + sig_name= Cleanup_signo_to_name(i); + else + sig_name= ""; + if((flag & 8) && strcmp(sig_name, "SIGABRT") == 0) signal(i,Cleanup_handler_generic); + else if((flag & 256) && strcmp(sig_name, "SIGPIPE") == 0) + signal(i, SIG_IGN); else signal(i,sig_handler); } diff --git a/libburn/init.c b/libburn/init.c index 1c038f0..97d0098 100644 --- a/libburn/init.c +++ b/libburn/init.c @@ -549,7 +549,7 @@ void burn_set_signal_handling(void *handle, burn_abort_handler_t handler, if(burn_builtin_signal_action == 0) burn_builtin_signal_action = 1; Cleanup_set_handlers(handle, (Cleanup_app_handler_T) handler, - (mode & 15) | 4); + (mode & 15) | 4 | (mode & 256)); burn_global_signal_handle = handle; burn_global_signal_handler = handler; } diff --git a/libburn/libburn.h b/libburn/libburn.h index 1270955..3a4674b 100644 --- a/libburn/libburn.h +++ b/libburn/libburn.h @@ -3771,6 +3771,9 @@ typedef int (*burn_abort_handler_t)(void *handle, int signum, int flag); drives to become idle. E.g. by calling burn_abort(>0). 4 Like 3, but without calling burn_abort(-1). Only the indicator of burn_is_aborting() gets set. + bit8: @since 1.3.2 + try to ignore SIGPIPE (regardless of bit0 - bit3) + @since 0.2.6 */ void burn_set_signal_handling(void *handle, burn_abort_handler_t handler,