From d195f76a25a90bb88d2c2bdf4a9649937751cb41 Mon Sep 17 00:00:00 2001 From: Eric Lombrozo Date: Thu, 6 Feb 2014 13:45:57 -0800 Subject: [PATCH] Added windows and os x support for the datadir. --- eth/main.cpp | 3 ++- libethereum/BlockChain.cpp | 3 ++- libethereum/FileSystem.cpp | 55 ++++++++++++++++++++++++++++++++++++++ libethereum/FileSystem.h | 26 ++++++++++++++++++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 libethereum/FileSystem.cpp create mode 100644 libethereum/FileSystem.h diff --git a/eth/main.cpp b/eth/main.cpp index 3d87c9732..d710813d0 100644 --- a/eth/main.cpp +++ b/eth/main.cpp @@ -25,6 +25,7 @@ #include "PeerNetwork.h" #include "BlockChain.h" #include "State.h" +#include "FileSystem.h" using namespace std; using namespace eth; @@ -76,7 +77,7 @@ int main(int argc, char** argv) KeyPair us = KeyPair::create(); Address coinbase = us.address(); - string configFile = string(getenv("HOME")) + "/.ethereum/config.rlp"; + string configFile = getDataDir() + "/config.rlp"; bytes b = contents(configFile); if (b.size()) { diff --git a/libethereum/BlockChain.cpp b/libethereum/BlockChain.cpp index 2566d33f1..966abd9c6 100644 --- a/libethereum/BlockChain.cpp +++ b/libethereum/BlockChain.cpp @@ -27,10 +27,11 @@ #include "BlockInfo.h" #include "State.h" #include "BlockChain.h" +#include "FileSystem.h" using namespace std; using namespace eth; -std::string Defaults::s_dbPath = string(getenv("HOME")) + "/.ethereum"; +std::string Defaults::s_dbPath = getDataDir(); namespace eth { diff --git a/libethereum/FileSystem.cpp b/libethereum/FileSystem.cpp new file mode 100644 index 000000000..65ab0e485 --- /dev/null +++ b/libethereum/FileSystem.cpp @@ -0,0 +1,55 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Foobar is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . +*/ +/** @file FileSystem.cpp + * @author Eric Lombrozo + * @date 2014 + */ + +#include "FileSystem.h" +#include + +#ifdef _WIN32 +#include +#endif + +std::string getDataDir() +{ +#ifdef _WIN32 + char path[1024] = ""; + if (SHGetSpecialFolderPathA(NULL, path, CSIDL_APPDATA, true)) + return (boost::filesystem::path(path) / "Ethereum").string(); + else + { + std::cerr << "getDataDir() - SHGetSpecialFolderPathA() failed." << std::endl; + throw std::runtime_error("getDataDir() - SHGetSpecialFolderPathA() failed."); + } +#else + boost::filesystem::path dataDirPath; + char* homeDir = getenv("HOME"); + if (homeDir == NULL || strlen(homeDir) == 0) + dataDirPath = boost::filesystem::path("/"); + else + dataDirPath = boost::filesystem::path(homeDir); +#if defined(__APPLE__) && defined(__MACH__) + dataDirPath /= "Library/Application Support"; + boost::filesystem::create_directory(dataDirPath); + return (dataDirPath / "Ethereum").string(); +#else + return (dataDirPath / ".ethereum").string(); +#endif +#endif +} diff --git a/libethereum/FileSystem.h b/libethereum/FileSystem.h new file mode 100644 index 000000000..f5d0cc747 --- /dev/null +++ b/libethereum/FileSystem.h @@ -0,0 +1,26 @@ +/* + This file is part of cpp-ethereum. + + cpp-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Foobar is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . +*/ +/** @file FileSystem.h + * @author Eric Lombrozo + * @date 2014 + */ + +#pragma once + +#include + +std::string getDataDir();