|
17 | 17 |
|
18 | 18 | #include <tesseract/capi.h> |
19 | 19 |
|
20 | | -#include <cstring> // for strdup |
21 | | - |
22 | 20 | const char *TessVersion() { |
23 | 21 | return TessBaseAPI::Version(); |
24 | 22 | } |
25 | 23 |
|
| 24 | +static char *MakeText(const std::string& srcText) { |
| 25 | + auto *text = new char[srcText.size() + 1]; |
| 26 | + srcText.copy(text, srcText.size()); |
| 27 | + text[srcText.size()] = 0; |
| 28 | + return text; |
| 29 | +} |
| 30 | + |
26 | 31 | void TessDeleteText(const char *text) { |
27 | 32 | delete[] text; |
28 | 33 | } |
29 | 34 |
|
| 35 | +static char **MakeTextArray(const std::vector<std::string>& srcArr) { |
| 36 | + auto **arr = new char *[srcArr.size() + 1]; |
| 37 | + for (size_t i = 0; i < srcArr.size(); ++i) { |
| 38 | + arr[i] = MakeText(srcArr[i]); |
| 39 | + } |
| 40 | + arr[srcArr.size()] = nullptr; |
| 41 | + return arr; |
| 42 | +} |
| 43 | + |
30 | 44 | void TessDeleteTextArray(char **arr) { |
31 | 45 | for (char **pos = arr; *pos != nullptr; ++pos) { |
32 | 46 | delete[] * pos; |
@@ -251,23 +265,13 @@ const char *TessBaseAPIGetInitLanguagesAsString(const TessBaseAPI *handle) { |
251 | 265 | char **TessBaseAPIGetLoadedLanguagesAsVector(const TessBaseAPI *handle) { |
252 | 266 | std::vector<std::string> languages; |
253 | 267 | handle->GetLoadedLanguagesAsVector(&languages); |
254 | | - char **arr = new char *[languages.size() + 1]; |
255 | | - for (auto &language : languages) { |
256 | | - arr[&language - &languages[0]] = strdup(language.c_str()); |
257 | | - } |
258 | | - arr[languages.size()] = nullptr; |
259 | | - return arr; |
| 268 | + return MakeTextArray(languages); |
260 | 269 | } |
261 | 270 |
|
262 | 271 | char **TessBaseAPIGetAvailableLanguagesAsVector(const TessBaseAPI *handle) { |
263 | 272 | std::vector<std::string> languages; |
264 | 273 | handle->GetAvailableLanguagesAsVector(&languages); |
265 | | - char **arr = new char *[languages.size() + 1]; |
266 | | - for (auto &language : languages) { |
267 | | - arr[&language - &languages[0]] = strdup(language.c_str()); |
268 | | - } |
269 | | - arr[languages.size()] = nullptr; |
270 | | - return arr; |
| 274 | + return MakeTextArray(languages); |
271 | 275 | } |
272 | 276 |
|
273 | 277 | void TessBaseAPIInitForAnalysePage(TessBaseAPI *handle) { |
|
0 commit comments