1
0
Fork 0

Merging upstream version 1.0~rc6.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-24 05:40:46 +01:00
parent c9cf79d40a
commit 7a527f6c7c
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
25 changed files with 1114 additions and 772 deletions

71
zcat.cc
View file

@ -1,5 +1,5 @@
/* Zcat - decompress and concatenate files to standard output
Copyright (C) 2010, 2011 Antonio Diaz Diaz.
Copyright (C) 2010, 2011, 2012, 2013 Antonio Diaz Diaz.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -23,7 +23,7 @@ struct Cat_options
bool show_tabs;
bool squeeze_blank;
Cat_options() throw()
Cat_options()
: number_lines( 0 ), show_ends( false ), show_nonprinting( false ),
show_tabs( false ), squeeze_blank( false ) {}
};
@ -32,20 +32,20 @@ struct Cat_options
class Line_number // unlimited size line counter
{
std::string str;
int first_digit_pos;
unsigned first_digit_pos;
public:
Line_number() : str( " 0\t" ), first_digit_pos( 5 ) {}
void next()
{
for( int i = str.size() - 2; i >= first_digit_pos; --i )
for( unsigned i = str.size() - 1; i > first_digit_pos; )
{
if( str[i] < '9' ) { ++str[i]; return; }
if( str[--i] < '9' ) { ++str[i]; return; }
str[i] = '0';
}
if( first_digit_pos > 0 ) str[--first_digit_pos] = '1';
else str.insert( 0U, 1, '1' );
else str.insert( first_digit_pos, 1, '1' );
}
int sprint( uint8_t * const buf )
@ -58,34 +58,35 @@ public:
Line_number line_number;
void show_zcat_help() throw()
void show_zcat_help()
{
std::printf( "Zcat copies each given file (\"-\" means standard input), to standard\n" );
std::printf( "output. If any given file is compressed, its uncompressed content is\n" );
std::printf( "used. If a given file does not exist, and its name does not end with one\n" );
std::printf( "of the known extensions, zcat tries the compressed file names\n" );
std::printf( "corresponding to the supported compressors. If no files are specified,\n" );
std::printf( "data is read from standard input, decompressed if needed, and sent to\n" );
std::printf( "standard output. Data read from standard input must be of the same type;\n" );
std::printf( "all uncompressed or all compressed with the same compressor.\n" );
std::printf( "The supported compressors are bzip2, gzip, lzip and xz.\n" );
std::printf( "\nUsage: zcat [options] [files]\n" );
std::printf( "\nExit status is 0 if no errors occurred, 1 otherwise.\n" );
std::printf( "\nOptions:\n" );
std::printf( " -h, --help display this help and exit\n" );
std::printf( " -V, --version output version information and exit\n" );
std::printf( " -A, --show-all equivalent to `-vET'\n" );
std::printf( " -b, --number-nonblank number nonblank output lines\n" );
std::printf( " -e equivalent to `-vE'\n" );
std::printf( " -E, --show-ends display `$' at end of each line\n" );
std::printf( " -n, --number number all output lines\n" );
std::printf( " -q, --quiet suppress all messages\n" );
std::printf( " -r, --recursive operate recursively on directories\n" );
std::printf( " -s, --squeeze-blank never more than one single blank line\n" );
std::printf( " -t equivalent to `-vT'\n" );
std::printf( " -T, --show-tabs display TAB characters as `^I'\n" );
std::printf( " -v, --show-nonprinting use `^' and `M-' notation, except for LF and TAB\n" );
std::printf( " --verbose verbose mode (show error messages)\n" );
std::printf( "Zcat copies each given file (\"-\" means standard input), to standard\n"
"output. If any given file is compressed, its uncompressed content is\n"
"used. If a given file does not exist, and its name does not end with one\n"
"of the known extensions, zcat tries the compressed file names\n"
"corresponding to the supported formats. If no files are specified,\n"
"data is read from standard input, decompressed if needed, and sent to\n"
"standard output. Data read from standard input must be of the same type;\n"
"all uncompressed or all in the same compression format.\n"
"\nThe supported formats are bzip2, gzip, lzip and xz.\n"
"\nUsage: zcat [options] [files]\n"
"\nExit status is 0 if no errors occurred, 1 otherwise.\n"
"\nOptions:\n"
" -h, --help display this help and exit\n"
" -V, --version output version information and exit\n"
" -A, --show-all equivalent to '-vET'\n"
" -b, --number-nonblank number nonblank output lines\n"
" -e equivalent to '-vE'\n"
" -E, --show-ends display '$' at end of each line\n"
" --format=<fmt> force given format (bz2, gz, lz, xz)\n"
" -n, --number number all output lines\n"
" -q, --quiet suppress all messages\n"
" -r, --recursive operate recursively on directories\n"
" -s, --squeeze-blank never more than one single blank line\n"
" -t equivalent to '-vT'\n"
" -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" );
show_help_addr();
}
@ -186,7 +187,7 @@ int do_cat( const int infd, const int buffer_size,
}
int cat( int infd, const std::string & input_filename,
int cat( int infd, const int format_type, const std::string & input_filename,
const Cat_options & cat_options )
{
enum { buffer_size = 4096 };
@ -196,7 +197,7 @@ int cat( int infd, const std::string & input_filename,
uint8_t * const outbuf = new uint8_t[(4*buffer_size)+256];
pid_t pid = 0;
int retval = 0;
if( !set_data_feeder( &infd, &pid ) ) retval = 1;
if( !set_data_feeder( &infd, &pid, format_type ) ) retval = 1;
else
retval = do_cat( infd, buffer_size, inbuf, outbuf,
input_filename, cat_options );