/* 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. cpp-ethereum 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 cpp-ethereum. If not, see . */ /** @file CommonIO.cpp * @author Gav Wood * @date 2014 */ #include "CommonIO.h" #include #include "Exceptions.h" using namespace std; using namespace dev; string dev::memDump(bytes const& _bytes, unsigned _width, bool _html) { stringstream ret; if (_html) ret << "
";
	for (unsigned i = 0; i < _bytes.size(); i += _width)
	{
		ret << hex << setw(4) << setfill('0') << i << " ";
		for (unsigned j = i; j < i + _width; ++j)
			if (j < _bytes.size())
				if (_bytes[j] >= 32 && _bytes[j] < 127)
					if ((char)_bytes[j] == '<' && _html)
						ret << "<";
					else if ((char)_bytes[j] == '&' && _html)
						ret << "&";
					else
						ret << (char)_bytes[j];
				else
					ret << '?';
			else
				ret << ' ';
		ret << " ";
		for (unsigned j = i; j < i + _width && j < _bytes.size(); ++j)
			ret << setfill('0') << setw(2) << hex << (unsigned)_bytes[j] << " ";
		ret << "\n";
	}
	if (_html)
		ret << "
"; return ret.str(); } // Don't forget to delete[] later. bytesRef dev::contentsNew(std::string const& _file, bytesRef _dest) { std::ifstream is(_file, std::ifstream::binary); if (!is) return bytesRef(); // get length of file: is.seekg (0, is.end); streamoff length = is.tellg(); if (length == 0) // return early, MSVC does not like reading 0 bytes return bytesRef(); if (!_dest.empty() && _dest.size() != (unsigned)length) return bytesRef(); is.seekg (0, is.beg); bytesRef ret = _dest.empty() ? bytesRef(new byte[length], length) : _dest; is.read((char*)ret.data(), length); is.close(); return ret; } bytes dev::contents(std::string const& _file) { std::ifstream is(_file, std::ifstream::binary); if (!is) return bytes(); // get length of file: is.seekg (0, is.end); streamoff length = is.tellg(); if (length == 0) // return early, MSVC does not like reading 0 bytes return bytes(); is.seekg (0, is.beg); bytes ret(length); is.read((char*)ret.data(), length); is.close(); return ret; } string dev::contentsString(std::string const& _file) { std::ifstream is(_file, std::ifstream::binary); if (!is) return string(); // get length of file: is.seekg (0, is.end); streamoff length = is.tellg(); if (length == 0) // return early, MSVC does not like reading 0 bytes return string(); is.seekg (0, is.beg); string ret; ret.resize(length); is.read((char*)ret.data(), length); is.close(); return ret; } void dev::writeFile(std::string const& _file, bytesConstRef _data) { ofstream(_file, ios::trunc|ios::binary).write((char const*)_data.data(), _data.size()); }