1
0
Fork 0

Merging upstream version 1.15.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-05-28 19:30:37 +02:00
parent ba8e0a83c7
commit 60d97c7cb2
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
24 changed files with 310 additions and 146 deletions

32
zcmp.cc
View file

@ -93,17 +93,17 @@ void show_help()
// separate numbers of 5 or more digits in groups of 3 digits using '_'
const char * format_num3( long long num )
const char * format_num3p( long long num )
{
enum { buffers = 8, bufsize = 4 * sizeof num, n = 10 };
const char * const si_prefix = "kMGTPEZYRQ";
const char * const binary_prefix = "KMGTPEZYRQ";
static char buffer[buffers][bufsize]; // circle of static buffers for printf
static char buffer[buffers][bufsize]; // circle of buffers for printf
static int current = 0;
char * const buf = buffer[current++]; current %= buffers;
char * p = buf + bufsize - 1; // fill the buffer backwards
*p = 0; // terminator
*p = 0; // terminator
const bool negative = num < 0;
if( num > 9999 || num < -9999 )
{
@ -180,8 +180,8 @@ long long getnum( const char * const arg, const char * const option_name,
{
if( verbosity >= 0 )
std::fprintf( stderr, "%s: '%s': Value out of limits [%s,%s] in "
"option '%s'.\n", program_name, arg, format_num3( llimit ),
format_num3( ulimit ), option_name );
"option '%s'.\n", program_name, arg, format_num3p( llimit ),
format_num3p( ulimit ), option_name );
std::exit( 2 );
}
if( tailp ) *tailp = tail;
@ -372,7 +372,6 @@ done:
int main( const int argc, const char * const argv[] )
{
enum { bz2_opt = 256, gz_opt, lz_opt, xz_opt, zst_opt };
// number of initial bytes ignored for each file
long long ignore_initial[2] = { 0, 0 };
long long max_size = -1; // < 0 means unlimited size
@ -384,6 +383,7 @@ int main( const int argc, const char * const argv[] )
program_name = "zcmp";
invocation_name = ( argc > 0 ) ? argv[0] : program_name;
enum { opt_bz2 = 256, opt_gz, opt_lz, opt_xz, opt_zst };
const Arg_parser::Option options[] =
{
{ 'b', "print-bytes", Arg_parser::no },
@ -400,11 +400,11 @@ int main( const int argc, const char * const argv[] )
{ 's', "script", Arg_parser::no },
{ 'v', "verbose", Arg_parser::no },
{ 'V', "version", 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_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 );
@ -436,11 +436,11 @@ int main( const int argc, const char * const argv[] )
case 's': scripted = true; break;
case 'v': if( verbosity < 4 ) ++verbosity; break;
case 'V': show_version(); return 0;
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