#include <boost/thread.hpp>
#include <openssl/crypto.h>
#include <openssl/rand.h>
-#include <openssl/conf.h>
#ifdef WIN32
-#ifdef _MSC_VER
-#pragma warning(disable:4786)
-#pragma warning(disable:4804)
-#pragma warning(disable:4805)
-#pragma warning(disable:4717)
-#endif
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
ppmutexOpenSSL[i] = new CCriticalSection();
CRYPTO_set_locking_callback(locking_callback);
- // OpenSSL can optionally load a config file which lists optional loadable modules and engines.
- // We don't use them so we don't require the config. However some of our libs may call functions
- // which attempt to load the config file, possibly resulting in an exit() or crash if it is missing
- // or corrupt. Explicitly tell OpenSSL not to try to load the file. The result for our libs will be
- // that the config appears to have been loaded and there are no modules/engines available.
- OPENSSL_no_config();
-
#ifdef WIN32
// Seed random number generator with screen scrape and other hardware sources
RAND_screen();
string str = strprintf("%" PRId64 ".%06" PRId64, quotient, remainder);
// Right-trim excess zeros before the decimal point:
- int nTrim = 0;
+ size_t nTrim = 0;
for (size_t i = str.size()-1; (str[i] == '0' && isdigit(str[i-2])); --i)
++nTrim;
if (nTrim)
str.erase(str.size()-nTrim, nTrim);
if (n < 0)
- str.insert((unsigned int)0, 1, '-');
+ str.insert(0u, 1, '-');
else if (fPlus && n > 0)
- str.insert((unsigned int)0, 1, '+');
+ str.insert(0u, 1, '+');
return str;
}
if (file && GetFilesize(file) > 10 * 1000000)
{
// Restart the file with some of the end
- char pch[200000];
- fseek(file, -((long long)sizeof(pch)), SEEK_END);
- size_t nBytes = fread(pch, 1, sizeof(pch), file);
- fclose(file);
-
- file = fopen(pathLog.string().c_str(), "w");
- if (file)
- {
- fwrite(pch, 1, nBytes, file);
+ try {
+ vector<char>* vBuf = new vector <char>(200000, 0);
+ fseek(file, -((long)(vBuf->size())), SEEK_END);
+ size_t nBytes = fread(&vBuf->operator[](0), 1, vBuf->size(), file);
fclose(file);
+ file = fopen(pathLog.string().c_str(), "w");
+ if (file)
+ {
+ fwrite(&vBuf->operator[](0), 1, nBytes, file);
+ fclose(file);
+ }
+ delete vBuf;
+ }
+ catch (const bad_alloc& e) {
+ // Bad things happen - no free memory in heap at program startup
+ fclose(file);
+ printf("Warning: %s in %s:%d\n ShrinkDebugFile failed - debug.log expands further", e.what(), __FILE__, __LINE__);
}
}
}
ss.imbue(loc);
ss << boost::posix_time::from_time_t(nTime);
return ss.str();
-}
\ No newline at end of file
+}