ITS#3764 add signal handlers so slapcat will cleanup if interrupted.

(Just slapcat for now, other tools don't seem to be critical.)
This commit is contained in:
Howard Chu 2005-06-10 20:14:32 +00:00
parent 43c6253ab7
commit 8fe7576158

View File

@ -32,6 +32,14 @@
#include "slapcommon.h"
#include "ldif.h"
static int gotsig;
static RETSIGTYPE
slapcat_sig( int sig )
{
gotsig=1;
}
int
slapcat( int argc, char **argv )
{
@ -42,6 +50,15 @@ slapcat( int argc, char **argv )
slap_tool_init( progname, SLAPCAT, argc, argv );
#ifdef SIGPIPE
(void) SIGNAL( SIGPIPE, slapcat_sig );
#endif
#ifdef SIGHUP
(void) SIGNAL( SIGHUP, slapcat_sig );
#endif
(void) SIGNAL( SIGINT, slapcat_sig );
(void) SIGNAL( SIGTERM, slapcat_sig );
if( !be->be_entry_open ||
!be->be_entry_close ||
!be->be_entry_first ||
@ -59,15 +76,19 @@ slapcat( int argc, char **argv )
exit( EXIT_FAILURE );
}
op.o_bd = be;
for ( id = be->be_entry_first( be );
id != NOID;
id = be->be_entry_next( be ) )
{
char *data;
int len;
Entry* e = be->be_entry_get( be, id );
op.o_bd = be;
Entry* e;
if ( gotsig )
break;
e = be->be_entry_get( be, id );
if ( e == NULL ) {
printf("# no data for entry id=%08lx\n\n", (long) id );
rc = EXIT_FAILURE;