/Users/eugenesiegel/btc/bitcoin/src/util/readwritefile.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2015-2022 The Bitcoin Core developers |
2 | | // Copyright (c) 2017 The Zcash developers |
3 | | // Distributed under the MIT software license, see the accompanying |
4 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
5 | | |
6 | | #include <util/readwritefile.h> |
7 | | |
8 | | #include <util/fs.h> |
9 | | |
10 | | #include <algorithm> |
11 | | #include <cstdio> |
12 | | #include <limits> |
13 | | #include <string> |
14 | | #include <utility> |
15 | | |
16 | | std::pair<bool,std::string> ReadBinaryFile(const fs::path &filename, size_t maxsize) |
17 | 0 | { |
18 | 0 | FILE *f = fsbridge::fopen(filename, "rb"); |
19 | 0 | if (f == nullptr) |
20 | 0 | return std::make_pair(false,""); |
21 | 0 | std::string retval; |
22 | 0 | char buffer[128]; |
23 | 0 | do { |
24 | 0 | const size_t n = fread(buffer, 1, std::min(sizeof(buffer), maxsize - retval.size()), f); |
25 | | // Check for reading errors so we don't return any data if we couldn't |
26 | | // read the entire file (or up to maxsize) |
27 | 0 | if (ferror(f)) { |
28 | 0 | fclose(f); |
29 | 0 | return std::make_pair(false,""); |
30 | 0 | } |
31 | 0 | retval.append(buffer, buffer+n); |
32 | 0 | } while (!feof(f) && retval.size() < maxsize); |
33 | 0 | fclose(f); |
34 | 0 | return std::make_pair(true,retval); |
35 | 0 | } |
36 | | |
37 | | bool WriteBinaryFile(const fs::path &filename, const std::string &data) |
38 | 0 | { |
39 | 0 | FILE *f = fsbridge::fopen(filename, "wb"); |
40 | 0 | if (f == nullptr) |
41 | 0 | return false; |
42 | 0 | if (fwrite(data.data(), 1, data.size(), f) != data.size()) { |
43 | 0 | fclose(f); |
44 | 0 | return false; |
45 | 0 | } |
46 | 0 | if (fclose(f) != 0) { |
47 | 0 | return false; |
48 | 0 | } |
49 | 0 | return true; |
50 | 0 | } |