summaryrefslogtreecommitdiffstats
path: root/zdiff.cc
diff options
context:
space:
mode:
Diffstat (limited to 'zdiff.cc')
-rw-r--r--zdiff.cc42
1 files changed, 15 insertions, 27 deletions
diff --git a/zdiff.cc b/zdiff.cc
index d01f492..b9c4c77 100644
--- a/zdiff.cc
+++ b/zdiff.cc
@@ -122,9 +122,8 @@ void show_help() throw()
int open_instream( const std::string & input_filename ) throw()
{
int infd = open( input_filename.c_str(), O_RDONLY | o_binary );
- if( infd < 0 && verbosity >= 0 )
- std::fprintf( stderr, "%s: Can't open input file `%s': %s.\n",
- util_name, input_filename.c_str(), std::strerror( errno ) );
+ if( infd < 0 )
+ show_error2( "Can't open input file", input_filename.c_str() );
return infd;
}
@@ -169,7 +168,7 @@ const char * my_basename( const char * filename ) throw()
}
-void remove_fifos() throw()
+extern "C" void remove_fifos() throw()
{
if( fifonames[0].size() )
{ std::remove( fifonames[0].c_str() ); fifonames[0].clear(); }
@@ -209,9 +208,7 @@ bool set_fifonames( const std::string filenames[2] )
if( mkfifo( fifonames[i].c_str(), S_IRUSR | S_IWUSR ) == 0 )
continue;
}
- if( verbosity >= 0 )
- std::fprintf( stderr, "%s: Can't create FIFO `%s': %s.\n",
- util_name, fifonames[i].c_str(), std::strerror( errno ) );
+ show_error2( "Can't create FIFO", fifonames[i].c_str() );
return false;
}
return true;
@@ -251,30 +248,23 @@ bool set_data_feeder( const std::string & fifoname, const int infd,
close( fda[0] ) == 0 && close( fda[1] ) == 0 &&
close( outfd ) == 0 )
execlp( file_type.c_str(), file_type.c_str(), "-cdfq", (char *)0 );
- if( verbosity >= 0 )
- std::fprintf( stderr, "%s: Can't exec `%s': %s.\n",
- util_name, file_type.c_str(), std::strerror( errno ) );
+ show_exec_error( file_type.c_str() );
_exit( 2 );
}
if( pid2 < 0 )
- {
- if( verbosity >= 0 )
- std::fprintf( stderr, "%s: Can't fork `%s': %s.\n",
- util_name, file_type.c_str(), std::strerror( errno ) );
- _exit( 2 );
- }
+ { show_fork_error( file_type.c_str() ); _exit( 2 ); }
if( close( fda[0] ) != 0 ||
!feed_data( infd, fda[1], magic_data, magic_size ) )
_exit( 2 );
if( close( fda[1] ) != 0 )
- { show_error( "Can't close output of feeder", errno ); _exit( 2 ); }
+ { show_close_error( "data feeder" ); _exit( 2 ); }
_exit( wait_for_child( pid2, file_type.c_str() ) );
}
// parent
close( fda[0] ); close( fda[1] );
if( pid < 0 )
- { show_error( "Can't fork decompressor feeder", errno ); return false; }
+ { show_fork_error( "decompressor feeder" ); return false; }
*pidp = pid;
}
else // not compressed
@@ -293,12 +283,12 @@ bool set_data_feeder( const std::string & fifoname, const int infd,
if( !feed_data( infd, outfd, magic_data, magic_size ) )
_exit( 2 );
if( close( outfd ) != 0 )
- { show_error( "Can't close output of feeder", errno ); _exit( 2 ); }
+ { show_close_error( "data feeder" ); _exit( 2 ); }
_exit( 0 );
}
// parent
if( pid < 0 )
- { show_error( "Can't fork data feeder", errno ); return false; }
+ { show_fork_error( "data feeder" ); return false; }
*pidp = pid;
}
return true;
@@ -431,7 +421,7 @@ int main( const int argc, const char * const argv[] )
if( diff_pid == 0 ) // child (diff)
{
const char ** const argv = new const char *[diff_args.size()+5];
- argv[0] = "diff";
+ argv[0] = DIFF;
for( unsigned int i = 0; i < diff_args.size(); ++i )
argv[i+1] = diff_args[i];
argv[diff_args.size()+1] = "--";
@@ -439,19 +429,19 @@ int main( const int argc, const char * const argv[] )
argv[diff_args.size()+3] = fifonames[1].c_str();
argv[diff_args.size()+4] = 0;
execvp( argv[0], (char **)argv );
- show_error( "Can't exec `diff'." );
+ show_exec_error( DIFF );
_exit( 2 );
}
// parent
if( diff_pid < 0 )
- { show_error( "Can't fork `diff'", errno ); return 2; }
+ { show_fork_error( DIFF ); return 2; }
pid_t pid[2];
if( !set_data_feeder( fifonames[0], infd[0], &pid[0] ) ||
!set_data_feeder( fifonames[1], infd[1], &pid[1] ) )
return 2;
- int retval = wait_for_child( diff_pid, "diff" );
+ int retval = wait_for_child( diff_pid, DIFF );
if( retval != 0 )
{
@@ -466,9 +456,7 @@ int main( const int argc, const char * const argv[] )
for( int i = 0; i < 2; ++i )
if( filenames[i] != "-" && close( infd[i] ) != 0 )
{
- if( verbosity >= 0 )
- std::fprintf( stderr, "%s: Can't close input file `%s': %s.\n",
- util_name, filenames[i].c_str(), std::strerror( errno ) );
+ show_error2( "Can't close input file", filenames[i].c_str() );
retval = 2;
}