[Groonga-commit] groonga/groonga [master] Reimplement grn_hash_truncate().

Back to archive index

null+****@clear***** null+****@clear*****
2012年 4月 3日 (火) 18:39:42 JST


Susumu Yata	2012-04-03 18:39:42 +0900 (Tue, 03 Apr 2012)

  New Revision: d529dd15c99a45e4adbeeb48402556c95c90c5ce

  Log:
    Reimplement grn_hash_truncate().

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+23 -15)
===================================================================
--- lib/hash.c    2012-04-03 18:19:01 +0900 (fffd0de)
+++ lib/hash.c    2012-04-03 18:39:42 +0900 (3c2695e)
@@ -1554,35 +1554,43 @@ grn_hash_remove(grn_ctx *ctx, const char *path)
 grn_rc
 grn_hash_truncate(grn_ctx *ctx, grn_hash *hash)
 {
-  grn_rc rc;
-  char *path;
+  grn_rc rc = GRN_SUCCESS;
+  char *path = NULL;
   uint32_t key_size, value_size, flags;
 
   if (!ctx || !hash) {
     return GRN_INVALID_ARGUMENT;
   }
 
-  if (IO_HASHP(hash) &&
-      (path = (char *)grn_io_path(hash->io)) && *path != '\0') {
-    if (!(path = GRN_STRDUP(path))) {
-      ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path.");
-      return GRN_NO_MEMORY_AVAILABLE;
+  if (IO_HASHP(hash)) {
+    const char * const io_path = grn_io_path(hash->io);
+    if (io_path && *io_path) {
+      path = GRN_STRDUP(io_path);
+      if (!path) {
+        ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path.");
+        return GRN_NO_MEMORY_AVAILABLE;
+      }
     }
-  } else {
-    path = NULL;
   }
   key_size = hash->key_size;
   value_size = hash->value_size;
   flags = hash->obj.header.flags;
 
   if (IO_HASHP(hash)) {
-    if ((rc = grn_io_close(ctx, hash->io))) { goto exit; }
-    hash->io = NULL;
-    if (path && (rc = grn_io_remove(ctx, path))) { goto exit; }
+    rc = grn_io_close(ctx, hash->io);
+    if (!rc) {
+      hash->io = NULL;
+      if (path) {
+        rc = grn_io_remove(ctx, path);
+      }
+    }
+  }
+  if (!rc) {
+    rc = grn_hash_init(ctx, hash, path, key_size, value_size, flags);
+  }
+  if (path) {
+    GRN_FREE(path);
   }
-  rc = grn_hash_init(ctx, hash, path, key_size, value_size, flags);
-exit:
-  if (path) { GRN_FREE(path); }
   return rc;
 }
 




Groonga-commit メーリングリストの案内
Back to archive index