aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authors_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-07-08 16:14:56 +0000
committers_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b>2010-07-08 16:14:56 +0000
commitd882773789ea3894de7163f7bb880c5b23072882 (patch)
tree23e8847e09abe899fa9cba862f96e7d924dc484c
parentd77eac25b2ecd8e6ff5619cfa57d0ebc0682ed09 (diff)
Laszlo's fix to make generate threads idle priority on Linux,
replaced some wxBase dependencies: wxMutex, wxFileExists, wxStandardPaths, wxGetLocalTimeMillis git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@99 1a98c847-1fd6-4fd8-948a-caf3550aa51b
-rw-r--r--headers.h4
-rw-r--r--init.cpp74
-rw-r--r--locale/de/LC_MESSAGES/bitcoin.mobin16025 -> 16092 bytes
-rw-r--r--locale/de/LC_MESSAGES/bitcoin.po4
-rw-r--r--locale/it/LC_MESSAGES/bitcoin.mobin15547 -> 15616 bytes
-rw-r--r--locale/it/LC_MESSAGES/bitcoin.po4
-rw-r--r--locale/nl/LC_MESSAGES/bitcoin.mobin14859 -> 14923 bytes
-rw-r--r--locale/nl/LC_MESSAGES/bitcoin.po4
-rw-r--r--main.cpp42
-rw-r--r--makefile.unix6
-rw-r--r--rpc.cpp22
-rw-r--r--serialize.h2
-rw-r--r--uibase.cpp2
-rw-r--r--uibase.h2
-rw-r--r--uiproject.fbp4
-rw-r--r--util.cpp80
-rw-r--r--util.h18
17 files changed, 167 insertions, 101 deletions
diff --git a/headers.h b/headers.h
index 73b09ed578..b53de8245b 100644
--- a/headers.h
+++ b/headers.h
@@ -59,6 +59,10 @@
#include <boost/function.hpp>
#include <boost/filesystem.hpp>
#include <boost/algorithm/string.hpp>
+#include <boost/interprocess/sync/interprocess_mutex.hpp>
+#include <boost/interprocess/sync/interprocess_recursive_mutex.hpp>
+#include <boost/date_time/gregorian/gregorian_types.hpp>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
#ifdef __WXMSW__
#include <windows.h>
diff --git a/init.cpp b/init.cpp
index b97a2d0c7b..4660ccd3ba 100644
--- a/init.cpp
+++ b/init.cpp
@@ -4,6 +4,8 @@
#include "headers.h"
+extern string GetDefaultDataDir(); /// todo: delete this later, just used by debug test
+
@@ -59,40 +61,6 @@ void Shutdown(void* parg)
//
#ifdef __WXMSW__
-typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
-
-string MyGetSpecialFolderPath(int nFolder, bool fCreate)
-{
- char pszPath[MAX_PATH+100] = "";
-
- // SHGetSpecialFolderPath is not usually available on NT 4.0
- HMODULE hShell32 = LoadLibraryA("shell32.dll");
- if (hShell32)
- {
- PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath =
- (PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA");
- if (pSHGetSpecialFolderPath)
- (*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate);
- FreeModule(hShell32);
- }
-
- // Backup option
- if (pszPath[0] == '\0')
- {
- if (nFolder == CSIDL_STARTUP)
- {
- strcpy(pszPath, getenv("USERPROFILE"));
- strcat(pszPath, "\\Start Menu\\Programs\\Startup");
- }
- else if (nFolder == CSIDL_APPDATA)
- {
- strcpy(pszPath, getenv("APPDATA"));
- }
- }
-
- return pszPath;
-}
-
string StartupShortcutPath()
{
return MyGetSpecialFolderPath(CSIDL_STARTUP, true) + "\\Bitcoin.lnk";
@@ -100,7 +68,7 @@ string StartupShortcutPath()
bool GetStartOnSystemStartup()
{
- return wxFileExists(StartupShortcutPath());
+ return filesystem::exists(StartupShortcutPath().c_str());
}
void SetStartOnSystemStartup(bool fAutoStart)
@@ -166,7 +134,7 @@ void SetStartOnSystemStartup(bool fAutoStart) { }
//
// Define a new application
-class CMyApp: public wxApp
+class CMyApp : public wxApp
{
public:
wxLocale m_locale;
@@ -216,7 +184,10 @@ bool CMyApp::Initialize(int& argc, wxChar** argv)
#ifdef __WXMSW__
if (str.size() >= 1 && str[0] == '/')
str[0] = '-';
- str = str.MakeLower();
+ char pszLower[MAX_PATH];
+ strlcpy(pszLower, str.c_str(), sizeof(pszLower));
+ strlwr(pszLower);
+ str = pszLower;
#endif
// haven't decided which argument to use for this yet
if (str == "-daemon" || str == "-d" || str == "start")
@@ -356,18 +327,14 @@ bool CMyApp::OnInit2()
" -daemon \t " + _("Run in the background as a daemon and accept commands\n") +
" -? \t " + _("This help message\n");
-
- if (fWindows && fGUI)
- {
- // Tabs make the columns line up in the message box
- wxMessageBox(strUsage, "Bitcoin", wxOK);
- }
- else
- {
- // Remove tabs
- strUsage.Replace("\t", "");
- fprintf(stderr, "%s", ((string)strUsage).c_str());
- }
+#if defined(__WXMSW__) && wxUSE_GUI
+ // Tabs make the columns line up in the message box
+ wxMessageBox(strUsage, "Bitcoin", wxOK);
+#else
+ // Remove tabs
+ strUsage.Replace("\t", "");
+ fprintf(stderr, "%s", ((string)strUsage).c_str());
+#endif
return false;
}
@@ -387,6 +354,15 @@ bool CMyApp::OnInit2()
printf("System default language is %d %s\n", m_locale.GetSystemLanguage(), ((string)m_locale.GetSysName()).c_str());
printf("Language file %s (%s)\n", (string("locale/") + (string)m_locale.GetCanonicalName() + "/LC_MESSAGES/bitcoin.mo").c_str(), ((string)m_locale.GetLocale()).c_str());
+ /// debug - for now, just watching if these match
+ if (pszSetDataDir[0] == 0)
+ {
+ if (GetDefaultDataDir() != GetDataDir())
+ printf("**** GetDefaultDataDir() %s != %s\n", GetDefaultDataDir().c_str(), GetDataDir().c_str());
+ else
+ printf("OK GetDefaultDataDir() %s == %s\n", GetDefaultDataDir().c_str(), GetDataDir().c_str());
+ }
+
if (mapArgs.count("-loadblockindextest"))
{
CTxDB txdb("r");
diff --git a/locale/de/LC_MESSAGES/bitcoin.mo b/locale/de/LC_MESSAGES/bitcoin.mo
index e6c860eec5..d53b22f7b1 100644
--- a/locale/de/LC_MESSAGES/bitcoin.mo
+++ b/locale/de/LC_MESSAGES/bitcoin.mo
Binary files differ
diff --git a/locale/de/LC_MESSAGES/bitcoin.po b/locale/de/LC_MESSAGES/bitcoin.po
index fa3b8a4c14..9d1b6b08cb 100644
--- a/locale/de/LC_MESSAGES/bitcoin.po
+++ b/locale/de/LC_MESSAGES/bitcoin.po
@@ -692,6 +692,8 @@ msgstr "Version"
msgid ""
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
"\n"
+"This is experimental software.\n"
+"\n"
"Distributed under the MIT/X11 software license, see the accompanying file \n"
"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
"\n"
@@ -701,6 +703,8 @@ msgid ""
msgstr ""
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
"\n"
+"Dies ist experimentelle Software.\n"
+"\n"
"Lizensiert unter der MIT/X11 Software-Lizenz. Beachten Sie die beiliegende\n"
"Datei license.txt oder http://www.opensource.org/licenses/mit-license.php.\n"
"\n"
diff --git a/locale/it/LC_MESSAGES/bitcoin.mo b/locale/it/LC_MESSAGES/bitcoin.mo
index b3160d1358..dc7b94edfa 100644
--- a/locale/it/LC_MESSAGES/bitcoin.mo
+++ b/locale/it/LC_MESSAGES/bitcoin.mo
Binary files differ
diff --git a/locale/it/LC_MESSAGES/bitcoin.po b/locale/it/LC_MESSAGES/bitcoin.po
index 6d6e10f4c2..7a267079fc 100644
--- a/locale/it/LC_MESSAGES/bitcoin.po
+++ b/locale/it/LC_MESSAGES/bitcoin.po
@@ -690,6 +690,8 @@ msgstr "versione"
msgid ""
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
"\n"
+"This is experimental software.\n"
+"\n"
"Distributed under the MIT/X11 software license, see the accompanying file \n"
"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
"\n"
@@ -699,6 +701,8 @@ msgid ""
msgstr ""
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
"\n"
+"Questo รจ un software sperimentale.\n"
+"\n"
"Distribuito sotto la licenza software MIT/X11, guarda il file license.txt\n"
"incluso oppure su http://www.opensource.org/licenses/mit-license.php.\n"
"\n"
diff --git a/locale/nl/LC_MESSAGES/bitcoin.mo b/locale/nl/LC_MESSAGES/bitcoin.mo
index 79f5c83ac2..380eafe929 100644
--- a/locale/nl/LC_MESSAGES/bitcoin.mo
+++ b/locale/nl/LC_MESSAGES/bitcoin.mo
Binary files differ
diff --git a/locale/nl/LC_MESSAGES/bitcoin.po b/locale/nl/LC_MESSAGES/bitcoin.po
index 643dc308dc..c97d7d63d2 100644
--- a/locale/nl/LC_MESSAGES/bitcoin.po
+++ b/locale/nl/LC_MESSAGES/bitcoin.po
@@ -691,6 +691,8 @@ msgstr "versie"
msgid ""
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
"\n"
+"This is experimental software.\n"
+"\n"
"Distributed under the MIT/X11 software license, see the accompanying file \n"
"license.txt or http://www.opensource.org/licenses/mit-license.php.\n"
"\n"
@@ -700,6 +702,8 @@ msgid ""
msgstr ""
"Copyright (c) 2009-2010 Satoshi Nakamoto.\n"
"\n"
+"Dit is experimentele software.\n"
+"\n"
"Gedistributeerd onder de MIT/X11 software licentie, see het bijbehorende bestand \n"
"license.txt of http://www.opensource.org/licenses/mit-license.php.\n"
"\n"
diff --git a/main.cpp b/main.cpp
index 2b08744d4e..803548e61e 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1477,7 +1477,10 @@ bool CheckDiskSpace(int64 nAdditionalBytes)
if (nFreeBytesAvailable < (int64)15000000 + nAdditionalBytes)
{
fShutdown = true;
+ printf("*** %s***\n", _("Warning: Disk space is low "));
+#if wxUSE_GUI
ThreadSafeMessageBox(_("Warning: Disk space is low "), "Bitcoin", wxOK | wxICON_EXCLAMATION);
+#endif
CreateThread(Shutdown, NULL);
return false;
}
@@ -2713,25 +2716,32 @@ void BitcoinMiner()
if ((++tmp.block.nNonce & nMask) == 0)
{
// Meter hashes/sec
- static int64 nHashCounter;
- static int64 nLastTick;
- if (nLastTick == 0)
- nLastTick = GetTimeMillis();
+ static int64 nTimerStart;
+ static int nHashCounter;
+ if (nTimerStart == 0)
+ nTimerStart = GetTimeMillis();
else
- nHashCounter += nMask + 1;
- if (GetTimeMillis() - nLastTick > 4000)
+ nHashCounter++;
+ if (GetTimeMillis() - nTimerStart > 4000)
{
- double dHashesPerSec = 1000.0 * nHashCounter / (GetTimeMillis() - nLastTick);
- nLastTick = GetTimeMillis();
- nHashCounter = 0;
- string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0);
- UIThreadCall(bind(CalledSetStatusBar, strStatus, 0));
- static int64 nLogTime;
- if (GetTime() - nLogTime > 30 * 60)
+ static CCriticalSection cs;
+ CRITICAL_BLOCK(cs)
{
- nLogTime = GetTime();
- printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str());
- printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0);
+ if (GetTimeMillis() - nTimerStart > 4000)
+ {
+ double dHashesPerSec = 1000.0 * (nMask+1) * nHashCounter / (GetTimeMillis() - nTimerStart);
+ nTimerStart = GetTimeMillis();
+ nHashCounter = 0;
+ string strStatus = strprintf(" %.0f khash/s", dHashesPerSec/1000.0);
+ UIThreadCall(bind(CalledSetStatusBar, strStatus, 0));
+ static int64 nLogTime;
+ if (GetTime() - nLogTime > 30 * 60)
+ {
+ nLogTime = GetTime();
+ printf("%s ", DateTimeStrFormat("%x %H:%M", GetTime()).c_str());
+ printf("hashmeter %3d CPUs %6.0f khash/s\n", vnThreadsRunning[3], dHashesPerSec/1000.0);
+ }
+ }
}
}
diff --git a/makefile.unix b/makefile.unix
index b42f1d66fb..f6ca110b7f 100644
--- a/makefile.unix
+++ b/makefile.unix
@@ -68,6 +68,6 @@ bitcoind: $(OBJS:obj/%=obj/nogui/%) obj/sha.o
clean:
- -rm obj/*.o
- -rm obj/nogui/*.o
- -rm headers.h.gch
+ -rm -f obj/*.o
+ -rm -f obj/nogui/*.o
+ -rm -f headers.h.gch
diff --git a/rpc.cpp b/rpc.cpp
index a9f16e6354..4408d36347 100644
--- a/rpc.cpp
+++ b/rpc.cpp
@@ -927,20 +927,22 @@ int CommandLineRPC(int argc, char *argv[])
string strResult = (result.type() == str_type ? result.get_str() : write_string(result, true));
if (result.type() != null_type)
{
- if (fWindows && fGUI)
- // Windows GUI apps can't print to command line,
- // so settle for a message box yuck
- MyMessageBox(strResult.c_str(), "Bitcoin", wxOK);
- else
- fprintf(stdout, "%s\n", strResult.c_str());
+#if defined(__WXMSW__) && wxUSE_GUI
+ // Windows GUI apps can't print to command line,
+ // so settle for a message box yuck
+ MyMessageBox(strResult.c_str(), "Bitcoin", wxOK);
+#else
+ fprintf(stdout, "%s\n", strResult.c_str());
+#endif
}
return 0;
}
catch (std::exception& e) {
- if (fWindows && fGUI)
- MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK);
- else
- fprintf(stderr, "error: %s\n", e.what());
+#if defined(__WXMSW__) && wxUSE_GUI
+ MyMessageBox(strprintf("error: %s\n", e.what()).c_str(), "Bitcoin", wxOK);
+#else
+ fprintf(stderr, "error: %s\n", e.what());
+#endif
} catch (...) {
PrintException(NULL, "CommandLineRPC()");
}
diff --git a/serialize.h b/serialize.h
index 57ac5e34bb..44eeb233f9 100644
--- a/serialize.h
+++ b/serialize.h
@@ -20,7 +20,7 @@ class CDataStream;
class CAutoFile;
static const int VERSION = 300;
-static const char* pszSubVer = "";
+static const char* pszSubVer = ".1";
diff --git a/uibase.cpp b/uibase.cpp
index 7ce4981937..4209377d57 100644
--- a/uibase.cpp
+++ b/uibase.cpp
@@ -554,7 +554,7 @@ CAboutDialogBase::CAboutDialogBase( wxWindow* parent, wxWindowID id, const wxStr
bSizer631->Add( 0, 4, 0, wxEXPAND, 5 );
- m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2010 Satoshi Nakamoto.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nlicense.txt or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com)."), wxDefaultPosition, wxDefaultSize, 0 );
+ m_staticTextMain = new wxStaticText( this, wxID_ANY, _("Copyright (c) 2009-2010 Satoshi Nakamoto.\n\nThis is experimental software.\n\nDistributed under the MIT/X11 software license, see the accompanying file \nlicense.txt or http://www.opensource.org/licenses/mit-license.php.\n\nThis product includes software developed by the OpenSSL Project for use in the \nOpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by \nEric Young (eay@cryptsoft.com)."), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextMain->Wrap( -1 );
bSizer631->Add( m_staticTextMain, 0, wxALL, 5 );
diff --git a/uibase.h b/uibase.h
index 67501cb954..10c438c821 100644
--- a/uibase.h
+++ b/uibase.h
@@ -227,7 +227,7 @@ class CAboutDialogBase : public wxDialog
public:
wxStaticText* m_staticTextVersion;
- CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,315 ), long style = wxDEFAULT_DIALOG_STYLE );
+ CAboutDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("About Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 532,329 ), long style = wxDEFAULT_DIALOG_STYLE );
~CAboutDialogBase();
};
diff --git a/uiproject.fbp b/uiproject.fbp
index f5d654e130..4753924d9f 100644
--- a/uiproject.fbp
+++ b/uiproject.fbp
@@ -2866,7 +2866,7 @@
<property name="minimum_size"></property>
<property name="name">CAboutDialogBase</property>
<property name="pos"></property>
- <property name="size">532,315</property>
+ <property name="size">532,329</property>
<property name="style">wxDEFAULT_DIALOG_STYLE</property>
<property name="subclass"></property>
<property name="title">About Bitcoin</property>
@@ -3130,7 +3130,7 @@
<property name="font"></property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
- <property name="label">Copyright (c) 2009-2010 Satoshi Nakamoto.&#x0A;&#x0A;Distributed under the MIT/X11 software license, see the accompanying file &#x0A;license.txt or http://www.opensource.org/licenses/mit-license.php.&#x0A;&#x0A;This product includes software developed by the OpenSSL Project for use in the &#x0A;OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by &#x0A;Eric Young (eay@cryptsoft.com).</property>
+ <property name="label">Copyright (c) 2009-2010 Satoshi Nakamoto.&#x0A;&#x0A;This is experimental software.&#x0A;&#x0A;Distributed under the MIT/X11 software license, see the accompanying file &#x0A;license.txt or http://www.opensource.org/licenses/mit-license.php.&#x0A;&#x0A;This product includes software developed by the OpenSSL Project for use in the &#x0A;OpenSSL Toolkit (http://www.openssl.org/) and cryptographic software written by &#x0A;Eric Young (eay@cryptsoft.com).</property>
<property name="maximum_size"></property>
<property name="minimum_size"></property>
<property name="name">m_staticTextMain</property>
diff --git a/util.cpp b/util.cpp
index 62ae3b45de..c09419f971 100644
--- a/util.cpp
+++ b/util.cpp
@@ -20,13 +20,13 @@ bool fCommandLine = false;
// Init openssl library multithreading support
-static wxMutex** ppmutexOpenSSL;
+static boost::interprocess::interprocess_mutex** ppmutexOpenSSL;
void locking_callback(int mode, int i, const char* file, int line)
{
if (mode & CRYPTO_LOCK)
- ppmutexOpenSSL[i]->Lock();
+ ppmutexOpenSSL[i]->lock();
else
- ppmutexOpenSSL[i]->Unlock();
+ ppmutexOpenSSL[i]->unlock();
}
// Init
@@ -36,9 +36,9 @@ public:
CInit()
{
// Init openssl library multithreading support
- ppmutexOpenSSL = (wxMutex**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(wxMutex*));
+ ppmutexOpenSSL = (boost::interprocess::interprocess_mutex**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(boost::interprocess::interprocess_mutex*));
for (int i = 0; i < CRYPTO_num_locks(); i++)
- ppmutexOpenSSL[i] = new wxMutex();
+ ppmutexOpenSSL[i] = new boost::interprocess::interprocess_mutex();
CRYPTO_set_locking_callback(locking_callback);
#ifdef __WXMSW__
@@ -152,7 +152,7 @@ inline int OutputDebugStringF(const char* pszFormat, ...)
if (fileout)
{
//// Debug print useful for profiling
- //fprintf(fileout, " %"PRI64d" ", wxGetLocalTimeMillis().GetValue());
+ //fprintf(fileout, " %"PRI64d" ", GetTimeMillis());
va_list arg_ptr;
va_start(arg_ptr, pszFormat);
ret = vfprintf(fileout, pszFormat, arg_ptr);
@@ -521,6 +521,69 @@ void PrintException(std::exception* pex, const char* pszThread)
+#ifdef __WXMSW__
+typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
+
+string MyGetSpecialFolderPath(int nFolder, bool fCreate)
+{
+ char pszPath[MAX_PATH+100] = "";
+
+ // SHGetSpecialFolderPath isn't always available on old Windows versions
+ HMODULE hShell32 = LoadLibraryA("shell32.dll");
+ if (hShell32)
+ {
+ PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath =
+ (PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA");
+ if (pSHGetSpecialFolderPath)
+ (*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate);
+ FreeModule(hShell32);
+ }
+
+ // Backup option
+ if (pszPath[0] == '\0')
+ {
+ if (nFolder == CSIDL_STARTUP)
+ {
+ strcpy(pszPath, getenv("USERPROFILE"));
+ strcat(pszPath, "\\Start Menu\\Programs\\Startup");
+ }
+ else if (nFolder == CSIDL_APPDATA)
+ {
+ strcpy(pszPath, getenv("APPDATA"));
+ }
+ }
+
+ return pszPath;
+}
+#endif
+
+string GetDefaultDataDir()
+{
+ // Windows: C:\Documents and Settings\username\Application Data\Appname
+ // Mac: ~/Library/Application Support/Appname
+ // Unix: ~/.appname
+#ifdef __WXMSW__
+ // Windows
+ return MyGetSpecialFolderPath(CSIDL_APPDATA, true) + "\\Bitcoin";
+#else
+ char* pszHome = getenv("HOME");
+ if (pszHome == NULL || strlen(pszHome) == 0)
+ pszHome = (char*)"/";
+ string strHome = pszHome;
+ if (strHome[strHome.size()-1] != '/')
+ strHome += '/';
+#ifdef __WXOSX__
+ // Mac
+ strHome += "Library/Application Support/";
+ _mkdir(strHome.c_str());
+ return strHome + "Bitcoin";
+#else
+ // Unix
+ return strHome + ".bitcoin";
+#endif
+#endif
+}
+
void GetDataDir(char* pszDir)
{
// pszDir must be at least MAX_PATH length.
@@ -538,11 +601,6 @@ void GetDataDir(char* pszDir)
{
// This can be called during exceptions by printf, so we cache the
// value so we don't have to do memory allocations after that.
- // wxStandardPaths::GetUserDataDir
- // Return the directory for the user-dependent application data files:
- // Unix: ~/.appname
- // Windows: C:\Documents and Settings\username\Application Data\appname
- // Mac: ~/Library/Application Support/appname
static char pszCachedDir[MAX_PATH];
if (pszCachedDir[0] == 0)
{
diff --git a/util.h b/util.h
index 40d46bc174..e92204f22d 100644
--- a/util.h
+++ b/util.h
@@ -141,6 +141,9 @@ void ParseParameters(int argc, char* argv[]);
const char* wxGetTranslation(const char* psz);
int GetFilesize(FILE* file);
void GetDataDir(char* pszDirRet);
+#ifdef __WXMSW__
+string MyGetSpecialFolderPath(int nFolder, bool fCreate);
+#endif
string GetDataDir();
void ShrinkDebugFile();
uint64 GetRand(uint64 nMax);
@@ -174,13 +177,13 @@ public:
bool TryEnter() { return TryEnterCriticalSection(&cs); }
#else
protected:
- wxMutex mutex;
+ boost::interprocess::interprocess_recursive_mutex mutex;
public:
- explicit CCriticalSection() : mutex(wxMUTEX_RECURSIVE) { }
+ explicit CCriticalSection() { }
~CCriticalSection() { }
- void Enter() { mutex.Lock(); }
- void Leave() { mutex.Unlock(); }
- bool TryEnter() { return mutex.TryLock() == wxMUTEX_NO_ERROR; }
+ void Enter() { mutex.lock(); }
+ void Leave() { mutex.unlock(); }
+ bool TryEnter() { return mutex.try_lock(); }
#endif
public:
const char* pszFile;
@@ -324,7 +327,8 @@ inline int64 PerformanceCounter()
inline int64 GetTimeMillis()
{
- return wxGetLocalTimeMillis().GetValue();
+ return (posix_time::ptime(posix_time::microsec_clock::universal_time()) -
+ posix_time::ptime(gregorian::date(1970,1,1))).total_milliseconds();
}
inline string DateTimeStrFormat(const char* pszFormat, int64 nTime)
@@ -513,7 +517,7 @@ inline pthread_t CreateThread(void(*pfn)(void*), void* parg, bool fWantHandle=fa
return hthread;
}
-#define THREAD_PRIORITY_LOWEST PRIO_MIN
+#define THREAD_PRIORITY_LOWEST PRIO_MAX
#define THREAD_PRIORITY_BELOW_NORMAL 2
#define THREAD_PRIORITY_NORMAL 0
#define THREAD_PRIORITY_ABOVE_NORMAL 0