Merging upstream version 1.2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
9147dd9be8
commit
27d31fb65e
17 changed files with 197 additions and 125 deletions
60
main.c
60
main.c
|
@ -128,6 +128,7 @@ static void show_help()
|
|||
printf( " -c, --stdout send output to standard output\n" );
|
||||
printf( " -d, --decompress decompress\n" );
|
||||
printf( " -f, --force overwrite existing output files\n" );
|
||||
printf( " -F, --recompress force recompression of compressed files\n" );
|
||||
printf( " -k, --keep keep (don't delete) input files\n" );
|
||||
printf( " -m, --match-length=<n> set match length limit in bytes [36]\n" );
|
||||
printf( " -o, --output=<file> if reading stdin, place the output into <file>\n" );
|
||||
|
@ -244,10 +245,10 @@ static int get_dict_size( const char * const arg )
|
|||
|
||||
static int open_instream( const char * const name, struct stat * const in_statsp,
|
||||
const enum Mode program_mode, const int eindex,
|
||||
const bool force, const bool to_stdout )
|
||||
const bool recompress, const bool to_stdout )
|
||||
{
|
||||
int infd = -1;
|
||||
if( program_mode == m_compress && !force && eindex >= 0 )
|
||||
if( program_mode == m_compress && !recompress && eindex >= 0 )
|
||||
{
|
||||
if( verbosity >= 0 )
|
||||
fprintf( stderr, "%s: Input file `%s' already has `%s' suffix.\n",
|
||||
|
@ -327,7 +328,7 @@ static void set_d_outname( const char * const name, const int i )
|
|||
output_filename = resize_buffer( output_filename, strlen( name ) + 4 + 1 );
|
||||
strcpy( output_filename, name );
|
||||
strcat( output_filename, ".out" );
|
||||
if( verbosity >= 0 )
|
||||
if( verbosity >= 1 )
|
||||
fprintf( stderr, "%s: Can't guess original name for `%s' -- using `%s'.\n",
|
||||
program_name, name, output_filename );
|
||||
}
|
||||
|
@ -378,7 +379,7 @@ void cleanup_and_fail( const int retval )
|
|||
fprintf( stderr, "%s: Deleting output file `%s', if it exists.\n",
|
||||
program_name, output_filename );
|
||||
if( outfd >= 0 ) { close( outfd ); outfd = -1; }
|
||||
if( remove( output_filename ) != 0 )
|
||||
if( remove( output_filename ) != 0 && errno != ENOENT )
|
||||
show_error( "WARNING: deletion of output file (apparently) failed.", 0, false );
|
||||
}
|
||||
exit( retval );
|
||||
|
@ -538,7 +539,7 @@ static int decompress( const int infd, struct Pretty_print * const pp,
|
|||
{ Pp_show_msg( pp, "Invalid dictionary size in member header" );
|
||||
retval = 2; break; }
|
||||
|
||||
if( verbosity >= 1 )
|
||||
if( verbosity >= 2 || ( verbosity == 1 && first_member ) )
|
||||
{
|
||||
Pp_show_msg( pp, 0 );
|
||||
if( verbosity >= 2 )
|
||||
|
@ -564,11 +565,14 @@ static int decompress( const int infd, struct Pretty_print * const pp,
|
|||
}
|
||||
retval = 2; break;
|
||||
}
|
||||
if( verbosity >= 1 )
|
||||
if( verbosity >= 2 )
|
||||
{ if( testing ) fprintf( stderr, "ok\n" );
|
||||
else fprintf( stderr, "done\n" ); }
|
||||
}
|
||||
Rd_free( &rdec );
|
||||
if( verbosity == 1 && retval == 0 )
|
||||
{ if( testing ) fprintf( stderr, "ok\n" );
|
||||
else fprintf( stderr, "done\n" ); }
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -654,45 +658,6 @@ void internal_error( const char * const msg )
|
|||
}
|
||||
|
||||
|
||||
/* Returns the number of bytes really read.
|
||||
If (returned value < size) and (errno == 0), means EOF was reached.
|
||||
*/
|
||||
int readblock( const int fd, uint8_t * const buf, const int size )
|
||||
{
|
||||
int rest = size;
|
||||
while( true )
|
||||
{
|
||||
int n;
|
||||
errno = 0;
|
||||
if( rest <= 0 ) break;
|
||||
n = read( fd, buf + size - rest, rest );
|
||||
if( n > 0 ) rest -= n;
|
||||
else if( n == 0 ) break;
|
||||
else if( errno != EINTR && errno != EAGAIN ) break;
|
||||
}
|
||||
return ( rest > 0 ) ? size - rest : size;
|
||||
}
|
||||
|
||||
|
||||
/* Returns the number of bytes really written.
|
||||
If (returned value < size), it is always an error.
|
||||
*/
|
||||
int writeblock( const int fd, const uint8_t * const buf, const int size )
|
||||
{
|
||||
int rest = size;
|
||||
while( true )
|
||||
{
|
||||
int n;
|
||||
errno = 0;
|
||||
if( rest <= 0 ) break;
|
||||
n = write( fd, buf + size - rest, rest );
|
||||
if( n > 0 ) rest -= n;
|
||||
else if( errno && errno != EINTR && errno != EAGAIN ) break;
|
||||
}
|
||||
return ( rest > 0 ) ? size - rest : size;
|
||||
}
|
||||
|
||||
|
||||
int main( const int argc, const char * const argv[] )
|
||||
{
|
||||
/* Mapping from gzip/bzip2 style 1..9 compression modes
|
||||
|
@ -724,6 +689,7 @@ int main( const int argc, const char * const argv[] )
|
|||
bool filenames_given = false;
|
||||
bool force = false;
|
||||
bool keep_input_files = false;
|
||||
bool recompress = false;
|
||||
bool to_stdout = false;
|
||||
struct Pretty_print pp;
|
||||
|
||||
|
@ -744,6 +710,7 @@ int main( const int argc, const char * const argv[] )
|
|||
{ 'd', "decompress", ap_no },
|
||||
{ 'e', "extreme", ap_no },
|
||||
{ 'f', "force", ap_no },
|
||||
{ 'F', "recompress", ap_no },
|
||||
{ 'h', "help", ap_no },
|
||||
{ 'k', "keep", ap_no },
|
||||
{ 'm', "match-length", ap_yes },
|
||||
|
@ -781,6 +748,7 @@ int main( const int argc, const char * const argv[] )
|
|||
case 'd': program_mode = m_decompress; break;
|
||||
case 'e': break; /* ignored by now */
|
||||
case 'f': force = true; break;
|
||||
case 'F': recompress = true; break;
|
||||
case 'h': show_help(); return 0;
|
||||
case 'k': keep_input_files = true; break;
|
||||
case 'm': encoder_options.match_len_limit =
|
||||
|
@ -871,7 +839,7 @@ int main( const int argc, const char * const argv[] )
|
|||
const int eindex = extension_index( filenames[i] );
|
||||
input_filename = filenames[i];
|
||||
infd = open_instream( input_filename, &in_stats, program_mode,
|
||||
eindex, force, to_stdout );
|
||||
eindex, recompress, to_stdout );
|
||||
if( infd < 0 ) { if( retval < 1 ) retval = 1; continue; }
|
||||
if( program_mode != m_test )
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue