diff options
author | Daniel Baumann <mail@daniel-baumann.ch> | 2015-11-07 15:35:17 +0000 |
---|---|---|
committer | Daniel Baumann <mail@daniel-baumann.ch> | 2015-11-07 15:35:17 +0000 |
commit | 54eb7a34be819b408b6751cdea2e0efe8f54ad2d (patch) | |
tree | 4ab337444e4b984fd7efe3a7c6ee4453797f84a6 /decompress.cc | |
parent | Adding upstream version 1.0. (diff) | |
download | plzip-54eb7a34be819b408b6751cdea2e0efe8f54ad2d.tar.xz plzip-54eb7a34be819b408b6751cdea2e0efe8f54ad2d.zip |
Adding upstream version 1.1~pre1.upstream/1.1_pre1
Signed-off-by: Daniel Baumann <mail@daniel-baumann.ch>
Diffstat (limited to '')
-rw-r--r-- | decompress.cc | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/decompress.cc b/decompress.cc index c861b4d..d008d1c 100644 --- a/decompress.cc +++ b/decompress.cc @@ -1,4 +1,4 @@ -/* Plzip - A parallel compressor compatible with lzip +/* Plzip - Parallel compressor compatible with lzip Copyright (C) 2009 Laszlo Ersek. Copyright (C) 2009, 2010, 2011, 2012, 2013 Antonio Diaz Diaz. @@ -122,7 +122,7 @@ extern "C" void * dworker( void * arg ) LZ_Decoder * const decoder = LZ_decompress_open(); if( !ibuffer || !obuffer || !decoder || LZ_decompress_errno( decoder ) != LZ_ok ) - { pp( "Not enough memory" ); fatal(); } + { pp( "Not enough memory" ); cleanup_and_fail(); } for( int i = worker_id; i < file_index.members(); i += num_workers ) { @@ -140,7 +140,7 @@ extern "C" void * dworker( void * arg ) if( size > 0 ) { if( preadblock( infd, ibuffer, size, member_pos ) != size ) - { pp(); show_error( "Read error", errno ); fatal(); } + { pp(); show_error( "Read error", errno ); cleanup_and_fail(); } member_pos += size; member_rest -= size; if( LZ_decompress_write( decoder, ibuffer, size ) != size ) @@ -152,7 +152,7 @@ extern "C" void * dworker( void * arg ) { const int rd = LZ_decompress_read( decoder, obuffer, buffer_size ); if( rd < 0 ) - fatal( decompress_read_error( decoder, pp, worker_id ) ); + cleanup_and_fail( decompress_read_error( decoder, pp, worker_id ) ); if( rd > 0 && outfd >= 0 ) { const int wr = pwriteblock( outfd, obuffer, rd, data_pos ); @@ -162,7 +162,7 @@ extern "C" void * dworker( void * arg ) if( verbosity >= 0 ) std::fprintf( stderr, "Write error in worker %d: %s\n", worker_id, std::strerror( errno ) ); - fatal(); + cleanup_and_fail(); } } if( rd > 0 ) @@ -184,9 +184,9 @@ extern "C" void * dworker( void * arg ) delete[] obuffer; delete[] ibuffer; if( LZ_decompress_member_position( decoder ) != 0 ) - { pp( "Error, some data remains in decoder" ); fatal(); } + { pp( "Error, some data remains in decoder" ); cleanup_and_fail(); } if( LZ_decompress_close( decoder ) < 0 ) - { pp( "LZ_decompress_close failed" ); fatal(); } + { pp( "LZ_decompress_close failed" ); cleanup_and_fail(); } return 0; } @@ -208,7 +208,7 @@ int decompress( int num_workers, const int infd, const int outfd, return dec_stream( num_workers, infd, outfd, pp, debug_level, testing ); } if( file_index.retval() != 0 ) - { show_error( file_index.error().c_str() ); return file_index.retval(); } + { pp( file_index.error().c_str() ); return file_index.retval(); } if( num_workers > file_index.members() ) num_workers = file_index.members(); @@ -224,7 +224,7 @@ int decompress( int num_workers, const int infd, const int outfd, Worker_arg * worker_args = new( std::nothrow ) Worker_arg[num_workers]; pthread_t * worker_threads = new( std::nothrow ) pthread_t[num_workers]; if( !worker_args || !worker_threads ) - { pp( "Not enough memory" ); fatal(); } + { pp( "Not enough memory" ); cleanup_and_fail(); } for( int i = 0; i < num_workers; ++i ) { worker_args[i].file_index = &file_index; @@ -236,14 +236,14 @@ int decompress( int num_workers, const int infd, const int outfd, const int errcode = pthread_create( &worker_threads[i], 0, dworker, &worker_args[i] ); if( errcode ) - { show_error( "Can't create worker threads", errcode ); fatal(); } + { show_error( "Can't create worker threads", errcode ); cleanup_and_fail(); } } for( int i = num_workers - 1; i >= 0; --i ) { const int errcode = pthread_join( worker_threads[i], 0 ); if( errcode ) - { show_error( "Can't join worker threads", errcode ); fatal(); } + { show_error( "Can't join worker threads", errcode ); cleanup_and_fail(); } } delete[] worker_threads; delete[] worker_args; |