grn_rc grn_ja_truncate(grn_ctx *ctx, grn_ja *ja) { grn_rc rc; char *path; unsigned int max_element_size; uint32_t flags; if ((path = (char *)grn_io_path(ja->io)) && *path != '\0') { if (!(path = GRN_STRDUP(path))) { ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path."); return GRN_NO_MEMORY_AVAILABLE; } } else { path = NULL; } max_element_size = ja->header->max_element_size; flags = ja->header->flags; if ((rc = grn_io_close(ctx, ja->io))) { goto exit; } ja->io = NULL; if (path && (rc = grn_io_remove(ctx, path))) { goto exit; } if (!_grn_ja_create(ctx, ja, path, max_element_size, flags)) { rc = GRN_UNKNOWN_ERROR; } exit: if (path) { GRN_FREE(path); } return rc; }
grn_rc grn_ra_truncate(grn_ctx *ctx, grn_ra *ra) { grn_rc rc; char *path; unsigned int element_size; if ((path = (char *)grn_io_path(ra->io)) && *path != '\0') { if (!(path = GRN_STRDUP(path))) { ERR(GRN_NO_MEMORY_AVAILABLE, "cannot duplicate path."); return GRN_NO_MEMORY_AVAILABLE; } } else { path = NULL; } element_size = ra->header->element_size; if ((rc = grn_io_close(ctx, ra->io))) { goto exit; } ra->io = NULL; if (path && (rc = grn_io_remove(ctx, path))) { goto exit; } if (!_grn_ra_create(ctx, ra, path, element_size)) { rc = GRN_UNKNOWN_ERROR; } exit: if (path) { GRN_FREE(path); } return rc; }
grn_rc grn_dat_remove(grn_ctx *ctx, const char *path) { if (!path) { ERR(GRN_INVALID_ARGUMENT, "path is null"); return GRN_INVALID_ARGUMENT; } grn_dat * const dat = grn_dat_open(ctx, path); if (!dat) { return ctx->rc; } const uint32_t file_id = dat->header->file_id; grn_dat_close(ctx, dat); /* grn_dat_remove() tries to remove (file_id + 1)th trie file because grn::dat::Trie::create() might leave an incomplete file on failure. */ char trie_path[PATH_MAX]; grn_dat_generate_trie_path(path, trie_path, file_id + 1); grn_dat_remove_file(ctx, trie_path); for (uint32_t i = file_id; i > 0; --i) { grn_dat_generate_trie_path(path, trie_path, i); if (!grn_dat_remove_file(ctx, trie_path)) { break; } } /* grn_io_remove() reports an error when it fails to remove `path'. */ return grn_io_remove(ctx, path); }
grn_rc grn_ja_remove(grn_ctx *ctx, const char *path) { if (!path) { return GRN_INVALID_ARGUMENT; } return grn_io_remove(ctx, path); }