#include <time.h>
#include <dirent.h>
-configcache::configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize, const int& cachemode){
+configcache::configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize, const int& cachemode,
+ writeout *out_a){
+ out = out_a;
+
NEQUI = nequi;
NSKIP = nskip;
DATADIR = datadir;
while( (!inFile.is_open()) && inFiles.size() > 0 )
{
+ if(out) *out->log << "CCACHE: Opening dat-file: " << inFiles.back() << endl << flush;
+
+ openFileName = inFiles.back();
inFile.open( (DATADIR + "/" + inFiles.back()).c_str(), std::ios::binary );
inFiles.pop_back();
if( inFile.is_open() )
{
- if( boost::iostreams::read(*inBuffer, tmpConfig, configSize) == configSize )
+ int readturn = -1;
+ try { readturn = boost::iostreams::read(*inBuffer, tmpConfig, configSize); }
+ catch(boost::iostreams::bzip2_error& error) {
+ if(out) *out->log << "CCACHE: Caught bzip2 exception with error code: " << error.error() << endl << flush;
+ inFile.close();
+ }
+ catch (std::exception const& ex) {
+ if(out) *out->log << "CCACHE: Caught exception: " << ex.what() << endl << flush;
+ inFile.close();
+ }
+ catch( ... ) {
+ if(out) *out->log << "CCACHE: Caught unknown exception while reading." << endl << flush;
+ inFile.close();
+ }
+
+ if( readturn == configSize && inFile.is_open() )
{
memcpy(configMem, tmpConfig, configSize);
return true;
}
- else inFile.close();
+ else {
+ *out->log << "CCACHE: Closing dat-file: " << openFileName << endl << flush;
+ inFile.close();
+ }
}
}
}