1
0
Fork 0

Merging upstream version 1.5.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-24 04:12:55 +01:00
parent 5e1f92d2a0
commit 66060d80f9
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
20 changed files with 632 additions and 272 deletions

View file

@ -1,6 +1,6 @@
/* Plzip - Parallel compressor compatible with lzip
Copyright (C) 2009 Laszlo Ersek.
Copyright (C) 2009-2015 Antonio Diaz Diaz.
Copyright (C) 2009-2016 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
@ -88,16 +88,16 @@ public:
num_workers( workers ), out_slots( oslots ), slot_av( workers ),
eof( false )
{
xinit( &imutex ); xinit( &iav_or_eof );
xinit( &omutex ); xinit( &oav_or_exit );
for( unsigned i = 0; i < slot_av.size(); ++i ) xinit( &slot_av[i] );
xinit_mutex( &imutex ); xinit_cond( &iav_or_eof );
xinit_mutex( &omutex ); xinit_cond( &oav_or_exit );
for( unsigned i = 0; i < slot_av.size(); ++i ) xinit_cond( &slot_av[i] );
}
~Packet_courier()
{
for( unsigned i = 0; i < slot_av.size(); ++i ) xdestroy( &slot_av[i] );
xdestroy( &oav_or_exit ); xdestroy( &omutex );
xdestroy( &iav_or_eof ); xdestroy( &imutex );
for( unsigned i = 0; i < slot_av.size(); ++i ) xdestroy_cond( &slot_av[i] );
xdestroy_cond( &oav_or_exit ); xdestroy_mutex( &omutex );
xdestroy_cond( &iav_or_eof ); xdestroy_mutex( &imutex );
}
// make a packet with data received from splitter
@ -345,6 +345,7 @@ struct Worker_arg
Packet_courier * courier;
const Pretty_print * pp;
int worker_id;
bool ignore_trailing;
bool testing;
};
@ -357,6 +358,7 @@ extern "C" void * dworker_s( void * arg )
Packet_courier & courier = *tmp.courier;
const Pretty_print & pp = *tmp.pp;
const int worker_id = tmp.worker_id;
const bool ignore_trailing = tmp.ignore_trailing;
const bool testing = tmp.testing;
uint8_t * new_data = new( std::nothrow ) uint8_t[max_packet_size];
@ -392,7 +394,11 @@ extern "C" void * dworker_s( void * arg )
if( rd < 0 )
{
if( LZ_decompress_errno( decoder ) == LZ_header_error )
{
trailing_garbage_found = true;
if( !ignore_trailing )
{ pp( "Trailing data not allowed." ); cleanup_and_fail( 2 ); }
}
else
cleanup_and_fail( decompress_read_error( decoder, pp, worker_id ) );
}
@ -461,7 +467,8 @@ void muxer( Packet_courier & courier, const Pretty_print & pp, const int outfd )
// init the courier, then start the splitter and the workers and,
// if not testing, call the muxer.
int dec_stream( const int num_workers, const int infd, const int outfd,
const Pretty_print & pp, const int debug_level )
const Pretty_print & pp, const int debug_level,
const bool ignore_trailing )
{
const int in_slots_per_worker = 2;
const int out_slots = 32;
@ -490,6 +497,7 @@ int dec_stream( const int num_workers, const int infd, const int outfd,
worker_args[i].courier = &courier;
worker_args[i].pp = &pp;
worker_args[i].worker_id = i;
worker_args[i].ignore_trailing = ignore_trailing;
worker_args[i].testing = ( outfd < 0 );
errcode = pthread_create( &worker_threads[i], 0, dworker_s, &worker_args[i] );
if( errcode )