From 17221a12d28de70bf2d0071f2359a4b13668dfc5 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Tue, 18 Jun 2013 10:53:04 +0800 Subject: [PATCH] fixes berkeley db calls --- src/storage/flexible_ngram.h | 8 ++++++++ src/storage/ngram.cpp | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/storage/flexible_ngram.h b/src/storage/flexible_ngram.h index db4436f..6cff7ff 100644 --- a/src/storage/flexible_ngram.h +++ b/src/storage/flexible_ngram.h @@ -541,6 +541,7 @@ public: */ bool get_all_items(GArray * items){ g_array_set_size(items, 0); + if ( !m_db ) return false; @@ -551,6 +552,9 @@ public: /* Get a cursor */ m_db->cursor(m_db, NULL, &cursorp, 0); + if (NULL == cursorp) + return false; + /* Initialize our DBTs. */ memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); @@ -567,6 +571,10 @@ public: if ( ret != DB_NOTFOUND ){ fprintf(stderr, "training db error, exit!"); + + if (cursorp != NULL) + cursorp->c_close(cursorp); + exit(EIO); } diff --git a/src/storage/ngram.cpp b/src/storage/ngram.cpp index 7509b17..3964388 100644 --- a/src/storage/ngram.cpp +++ b/src/storage/ngram.cpp @@ -287,6 +287,9 @@ bool Bigram::load_db(const char * dbfile){ ret = db_create(&tmp_db, NULL, 0); assert(ret == 0); + if (NULL == tmp_db) + return false; + ret = tmp_db->open(tmp_db, NULL, dbfile, NULL, DB_HASH, DB_RDONLY, 0600); if ( ret != 0 ) @@ -294,9 +297,13 @@ bool Bigram::load_db(const char * dbfile){ DBC * cursorp = NULL; DBT key, data; + /* Get a cursor */ tmp_db->cursor(tmp_db, NULL, &cursorp, 0); + if (NULL == cursorp) + return false; + /* Initialize our DBTs. */ memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); @@ -328,6 +335,9 @@ bool Bigram::save_db(const char * dbfile){ ret = db_create(&tmp_db, NULL, 0); assert(ret == 0); + if (NULL == tmp_db) + return false; + ret = tmp_db->open(tmp_db, NULL, dbfile, NULL, DB_HASH, DB_CREATE, 0600); if ( ret != 0 ) @@ -338,6 +348,9 @@ bool Bigram::save_db(const char * dbfile){ /* Get a cursor */ m_db->cursor(m_db, NULL, &cursorp, 0); + if (NULL == cursorp) + return false; + /* Initialize our DBTs. */ memset(&key, 0, sizeof(DBT)); memset(&data, 0, sizeof(DBT)); @@ -444,7 +457,10 @@ bool Bigram::get_all_items(GArray * items){ DBT key, data; int ret; /* Get a cursor */ - m_db->cursor(m_db, NULL, &cursorp, 0); + m_db->cursor(m_db, NULL, &cursorp, 0); + + if (NULL == cursorp) + return false; /* Initialize our DBTs. */ memset(&key, 0, sizeof(DBT)); -- 2.7.4