Merging upstream version 1.15.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
ba8e0a83c7
commit
60d97c7cb2
24 changed files with 310 additions and 146 deletions
34
zcat.cc
34
zcat.cc
|
@ -42,6 +42,7 @@
|
|||
|
||||
namespace {
|
||||
|
||||
#include "exclude.cc"
|
||||
#include "recursive.cc"
|
||||
#include "zcatgrep.cc"
|
||||
|
||||
|
@ -126,6 +127,7 @@ void show_help()
|
|||
" -T, --show-tabs display TAB characters as '^I'\n"
|
||||
" -v, --show-nonprinting use '^' and 'M-' notation, except for LF and TAB\n"
|
||||
" --verbose verbose mode (show error messages)\n"
|
||||
" -x, --exclude=<pattern> exclude files matching a shell pattern\n"
|
||||
" --bz2=<command> set compressor and options for bzip2 format\n"
|
||||
" --gz=<command> set compressor and options for gzip format\n"
|
||||
" --lz=<command> set compressor and options for lzip format\n"
|
||||
|
@ -155,7 +157,7 @@ bool do_cat( const int infd, const int buffer_size,
|
|||
if( outpos >= buffer_size )
|
||||
{
|
||||
if( writeblock( STDOUT_FILENO, outbuf, outpos ) != outpos )
|
||||
{ show_error( "Write error", errno ); return false; }
|
||||
{ show_stdout_error( errno ); return false; }
|
||||
outpos = 0;
|
||||
}
|
||||
if( inpos > rd ) // inbuf is empty
|
||||
|
@ -169,7 +171,7 @@ bool do_cat( const int infd, const int buffer_size,
|
|||
if( rd == 0 )
|
||||
{
|
||||
if( writeblock( STDOUT_FILENO, outbuf, outpos ) != outpos )
|
||||
{ show_error( "Write error", errno ); return false; }
|
||||
{ show_stdout_error( errno ); return false; }
|
||||
outpos = 0;
|
||||
return true;
|
||||
}
|
||||
|
@ -261,7 +263,6 @@ bool cat( int infd, const int format_index, const std::string & input_filename,
|
|||
|
||||
int main( const int argc, const char * const argv[] )
|
||||
{
|
||||
enum { verbose_opt = 256, bz2_opt, gz_opt, lz_opt, xz_opt, zst_opt };
|
||||
int format_index = -1; // undefined
|
||||
int recursive = 0; // 1 = '-r', 2 = '-R'
|
||||
std::list< std::string > filenames;
|
||||
|
@ -269,6 +270,7 @@ int main( const int argc, const char * const argv[] )
|
|||
program_name = "zcat";
|
||||
invocation_name = ( argc > 0 ) ? argv[0] : program_name;
|
||||
|
||||
enum { opt_bz2 = 256, opt_gz, opt_lz, opt_verbose, opt_xz, opt_zst };
|
||||
const Arg_parser::Option options[] =
|
||||
{
|
||||
{ 'A', "show-all", Arg_parser::no }, // cat
|
||||
|
@ -293,12 +295,13 @@ int main( const int argc, const char * const argv[] )
|
|||
{ 'T', "show-tabs", Arg_parser::no }, // cat
|
||||
{ 'v', "show-nonprinting", Arg_parser::no }, // cat
|
||||
{ 'V', "version", Arg_parser::no },
|
||||
{ verbose_opt, "verbose", Arg_parser::no },
|
||||
{ bz2_opt, "bz2", Arg_parser::yes },
|
||||
{ gz_opt, "gz", Arg_parser::yes },
|
||||
{ lz_opt, "lz", Arg_parser::yes },
|
||||
{ xz_opt, "xz", Arg_parser::yes },
|
||||
{ zst_opt, "zst", Arg_parser::yes },
|
||||
{ 'x', "exclude", Arg_parser::yes },
|
||||
{ opt_verbose, "verbose", Arg_parser::no },
|
||||
{ opt_bz2, "bz2", Arg_parser::yes },
|
||||
{ opt_gz, "gz", Arg_parser::yes },
|
||||
{ opt_lz, "lz", Arg_parser::yes },
|
||||
{ opt_xz, "xz", Arg_parser::yes },
|
||||
{ opt_zst, "zst", Arg_parser::yes },
|
||||
{ 0, 0, Arg_parser::no } };
|
||||
|
||||
const Arg_parser parser( argc, argv, options );
|
||||
|
@ -341,12 +344,13 @@ int main( const int argc, const char * const argv[] )
|
|||
case 'T': cat_options.show_tabs = true; break;
|
||||
case 'v': cat_options.show_nonprinting = true; break;
|
||||
case 'V': show_version(); return 0;
|
||||
case verbose_opt: if( verbosity < 4 ) ++verbosity; break;
|
||||
case bz2_opt: parse_compressor( arg, pn, fmt_bz2, 1 ); break;
|
||||
case gz_opt: parse_compressor( arg, pn, fmt_gz, 1 ); break;
|
||||
case lz_opt: parse_compressor( arg, pn, fmt_lz, 1 ); break;
|
||||
case xz_opt: parse_compressor( arg, pn, fmt_xz, 1 ); break;
|
||||
case zst_opt: parse_compressor( arg, pn, fmt_zst, 1 ); break;
|
||||
case 'x': Exclude::add_pattern( arg ); break;
|
||||
case opt_verbose: if( verbosity < 4 ) ++verbosity; break;
|
||||
case opt_bz2: parse_compressor( arg, pn, fmt_bz2, 1 ); break;
|
||||
case opt_gz: parse_compressor( arg, pn, fmt_gz, 1 ); break;
|
||||
case opt_lz: parse_compressor( arg, pn, fmt_lz, 1 ); break;
|
||||
case opt_xz: parse_compressor( arg, pn, fmt_xz, 1 ); break;
|
||||
case opt_zst: parse_compressor( arg, pn, fmt_zst, 1 ); break;
|
||||
default: internal_error( "uncaught option." );
|
||||
}
|
||||
} // end process options
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue