@@ -16,14 +16,12 @@ static const char *HEADER_END = "HEADER=END";
16
16
static const char *DATA_END = " DATA=END" ;
17
17
typedef std::pair<std::vector<unsigned char >, std::vector<unsigned char > > KeyValPair;
18
18
19
- bool RecoverDatabaseFile (const fs::path& file_path)
19
+ bool RecoverDatabaseFile (const fs::path& file_path, bilingual_str& error, std::vector<bilingual_str>& warnings )
20
20
{
21
21
std::string filename;
22
22
std::shared_ptr<BerkeleyEnvironment> env = GetWalletEnv (file_path, filename);
23
23
24
- bilingual_str open_err;
25
- if (!env->Open (open_err)) {
26
- tfm::format (std::cerr, " %s\n " , open_err.original );
24
+ if (!env->Open (error)) {
27
25
return false ;
28
26
}
29
27
@@ -39,11 +37,9 @@ bool RecoverDatabaseFile(const fs::path& file_path)
39
37
40
38
int result = env->dbenv ->dbrename (nullptr , filename.c_str (), nullptr ,
41
39
newFilename.c_str (), DB_AUTO_COMMIT);
42
- if (result == 0 )
43
- LogPrintf (" Renamed %s to %s\n " , filename, newFilename);
44
- else
40
+ if (result != 0 )
45
41
{
46
- LogPrintf ( " Failed to rename %s to %s\n " , filename, newFilename);
42
+ error = strprintf ( Untranslated ( " Failed to rename %s to %s" ) , filename, newFilename);
47
43
return false ;
48
44
}
49
45
@@ -60,10 +56,10 @@ bool RecoverDatabaseFile(const fs::path& file_path)
60
56
Db db (env->dbenv .get (), 0 );
61
57
result = db.verify (newFilename.c_str (), nullptr , &strDump, DB_SALVAGE | DB_AGGRESSIVE);
62
58
if (result == DB_VERIFY_BAD) {
63
- LogPrintf ( " Salvage: Database salvage found errors, all data may not be recoverable.\n " );
59
+ warnings. push_back ( Untranslated ( " Salvage: Database salvage found errors, all data may not be recoverable." ) );
64
60
}
65
61
if (result != 0 && result != DB_VERIFY_BAD) {
66
- LogPrintf ( " Salvage: Database salvage failed with result %d.\n " , result);
62
+ error = strprintf ( Untranslated ( " Salvage: Database salvage failed with result %d." ) , result);
67
63
return false ;
68
64
}
69
65
@@ -87,7 +83,7 @@ bool RecoverDatabaseFile(const fs::path& file_path)
87
83
break ;
88
84
getline (strDump, valueHex);
89
85
if (valueHex == DATA_END) {
90
- LogPrintf ( " Salvage: WARNING: Number of keys in data does not match number of values.\n " );
86
+ warnings. push_back ( Untranslated ( " Salvage: WARNING: Number of keys in data does not match number of values." ) );
91
87
break ;
92
88
}
93
89
salvagedData.push_back (make_pair (ParseHex (keyHex), ParseHex (valueHex)));
@@ -96,18 +92,17 @@ bool RecoverDatabaseFile(const fs::path& file_path)
96
92
97
93
bool fSuccess ;
98
94
if (keyHex != DATA_END) {
99
- LogPrintf ( " Salvage: WARNING: Unexpected end of file while reading salvage output.\n " );
95
+ warnings. push_back ( Untranslated ( " Salvage: WARNING: Unexpected end of file while reading salvage output." ) );
100
96
fSuccess = false ;
101
97
} else {
102
98
fSuccess = (result == 0 );
103
99
}
104
100
105
101
if (salvagedData.empty ())
106
102
{
107
- LogPrintf ( " Salvage(aggressive) found no records in %s.\n " , newFilename);
103
+ error = strprintf ( Untranslated ( " Salvage(aggressive) found no records in %s." ) , newFilename);
108
104
return false ;
109
105
}
110
- LogPrintf (" Salvage(aggressive) found %u records\n " , salvagedData.size ());
111
106
112
107
std::unique_ptr<Db> pdbCopy = MakeUnique<Db>(env->dbenv .get (), 0 );
113
108
int ret = pdbCopy->open (nullptr , // Txn pointer
@@ -117,7 +112,7 @@ bool RecoverDatabaseFile(const fs::path& file_path)
117
112
DB_CREATE, // Flags
118
113
0 );
119
114
if (ret > 0 ) {
120
- LogPrintf ( " Cannot create database file %s\n " , filename);
115
+ error = strprintf ( Untranslated ( " Cannot create database file %s" ) , filename);
121
116
pdbCopy->close (0 );
122
117
return false ;
123
118
}
@@ -141,7 +136,7 @@ bool RecoverDatabaseFile(const fs::path& file_path)
141
136
}
142
137
if (!fReadOK )
143
138
{
144
- LogPrintf ( " WARNING: WalletBatch::Recover skipping %s: %s\n " , strType, strErr);
139
+ warnings. push_back ( strprintf ( Untranslated ( " WARNING: WalletBatch::Recover skipping %s: %s" ) , strType, strErr) );
145
140
continue ;
146
141
}
147
142
Dbt datKey (&row.first [0 ], row.first .size ());
0 commit comments