X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=blob.c;h=6e48c487eb6b975ebf740561146374af122d1479;hb=134e02f7e90d37a3056198d8ba374e0271415d15;hp=5eb125c8262f6b34aaff506f9c6cb1310fa5916d;hpb=050003ccbd8b314038352f55d9fae53245670e78;p=paraslash.git diff --git a/blob.c b/blob.c index 5eb125c8..6e48c487 100644 --- a/blob.c +++ b/blob.c @@ -122,7 +122,7 @@ static int print_blob(struct osl_table *table, struct osl_row *row, } ret = osl(osl_get_object(table, row, BLOBCOL_ID, &obj)); if (ret < 0) { - para_printf(&lbad->pb, "%s: %s\n", name, para_strerror(-ret)); + para_printf(&lbad->pb, "cannot list %s\n", name); return ret; } id = *(uint32_t *)obj.data; @@ -163,11 +163,12 @@ static int com_lsblob_callback(struct osl_table *table, pmd.loop_col_num = BLOBCOL_ID; ret = for_each_matching_row(&pmd); if (ret < 0) - para_printf(&lbad.pb, "%s\n", para_strerror(-ret)); - else if (pmd.num_matches == 0 && pmd.patterns.size > 0) - para_printf(&lbad.pb, "no matches\n"); + goto out; + if (pmd.num_matches == 0 && pmd.patterns.size > 0) + ret = -E_NO_MATCH; +out: flush_and_free_pb(&lbad.pb); - return 0; + return ret; } static int com_lsblob(callback_function *f, struct command_context *cc) @@ -222,6 +223,7 @@ static int cat_blob(struct osl_table *table, struct osl_row *row, static int com_catblob_callback(struct osl_table *table, int fd, const struct osl_object *query) { + int ret; struct pattern_match_data pmd = { .table = table, .patterns = *query, @@ -231,12 +233,12 @@ static int com_catblob_callback(struct osl_table *table, int fd, .data = &fd, .action = cat_blob }; - for_each_matching_row(&pmd); - if (pmd.num_matches == 0) { - char err_msg[] = "no matches\n"; - pass_buffer_as_shm(fd, SBD_OUTPUT, err_msg, sizeof(err_msg)); - } - return 0; + ret = for_each_matching_row(&pmd); + if (ret < 0) + return ret; + if (pmd.num_matches == 0) + ret = -E_NO_MATCH; + return ret; } static int com_catblob(callback_function *f, struct command_context *cc) @@ -247,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; @@ -269,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, @@ -285,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) @@ -379,13 +374,12 @@ static int com_addblob_callback(struct osl_table *table, int fd, afs_event(BLOB_ADD, NULL, table); out: if (ret < 0) - msg_len = xasprintf(&msg, "could not add %s: %s\n", name, - para_strerror(-ret)); + msg_len = xasprintf(&msg, "cannot add %s\n", name); else msg_len = xasprintf(&msg, "added %s as id %u\n", name, id); pass_buffer_as_shm(fd, SBD_OUTPUT, msg, msg_len); free(msg); - return 0; + return ret; } /* Write input from fd to dynamically allocated buffer, but maximal 10M. */