[Groonga-commit] groonga/groonga [master] Update grn_array_truncate().

Back to archive index

null+****@clear***** null+****@clear*****
2012年 3月 29日 (木) 13:02:12 JST


Susumu Yata	2012-03-29 13:02:12 +0900 (Thu, 29 Mar 2012)

  New Revision: 25fc428eacd69412b67998350bab3b26a35b897c

  Log:
    Update grn_array_truncate().
    
    Add NULL checks for arguments.
    Remove a cast that removes const.
    Remove a goto.

  Modified files:
    lib/hash.c

  Modified: lib/hash.c (+21 -16)
===================================================================
--- lib/hash.c    2012-03-29 12:53:42 +0900 (2952e55)
+++ lib/hash.c    2012-03-29 13:02:12 +0900 (2177295)
@@ -397,31 +397,36 @@ grn_array_remove(grn_ctx *ctx, const char *path)
 grn_rc
 grn_array_truncate(grn_ctx *ctx, grn_array *array)
 {
-  grn_rc rc;
-  char *path;
+  grn_rc rc = GRN_SUCCESS;
+  char *path = NULL;
   uint32_t value_size, flags;
 
-  if (IO_ARRAYP(array) &&
-      (path = (char *)grn_io_path(array->io)) && *path != '\0') {
-    if (!(path = GRN_STRDUP(path))) {
-      ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path.");
-      return GRN_NO_MEMORY_AVAILABLE;
+  if (!ctx || !array) { return GRN_INVALID_ARGUMENT; }
+  if (IO_ARRAYP(array)) {
+    const char * const io_path = grn_io_path(array->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;
   }
   value_size = array->value_size;
   flags = array->obj.header.flags;
 
   if (IO_ARRAYP(array)) {
-    if ((rc = grn_io_close(ctx, array->io))) { goto exit; }
-    array->io = NULL;
-    if (path && (rc = grn_io_remove(ctx, path))) { goto exit; }
-  } else {
-    rc = GRN_SUCCESS;
+    rc = grn_io_close(ctx, array->io);
+    if (!rc) {
+      array->io = NULL;
+      if (path) {
+        rc = grn_io_remove(ctx, path);
+      }
+    }
+  }
+  if (!rc) {
+    rc = grn_array_init(ctx, array, path, value_size, flags);
   }
-  if ((rc = grn_array_init(ctx, array, path, value_size, flags))) { goto exit; }
-exit:
   if (path) { GRN_FREE(path); }
   return rc;
 }




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