1
0
Fork 0

Merging upstream version 1.4~pre2.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-24 05:51:15 +01:00
parent 454cd28d9e
commit 06e5e699b7
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
30 changed files with 802 additions and 552 deletions

View file

@ -1,5 +1,5 @@
/* Common code for zcmp and zdiff
Copyright (C) 2010-2014 Antonio Diaz Diaz.
Copyright (C) 2010-2015 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
@ -19,18 +19,6 @@
#define O_BINARY 0
#endif
struct { const char * from; const char * to; } const known_extensions[] = {
{ ".bz2", "" },
{ ".tbz", ".tar" },
{ ".tbz2", ".tar" },
{ ".gz", "" },
{ ".tgz", ".tar" },
{ ".lz", "" },
{ ".tlz", ".tar" },
{ ".xz", "" },
{ ".txz", ".tar" },
{ 0, 0 } };
int open_instream( const std::string & input_filename )
{
@ -43,28 +31,26 @@ int open_instream( const std::string & input_filename )
int open_other_instream( std::string & name )
{
for( int i = 0; known_extensions[i].from; ++i )
{ // search uncompressed version
const std::string from( known_extensions[i].from );
if( name.size() > from.size() &&
name.compare( name.size() - from.size(), from.size(), from ) == 0 )
{
name.resize( name.size() - from.size() );
name += known_extensions[i].to;
return open( name.c_str(), O_RDONLY | O_BINARY );
}
}
for( int i = 0; i < num_formats; ++i )
{ // search compressed version
const std::string s( name + simple_extensions[format_order[i]] );
const int infd = open( s.c_str(), O_RDONLY | O_BINARY );
if( infd >= 0 ) { name = s; return infd; }
const int eindex = extension_index( name );
if( eindex >= 0 && enabled_format( -1 ) )
{ // open uncompressed version
name.resize( name.size() - std::strlen( extension_from( eindex ) ) );
name += extension_to( eindex );
return open( name.c_str(), O_RDONLY | O_BINARY );
}
if( eindex < 0 )
for( int i = 0; i < num_formats; ++i )
if( enabled_format( format_order[i] ) )
{ // search compressed version
const std::string s( name + simple_extensions[format_order[i]] );
const int infd = open( s.c_str(), O_RDONLY | O_BINARY );
if( infd >= 0 ) { name = s; return infd; }
}
return -1;
}
void parse_format_types( const std::string & arg, int format_types[2] )
void parse_format_types2( const std::string & arg, int format_types[2] )
{
const unsigned i = std::min( arg.find( ',' ), arg.size() );
if( i > 0 ) format_types[0] = parse_format_type( arg.substr( 0, i ) );