summaryrefslogtreecommitdiff
path: root/net-p2p/monero/files/monero-0.18.3.3-common-support-boost-filesystem-copy_options.patch
blob: 970c873de85385dbe32510580f93d5e1def5d82f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
From fcc20f5496fe97c01321963359631c4b22c4f0cf Mon Sep 17 00:00:00 2001
From: 0xFFFC0000 <0xFFFC0000@proton.me>
Date: Tue, 30 Apr 2024 23:20:10 +0000
Subject: [PATCH] common: support boost filesystem copy_options.
 Co-authored-by: selsta <selsta@sent.at>

---
 src/common/boost_serialization_helper.h |  3 ++-
 src/common/util.cpp                     | 18 ++++++++++++++++++
 src/common/util.h                       |  2 ++
 src/p2p/net_peerlist.cpp                |  3 ++-
 src/wallet/wallet2.cpp                  |  4 ++--
 tests/unit_tests/wallet_storage.cpp     | 13 +++++++------
 6 files changed, 33 insertions(+), 10 deletions(-)

diff --git a/src/common/boost_serialization_helper.h b/src/common/boost_serialization_helper.h
index 4a903107f3cb..1eca39f407b9 100644
--- a/src/common/boost_serialization_helper.h
+++ b/src/common/boost_serialization_helper.h
@@ -35,6 +35,7 @@
 #include <boost/archive/portable_binary_iarchive.hpp>
 #include <boost/filesystem/operations.hpp>
 
+#include "common/util.h"
 
 namespace tools
 {
@@ -110,7 +111,7 @@ namespace tools
     catch(...)
     {
       // if failed, try reading in unportable mode
-      boost::filesystem::copy_file(file_path, file_path + ".unportable", boost::filesystem::copy_option::overwrite_if_exists);
+      tools::copy_file(file_path, file_path + ".unportable");
       data_file.close();
       data_file.open( file_path, std::ios_base::binary | std::ios_base::in);
       if(data_file.fail())
diff --git a/src/common/util.cpp b/src/common/util.cpp
index 4b5e2adb8a49..d5f35ea7aed2 100644
--- a/src/common/util.cpp
+++ b/src/common/util.cpp
@@ -115,6 +115,24 @@ static int flock_exnb(int fd)
 
 namespace tools
 {
+
+  void copy_file(const std::string& from, const std::string& to)
+  {
+    using boost::filesystem::path;
+  #if BOOST_VERSION < 107400
+    // Remove this preprocessor if/else when we are bumping the boost version.
+    boost::filesystem::copy_file(
+        path(from),
+        path(to),
+        boost::filesystem::copy_option::overwrite_if_exists);
+  #else
+    boost::filesystem::copy_file(
+        path(from),
+        path(to),
+        boost::filesystem::copy_options::overwrite_existing);
+  #endif
+  }
+
   std::function<void(int)> signal_handler::m_handler;
 
   private_file::private_file() noexcept : m_handle(), m_filename() {}
diff --git a/src/common/util.h b/src/common/util.h
index f489594e8901..cfc0fb6923c4 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -67,6 +67,8 @@ namespace tools
     }
   };
 
+  void copy_file(const std::string& from, const std::string& to);
+
   //! A file restricted to process owner AND process. Deletes file on destruction.
   class private_file {
     std::unique_ptr<std::FILE, close_file> m_handle;
diff --git a/src/p2p/net_peerlist.cpp b/src/p2p/net_peerlist.cpp
index 3e132c91faef..c803b0cda695 100644
--- a/src/p2p/net_peerlist.cpp
+++ b/src/p2p/net_peerlist.cpp
@@ -42,6 +42,7 @@
 #include <boost/serialization/version.hpp>
 
 #include "net_peerlist_boost_serialization.h"
+#include "common/util.h"
 
 
 namespace nodetool
@@ -200,7 +201,7 @@ namespace nodetool
     if (!out)
     {
       // if failed, try reading in unportable mode
-      boost::filesystem::copy_file(path, path + ".unportable", boost::filesystem::copy_option::overwrite_if_exists);
+      tools::copy_file(path, path + ".unportable");
       src_file.close();
       src_file.open( path , std::ios_base::binary | std::ios_base::in);
       if(src_file.fail())
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index f34b1098804e..f8aea71c1a77 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -6208,7 +6208,7 @@ void wallet2::load(const std::string& wallet_, const epee::wipeable_string& pass
           catch (...)
           {
             LOG_PRINT_L0("Failed to open portable binary, trying unportable");
-            if (use_fs) boost::filesystem::copy_file(m_wallet_file, m_wallet_file + ".unportable", boost::filesystem::copy_option::overwrite_if_exists);
+            if (use_fs) tools::copy_file(m_wallet_file, m_wallet_file + ".unportable");
             std::stringstream iss;
             iss.str("");
             iss << cache_data;
@@ -6230,7 +6230,7 @@ void wallet2::load(const std::string& wallet_, const epee::wipeable_string& pass
       catch (...)
       {
         LOG_PRINT_L0("Failed to open portable binary, trying unportable");
-        if (use_fs) boost::filesystem::copy_file(m_wallet_file, m_wallet_file + ".unportable", boost::filesystem::copy_option::overwrite_if_exists);
+        if (use_fs) tools::copy_file(m_wallet_file, m_wallet_file + ".unportable");
         std::stringstream iss;
         iss.str("");
         iss << cache_file_buf;
diff --git a/tests/unit_tests/wallet_storage.cpp b/tests/unit_tests/wallet_storage.cpp
index dacaff9602ec..bf33936ed4ab 100644
--- a/tests/unit_tests/wallet_storage.cpp
+++ b/tests/unit_tests/wallet_storage.cpp
@@ -31,6 +31,7 @@
 
 #include "file_io_utils.h"
 #include "wallet/wallet2.h"
+#include "common/util.h"
 
 using namespace boost::filesystem;
 using namespace epee::file_io_utils;
@@ -47,8 +48,8 @@ TEST(wallet_storage, store_to_file2file)
     ASSERT_TRUE(is_file_exist(source_wallet_file.string()));
     ASSERT_TRUE(is_file_exist(source_wallet_file.string() + ".keys"));
 
-    copy_file(source_wallet_file, interm_wallet_file, copy_option::overwrite_if_exists);
-    copy_file(source_wallet_file.string() + ".keys", interm_wallet_file.string() + ".keys", copy_option::overwrite_if_exists);
+    tools::copy_file(source_wallet_file.string(), interm_wallet_file.string());
+    tools::copy_file(source_wallet_file.string() + ".keys", interm_wallet_file.string() + ".keys");
 
     ASSERT_TRUE(is_file_exist(interm_wallet_file.string()));
     ASSERT_TRUE(is_file_exist(interm_wallet_file.string() + ".keys"));
@@ -138,8 +139,8 @@ TEST(wallet_storage, change_password_same_file)
     ASSERT_TRUE(is_file_exist(source_wallet_file.string()));
     ASSERT_TRUE(is_file_exist(source_wallet_file.string() + ".keys"));
 
-    copy_file(source_wallet_file, interm_wallet_file, copy_option::overwrite_if_exists);
-    copy_file(source_wallet_file.string() + ".keys", interm_wallet_file.string() + ".keys", copy_option::overwrite_if_exists);
+    tools::copy_file(source_wallet_file.string(), interm_wallet_file.string());
+    tools::copy_file(source_wallet_file.string() + ".keys", interm_wallet_file.string() + ".keys");
 
     ASSERT_TRUE(is_file_exist(interm_wallet_file.string()));
     ASSERT_TRUE(is_file_exist(interm_wallet_file.string() + ".keys"));
@@ -177,8 +178,8 @@ TEST(wallet_storage, change_password_different_file)
     ASSERT_TRUE(is_file_exist(source_wallet_file.string()));
     ASSERT_TRUE(is_file_exist(source_wallet_file.string() + ".keys"));
 
-    copy_file(source_wallet_file, interm_wallet_file, copy_option::overwrite_if_exists);
-    copy_file(source_wallet_file.string() + ".keys", interm_wallet_file.string() + ".keys", copy_option::overwrite_if_exists);
+    tools::copy_file(source_wallet_file.string(), interm_wallet_file.string());
+    tools::copy_file(source_wallet_file.string() + ".keys", interm_wallet_file.string() + ".keys");
 
     ASSERT_TRUE(is_file_exist(interm_wallet_file.string()));
     ASSERT_TRUE(is_file_exist(interm_wallet_file.string() + ".keys"));