From bb94ae9d3364ac5e868bc0f979854ccea222963c Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 5 Apr 2015 14:50:32 +0000 Subject: [PATCH] com_rmblob(): Return negative on errors, cleanup --- blob.c | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/blob.c b/blob.c index 5e9fe755..ea746072 100644 --- a/blob.c +++ b/blob.c @@ -249,19 +249,13 @@ static int com_catblob(callback_function *f, struct command_context *cc) afs_cb_result_handler, cc); } -/** Used for removing rows from a blob table. */ -struct rmblob_data { - /** Message buffer. */ - struct para_buffer pb; -}; - static int remove_blob(struct osl_table *table, struct osl_row *row, const char *name, void *data) { - struct rmblob_data *rmbd = data; + struct para_buffer *pb = data; int ret = osl(osl_del_row(table, row)); if (ret < 0) { - para_printf(&rmbd->pb, "%s: %s\n", name, para_strerror(-ret)); + para_printf(pb, "cannot remove %s\n", name); return ret; } return 1; @@ -271,15 +265,13 @@ static int com_rmblob_callback(struct osl_table *table, int fd, const struct osl_object *query) { int ret; - struct rmblob_data rmbd = { - .pb = { - .max_size = shm_get_shmmax(), - .private_data = &(struct afs_max_size_handler_data) { - .fd = fd, - .band = SBD_OUTPUT - }, - .max_size_handler = afs_max_size_handler, - } + struct para_buffer pb = { + .max_size = shm_get_shmmax(), + .private_data = &(struct afs_max_size_handler_data) { + .fd = fd, + .band = SBD_OUTPUT + }, + .max_size_handler = afs_max_size_handler, }; struct pattern_match_data pmd = { .table = table, @@ -287,20 +279,21 @@ static int com_rmblob_callback(struct osl_table *table, int fd, .loop_col_num = BLOBCOL_NAME, .match_col_num = BLOBCOL_NAME, .pm_flags = PM_SKIP_EMPTY_NAME, - .data = &rmbd, + .data = &pb, .action = remove_blob }; ret = for_each_matching_row(&pmd); if (ret < 0) - para_printf(&rmbd.pb, "%s\n", para_strerror(-ret)); + goto out; if (pmd.num_matches == 0) - para_printf(&rmbd.pb, "no matches, nothing removed\n"); + ret = -E_NO_MATCH; else { - para_printf(&rmbd.pb, "removed %d blobs\n", pmd.num_matches); + para_printf(&pb, "removed %d blob(s)\n", pmd.num_matches); afs_event(BLOB_RENAME, NULL, table); } - flush_and_free_pb(&rmbd.pb); - return 0; +out: + flush_and_free_pb(&pb); + return ret; } static int com_rmblob(callback_function *f, struct command_context *cc) -- 2.39.5