summaryrefslogtreecommitdiffstats
path: root/src/base/cmd
diff options
context:
space:
mode:
authorBaruch Sterin <baruchs@gmail.com>2011-02-01 11:13:53 -0800
committerBaruch Sterin <baruchs@gmail.com>2011-02-01 11:13:53 -0800
commitb538a5fad096764a686a68f843f74ee36d3c7ef1 (patch)
treebdeacf8e2427a12ecb5e047bf865c44b6ffc003a /src/base/cmd
parent624af674a0e7f1a675917afaaf371db6a5588821 (diff)
downloadabc-b538a5fad096764a686a68f843f74ee36d3c7ef1.tar.gz
abc-b538a5fad096764a686a68f843f74ee36d3c7ef1.tar.bz2
abc-b538a5fad096764a686a68f843f74ee36d3c7ef1.zip
1. Replace system() with a function that responds to SIGINT. 2. Add functions to cleanup temporary files on SIGINT. 3. Fix bugs related to signal handling.
Diffstat (limited to 'src/base/cmd')
-rw-r--r--src/base/cmd/cmd.c9
-rw-r--r--src/base/cmd/cmdLoad.c3
-rw-r--r--src/base/cmd/cmdPlugin.c23
3 files changed, 17 insertions, 18 deletions
diff --git a/src/base/cmd/cmd.c b/src/base/cmd/cmd.c
index 47b031bc..15cbdda5 100644
--- a/src/base/cmd/cmd.c
+++ b/src/base/cmd/cmd.c
@@ -27,6 +27,7 @@
#include "abc.h"
#include "mainInt.h"
#include "cmdInt.h"
+#include "utilSignal.h"
ABC_NAMESPACE_IMPL_START
@@ -1557,7 +1558,7 @@ int CmdCommandSis( Abc_Frame_t * pAbc, int argc, char **argv )
strcat( Command, "\"" );
// call SIS
- if ( system( Command ) )
+ if ( Util_SignalSystem( Command ) )
{
fprintf( pErr, "The following command has returned non-zero exit status:\n" );
fprintf( pErr, "\"%s\"\n", Command );
@@ -1700,7 +1701,7 @@ int CmdCommandMvsis( Abc_Frame_t * pAbc, int argc, char **argv )
strcat( Command, "\"" );
// call MVSIS
- if ( system( Command ) )
+ if ( Util_SignalSystem( Command ) )
{
fprintf( pErr, "The following command has returned non-zero exit status:\n" );
fprintf( pErr, "\"%s\"\n", Command );
@@ -1912,7 +1913,7 @@ int CmdCommandCapo( Abc_Frame_t * pAbc, int argc, char **argv )
}
// call Capo
- if ( system( Command ) )
+ if ( Util_SignalSystem( Command ) )
{
fprintf( pErr, "The following command has returned non-zero exit status:\n" );
fprintf( pErr, "\"%s\"\n", Command );
@@ -1964,7 +1965,7 @@ int CmdCommandCapo( Abc_Frame_t * pAbc, int argc, char **argv )
#else
{
sprintf( Command, "%s %s ", pProgNameGnuplot, pPlotFileName );
- if ( system( Command ) == -1 )
+ if ( Util_SignalSystem( Command ) == -1 )
{
fprintf( stdout, "Cannot execute \"%s\".\n", Command );
goto usage;
diff --git a/src/base/cmd/cmdLoad.c b/src/base/cmd/cmdLoad.c
index 7a83385c..8ff03282 100644
--- a/src/base/cmd/cmdLoad.c
+++ b/src/base/cmd/cmdLoad.c
@@ -22,6 +22,7 @@
#include "mainInt.h"
#include "cmd.h"
#include "cmdInt.h"
+#include "utilSignal.h"
ABC_NAMESPACE_IMPL_START
@@ -72,7 +73,7 @@ int CmdCommandLoad( Abc_Frame_t * pAbc, int argc, char ** argv )
}
Vec_StrPush( vCommand, 0 );
// run the command line
- if ( system( Vec_StrArray(vCommand) ) )
+ if ( Util_SignalSystem( Vec_StrArray(vCommand) ) )
{
Abc_Print( -1, "The following command has returned non-zero exit status:\n" );
Abc_Print( -1, "\"%s\"\n", Vec_StrArray(vCommand) );
diff --git a/src/base/cmd/cmdPlugin.c b/src/base/cmd/cmdPlugin.c
index 7375eb42..116687c7 100644
--- a/src/base/cmd/cmdPlugin.c
+++ b/src/base/cmd/cmdPlugin.c
@@ -29,6 +29,7 @@
#include "mainInt.h"
#include "cmd.h"
#include "cmdInt.h"
+#include "utilSignal.h"
ABC_NAMESPACE_IMPL_START
@@ -111,8 +112,6 @@ command, then we add a new object for the new action.
*/
-extern int tmpFile(const char* prefix, const char* suffix, char** out_name);
-
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
////////////////////////////////////////////////////////////////////////
@@ -366,7 +365,7 @@ int Cmd_CommandAbcPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
fclose( pFile );
// create temp file
- fd = tmpFile( "__abctmp_", ".aig", &pFileIn );
+ fd = Util_SignalTmpFile( "__abctmp_", ".aig", &pFileIn );
if ( fd == -1 )
{
Abc_Print( -1, "Cannot create a temporary file.\n" );
@@ -379,7 +378,7 @@ int Cmd_CommandAbcPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
#endif
// create temp file
- fd = tmpFile( "__abctmp_", ".out", &pFileOut );
+ fd = Util_SignalTmpFile( "__abctmp_", ".out", &pFileOut );
if ( fd == -1 )
{
ABC_FREE( pFileIn );
@@ -437,7 +436,7 @@ int Cmd_CommandAbcPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
//printf( "Running command line: %s\n", Vec_StrArray(vCommand) );
clk = clock();
- if ( system( Vec_StrArray(vCommand) ) )
+ if ( Util_SignalSystem( Vec_StrArray(vCommand) ) )
{
Abc_Print( -1, "The following command has returned non-zero exit status:\n" );
Abc_Print( -1, "\"%s\"\n", Vec_StrArray(vCommand) );
@@ -516,11 +515,9 @@ int Cmd_CommandAbcPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
// clean up
- if ( !fLeaveFiles )
- {
- remove( pFileIn );
- remove( pFileOut );
- }
+ Util_SignalTmpFileRemove( pFileIn, fLeaveFiles );
+ Util_SignalTmpFileRemove( pFileOut, fLeaveFiles );
+
ABC_FREE( pFileIn );
ABC_FREE( pFileOut );
return 0;
@@ -565,7 +562,7 @@ int Cmd_CommandAbcLoadPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
fclose( pFile );
// create temp file
- fd = tmpFile( "__abctmp_", ".txt", &pTempFile );
+ fd = Util_SignalTmpFile( "__abctmp_", ".txt", &pTempFile );
if ( fd == -1 )
{
Abc_Print( -1, "Cannot create a temporary file.\n" );
@@ -581,7 +578,7 @@ int Cmd_CommandAbcLoadPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
pCommandLine = ABC_ALLOC( char, 100 + strlen(pStrDirBin) + strlen(pTempFile) );
// sprintf( pCommandLine, "%s -abc -list-commands > %s", pStrDirBin, pTempFile );
sprintf( pCommandLine, "%s -abc -list-commands > %s", pStrDirBin, pTempFile );
- RetValue = system( pCommandLine );
+ RetValue = Util_SignalSystem( pCommandLine );
if ( RetValue == -1 )
{
Abc_Print( -1, "Command \"%s\" did not succeed.\n", pCommandLine );
@@ -610,7 +607,7 @@ int Cmd_CommandAbcLoadPlugIn( Abc_Frame_t * pAbc, int argc, char ** argv )
printf( "Creating command %s with binary %s\n", pBuffer, pStrDirBin );
}
fclose( pFile );
- remove( pTempFile );
+ Util_SignalTmpFileRemove( pTempFile, 0 );
ABC_FREE( pTempFile );
return 0;
usage: