summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2012-06-19 11:22:08 +0800
committerPeng Wu <alexepico@gmail.com>2012-06-19 11:22:08 +0800
commit05945ae69172859cb26f33363faccb76cb189629 (patch)
treecc721de0fe6fc2a6d1856e50a59d7667cc3b8c0f
parent20d042e8f021f6c1dd5a6adde7b726a153556f3b (diff)
downloadlibpinyin-05945ae69172859cb26f33363faccb76cb189629.tar.gz
libpinyin-05945ae69172859cb26f33363faccb76cb189629.tar.xz
libpinyin-05945ae69172859cb26f33363faccb76cb189629.zip
improves pinyin_save
-rw-r--r--src/pinyin.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp
index 49cc016..2e97ab5 100644
--- a/src/pinyin.cpp
+++ b/src/pinyin.cpp
@@ -229,6 +229,7 @@ bool pinyin_load_phrase_library(pinyin_context_t * context,
chunkfilename = g_build_filename(context->m_user_dir,
phrasefilename, NULL);
+ /* TODO: check bin file exists. if not, create a new one. */
chunk->load(chunkfilename);
g_free(chunkfilename);
@@ -303,12 +304,21 @@ bool pinyin_save(pinyin_context_t * context){
} else {
/* user phrase library */
g_free(chunkfilename);
- chunkfilename = g_build_filename(context->m_user_dir,
- phrasefilename, NULL);
+
+ gchar * tmpfilename = g_strdup_printf("%s.tmp", phrasefilename);
context->m_phrase_index->store(i, chunk);
- chunk->save(chunkfilename);
- g_free(chunkfilename);
- delete chunk; delete log;
+ gchar * chunkpathname = g_build_filename(context->m_user_dir,
+ phrasefilename, NULL);
+ gchar * tmppathname = g_build_filename(context->m_user_dir,
+ tmpfilename, NULL);
+ g_free(tmpfilename);
+
+ chunk->save(tmppathname);
+ rename(tmppathname, chunkpathname);
+ g_free(chunkpathname);
+ g_free(tmppathname);
+ delete chunk;
+ delete log;
}
}