Adding upstream version 1.15.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
69aa758e1b
commit
f70e2a2220
24 changed files with 310 additions and 146 deletions
64
zgrep.cc
64
zgrep.cc
|
@ -42,6 +42,7 @@
|
|||
|
||||
namespace {
|
||||
|
||||
#include "exclude.cc"
|
||||
#include "recursive.cc"
|
||||
#include "zcatgrep.cc"
|
||||
|
||||
|
@ -77,6 +78,7 @@ void show_help()
|
|||
" --color[=<when>] show matched strings in color\n"
|
||||
" -e, --regexp=<pattern> use <pattern> as the pattern to match\n"
|
||||
" -E, --extended-regexp <pattern> is an extended regular expression\n"
|
||||
" --exclude=<pattern> exclude files matching a shell pattern\n"
|
||||
" -f, --file=<file> obtain patterns from <file>\n"
|
||||
" -F, --fixed-strings <pattern> is a set of newline-separated strings\n"
|
||||
" -G, --basic-regexp <pattern> is a basic regular expression (default)\n"
|
||||
|
@ -186,7 +188,7 @@ int zgrep_file( int infd, const int format_index,
|
|||
{ line_begin = true; if( line_buffered ) std::fflush( stdout ); }
|
||||
}
|
||||
else if( std::fwrite( buffer, 1, size, stdout ) != (unsigned)size )
|
||||
{ std::fflush( stdout ); show_error( "Write error", errno ); return 2; }
|
||||
{ std::fflush( stdout ); show_stdout_error( errno ); return 2; }
|
||||
}
|
||||
}
|
||||
std::fflush( stdout );
|
||||
|
@ -202,6 +204,8 @@ int zgrep_file( int infd, const int format_index,
|
|||
{ show_close_error(); return 2; }
|
||||
if( close( fda[0] ) != 0 )
|
||||
{ show_close_error( GREP ); return 2; }
|
||||
if( retval == 0 && std::ferror( stdout ) )
|
||||
{ show_stdout_error(); retval = 2; }
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -210,8 +214,6 @@ int zgrep_file( int infd, const int format_index,
|
|||
|
||||
int main( const int argc, const char * const argv[] )
|
||||
{
|
||||
enum { help_opt = 256, verbose_opt, color_opt, label_opt, linebuf_opt,
|
||||
bz2_opt, gz_opt, lz_opt, xz_opt, zst_opt };
|
||||
int format_index = -1; // undefined
|
||||
int list_mode = 0; // 1 = list matches, -1 = list non-matches
|
||||
int recursive = 0; // 1 = '-r', 2 = '-R'
|
||||
|
@ -228,6 +230,8 @@ int main( const int argc, const char * const argv[] )
|
|||
program_name = "zgrep";
|
||||
invocation_name = ( argc > 0 ) ? argv[0] : program_name;
|
||||
|
||||
enum { opt_bz2 = 256, opt_color, opt_exc, opt_gz, opt_help, opt_label,
|
||||
opt_linebuf, opt_lz, opt_verbose, opt_xz, opt_zst };
|
||||
const Arg_parser::Option options[] =
|
||||
{
|
||||
{ 'a', "text", Arg_parser::no }, // grep GNU
|
||||
|
@ -238,7 +242,7 @@ int main( const int argc, const char * const argv[] )
|
|||
{ 'C', "context", Arg_parser::yes }, // grep GNU
|
||||
{ 'e', "regexp", Arg_parser::yes }, // grep
|
||||
{ 'E', "extended-regexp", Arg_parser::no }, // grep
|
||||
{ 'f', "file ", Arg_parser::yes }, // grep
|
||||
{ 'f', "file", Arg_parser::yes }, // grep
|
||||
{ 'F', "fixed-strings", Arg_parser::no }, // grep
|
||||
{ 'G', "basic-regexp", Arg_parser::no }, // grep GNU
|
||||
{ 'h', "no-filename", Arg_parser::no }, // grep GNU
|
||||
|
@ -266,16 +270,17 @@ int main( const int argc, const char * const argv[] )
|
|||
{ 'w', "word-regexp", Arg_parser::no }, // grep GNU
|
||||
{ 'x', "line-regexp", Arg_parser::no }, // grep
|
||||
{ 'Z', "null", Arg_parser::no }, // grep GNU
|
||||
{ help_opt, "help", Arg_parser::no },
|
||||
{ verbose_opt, "verbose", Arg_parser::no },
|
||||
{ color_opt, "color", Arg_parser::maybe },
|
||||
{ label_opt, "label", Arg_parser::yes },
|
||||
{ linebuf_opt, "line-buffered", 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 },
|
||||
{ opt_color, "color", Arg_parser::maybe },
|
||||
{ opt_exc, "exclude", Arg_parser::yes },
|
||||
{ opt_help, "help", Arg_parser::no },
|
||||
{ opt_label, "label", Arg_parser::yes },
|
||||
{ opt_linebuf, "line-buffered", Arg_parser::no },
|
||||
{ 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 );
|
||||
|
@ -332,21 +337,22 @@ int main( const int argc, const char * const argv[] )
|
|||
case 'w': grep_args.push_back( "-w" ); break;
|
||||
case 'x': grep_args.push_back( "-x" ); break;
|
||||
case 'Z': z_null = true; break;
|
||||
case help_opt: show_help(); return 0;
|
||||
case verbose_opt: no_messages = false; if( verbosity < 4 ) ++verbosity;
|
||||
case opt_help: show_help(); return 0;
|
||||
case opt_exc: Exclude::add_pattern( sarg ); break;
|
||||
case opt_verbose: no_messages = false; if( verbosity < 4 ) ++verbosity;
|
||||
break;
|
||||
case color_opt: color_option = "--color";
|
||||
case opt_color: color_option = "--color";
|
||||
if( !sarg.empty() ) { color_option += '='; color_option += sarg; }
|
||||
break;
|
||||
case label_opt: label_option = "--label="; label_option += sarg;
|
||||
case opt_label: label_option = "--label="; label_option += sarg;
|
||||
label = arg; break;
|
||||
case linebuf_opt: grep_args.push_back( "--line-buffered" );
|
||||
case opt_linebuf: grep_args.push_back( "--line-buffered" );
|
||||
line_buffered = true; break;
|
||||
case bz2_opt: parse_compressor( sarg, pn, fmt_bz2 ); break;
|
||||
case gz_opt: parse_compressor( sarg, pn, fmt_gz ); break;
|
||||
case lz_opt: parse_compressor( sarg, pn, fmt_lz ); break;
|
||||
case xz_opt: parse_compressor( sarg, pn, fmt_xz ); break;
|
||||
case zst_opt: parse_compressor( sarg, pn, fmt_zst ); break;
|
||||
case opt_bz2: parse_compressor( sarg, pn, fmt_bz2 ); break;
|
||||
case opt_gz: parse_compressor( sarg, pn, fmt_gz ); break;
|
||||
case opt_lz: parse_compressor( sarg, pn, fmt_lz ); break;
|
||||
case opt_xz: parse_compressor( sarg, pn, fmt_xz ); break;
|
||||
case opt_zst: parse_compressor( sarg, pn, fmt_zst ); break;
|
||||
default: internal_error( "uncaught option." );
|
||||
}
|
||||
} // end process options
|
||||
|
@ -404,14 +410,12 @@ int main( const int argc, const char * const argv[] )
|
|||
if( close( infd ) != 0 )
|
||||
{ show_file_error( input_filename.c_str(), "Error closing input file",
|
||||
errno ); error = true; }
|
||||
if( retval == 0 && verbosity < 0 ) break;
|
||||
if( ( retval == 0 && verbosity < 0 ) || // match
|
||||
( retval == 2 && verbosity >= 0 ) ) break; // error
|
||||
}
|
||||
|
||||
if( std::fclose( stdout ) != 0 )
|
||||
{
|
||||
show_error( "Error closing stdout", errno );
|
||||
error = true;
|
||||
}
|
||||
if( std::fclose( stdout ) != 0 && !error )
|
||||
{ show_error( "Error closing stdout", errno ); error = true; }
|
||||
if( error && ( retval != 0 || verbosity >= 0 ) ) retval = 2;
|
||||
return retval;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue