From 3292484f67af8bdda23aa5e510918d0115785291 Mon Sep 17 00:00:00 2001 From: Stefan Weil Date: Fri, 8 Jun 2018 17:38:18 +0200 Subject: [PATCH] Test for correct locale settings Normal C++ programs like those which are built for tesseract automatically set the locale "C". There can be different locale settings if the tesseract library is used in other software. A wrong locale can cause wrong results from sscanf which is used at different places in the tesseract code, so make sure that we have the right locale settings and fail if that is not the case. Signed-off-by: Stefan Weil --- src/api/baseapi.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/api/baseapi.cpp b/src/api/baseapi.cpp index 82e3e33ef..b17fe2d2c 100644 --- a/src/api/baseapi.cpp +++ b/src/api/baseapi.cpp @@ -43,6 +43,7 @@ #endif // _WIN32 #include +#include #include #include #include @@ -185,7 +186,15 @@ TessBaseAPI::TessBaseAPI() rect_width_(0), rect_height_(0), image_width_(0), - image_height_(0) {} + image_height_(0) { + const char *locale; + locale = std::setlocale(LC_ALL, nullptr); + ASSERT_HOST(!strcmp(locale, "C")); + locale = std::setlocale(LC_CTYPE, nullptr); + ASSERT_HOST(!strcmp(locale, "C")); + locale = std::setlocale(LC_NUMERIC, nullptr); + ASSERT_HOST(!strcmp(locale, "C")); +} TessBaseAPI::~TessBaseAPI() { End();