summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2013-07-26 12:35:46 +0800
committerPeng Wu <alexepico@gmail.com>2013-07-26 12:35:46 +0800
commit8abc8cfd97cfe63c8e26e0838d4c825283b30630 (patch)
tree9f1711f61e2efe3d9e63eb21ded03e96e9bd2a1d
parent3a2461b45a39d21cd9a92129327d055b1eed2927 (diff)
downloadlibpinyin-8abc8cfd97cfe63c8e26e0838d4c825283b30630.tar.gz
libpinyin-8abc8cfd97cfe63c8e26e0838d4c825283b30630.tar.xz
libpinyin-8abc8cfd97cfe63c8e26e0838d4c825283b30630.zip
Force to use C locale to load table.conf
-rw-r--r--src/storage/table_info.cpp14
-rw-r--r--tests/storage/test_table_info.cpp3
2 files changed, 17 insertions, 0 deletions
diff --git a/src/storage/table_info.cpp b/src/storage/table_info.cpp
index 795d93d..63af8e0 100644
--- a/src/storage/table_info.cpp
+++ b/src/storage/table_info.cpp
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <assert.h>
#include <string.h>
+#include <locale.h>
using namespace pinyin;
@@ -121,6 +122,8 @@ static PHRASE_FILE_TYPE to_file_type(const char * str) {
bool SystemTableInfo::load(const char * filename) {
reset();
+ char * locale = setlocale(LC_NUMERIC, "C");
+
FILE * input = fopen(filename, "r");
if (NULL == input) {
fprintf(stderr, "open %s failed.\n", filename);
@@ -183,6 +186,9 @@ bool SystemTableInfo::load(const char * filename) {
/* postfix reserved tables. */
postfix_tables();
+
+ setlocale(LC_NUMERIC, locale);
+
return true;
}
@@ -208,6 +214,8 @@ void UserTableInfo::reset() {
bool UserTableInfo::load(const char * filename) {
reset();
+ char * locale = setlocale(LC_NUMERIC, "C");
+
FILE * input = fopen(filename, "r");
if (NULL == input) {
fprintf(stderr, "open %s failed.", filename);
@@ -237,10 +245,14 @@ bool UserTableInfo::load(const char * filename) {
fclose(input);
+ setlocale(LC_NUMERIC, locale);
+
return true;
}
bool UserTableInfo::save(const char * filename) {
+ char * locale = setlocale(LC_NUMERIC, "C");
+
FILE * output = fopen(filename, "w");
if (NULL == output) {
fprintf(stderr, "write %s failed.\n", filename);
@@ -252,6 +264,8 @@ bool UserTableInfo::save(const char * filename) {
fclose(output);
+ setlocale(LC_NUMERIC, locale);
+
return true;
}
diff --git a/tests/storage/test_table_info.cpp b/tests/storage/test_table_info.cpp
index 68b4735..5781c97 100644
--- a/tests/storage/test_table_info.cpp
+++ b/tests/storage/test_table_info.cpp
@@ -20,10 +20,13 @@
*/
#include <stdio.h>
+#include <locale.h>
#include "pinyin_internal.h"
int main(int argc, char * argv[]) {
+ setlocale(LC_ALL, "");
+
SystemTableInfo system_table_info;
bool retval = system_table_info.load("../../data/table.conf");