|
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