null+****@clear*****
null+****@clear*****
2011年 11月 10日 (木) 10:57:24 JST
Susumu Yata 2011-11-10 01:57:24 +0000 (Thu, 10 Nov 2011)
New Revision: 6cab10a254fb9ce8144a10d9e8e9afb389a6f748
Log:
fixed errors of grn_dat.
Modified files:
lib/dat.cpp
Modified: lib/dat.cpp (+12 -8)
===================================================================
--- lib/dat.cpp 2011-11-10 01:37:34 +0000 (abf2473)
+++ lib/dat.cpp 2011-11-10 01:57:24 +0000 (7f626c4)
@@ -730,14 +730,13 @@ grn_dat_cursor_close(grn_ctx *ctx, grn_dat_cursor *c)
int
grn_dat_cursor_get_key(grn_ctx *ctx, grn_dat_cursor *c, const void **key)
{
- if (!c || !c->cursor) {
- return 0;
- }
#ifndef WIN32
- const grn::dat::Key &key = static_cast<const grn::dat::Key *>(c->key);
- if (key.is_valid()) {
- *key = key.ptr();
- return (int)key.length();
+ if (c) {
+ const grn::dat::Key &key_ref = *static_cast<const grn::dat::Key *>(c->key);
+ if (key_ref.is_valid()) {
+ *key = key_ref.ptr();
+ return (int)key_ref.length();
+ }
}
#endif
return 0;
@@ -749,10 +748,15 @@ grn_dat_cursor_delete(grn_ctx *ctx, grn_dat_cursor *c,
{
if (!c || !c->cursor) {
return GRN_INVALID_ARGUMENT;
+ } else if (!grn_dat_open_trie_if_needed(ctx, c->dat)) {
+ return ctx->rc;
}
#ifndef WIN32
+ grn::dat::Trie * const trie = static_cast<grn::dat::Trie *>(c->dat->trie);
+ if (!trie) {
+ return GRN_INVALID_ARGUMENT;
+ }
try {
- grn::dat::Trie * const trie = static_cast<const grn::dat::Trie *>(c->cursor->dat->trie);
if (trie->remove(c->curr_rec)) {
return GRN_SUCCESS;
}