summaryrefslogtreecommitdiffstats
path: root/zutils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'zutils.cc')
-rw-r--r--zutils.cc53
1 files changed, 38 insertions, 15 deletions
diff --git a/zutils.cc b/zutils.cc
index 5451534..01a0152 100644
--- a/zutils.cc
+++ b/zutils.cc
@@ -119,32 +119,24 @@ bool set_data_feeder( int * const infdp, pid_t * const pidp )
close( fda[0] ) == 0 && close( fda[1] ) == 0 &&
close( fda2[0] ) == 0 && close( fda2[1] ) == 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 ||
close( fda2[0] ) != 0 || close( fda2[1] ) != 0 ||
!feed_data( old_infd, fda[1], magic_data, magic_size ) )
_exit( 2 );
if( close( fda[1] ) != 0 )
- { show_error( "Can't close output of decompressor feeder", errno );
- _exit( 2 ); }
+ { show_close_error( "decompressor feeder" ); _exit( 2 ); }
_exit( wait_for_child( pid2, file_type.c_str() ) );
}
// parent
close( fda[0] ); close( fda[1] ); close( fda2[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
@@ -161,14 +153,13 @@ bool set_data_feeder( int * const infdp, pid_t * const pidp )
!feed_data( old_infd, fda[1], magic_data, magic_size ) )
_exit( 2 );
if( close( fda[1] ) != 0 )
- { show_error( "Can't close output of data feeder", errno );
- _exit( 2 ); }
+ { show_close_error( "data feeder" ); _exit( 2 ); }
_exit( 0 );
}
// parent
close( fda[1] );
if( pid < 0 )
- { show_error( "Can't fork data feeder", errno ); return false; }
+ { show_fork_error( "data feeder" ); return false; }
*pidp = pid;
}
return true;
@@ -214,6 +205,38 @@ void show_error( const char * const msg, const int errcode,
}
+void show_error2( const char * const msg, const char * const name ) throw()
+ {
+ if( verbosity >= 0 )
+ std::fprintf( stderr, "%s: %s `%s': %s.\n",
+ util_name, msg, name, std::strerror( errno ) );
+ }
+
+
+void show_close_error( const char * const prog_name ) throw()
+ {
+ if( verbosity >= 0 )
+ std::fprintf( stderr, "%s: Can't close output of %s: %s.\n",
+ util_name, prog_name, std::strerror( errno ) );
+ }
+
+
+void show_exec_error( const char * const prog_name ) throw()
+ {
+ if( verbosity >= 0 )
+ std::fprintf( stderr, "%s: Can't exec `%s': %s.\n",
+ util_name, prog_name, std::strerror( errno ) );
+ }
+
+
+void show_fork_error( const char * const prog_name ) throw()
+ {
+ if( verbosity >= 0 )
+ std::fprintf( stderr, "%s: Can't fork `%s': %s.\n",
+ util_name, prog_name, std::strerror( errno ) );
+ }
+
+
void internal_error( const char * const msg )
{
if( verbosity >= 0 )