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;
}