X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=blob.c;h=5e9fe75553e5a331eeb1d7630e50516c8cfe05fb;hb=76b2c831235944aa6d08da4f7001bf9214075a4f;hp=47253b5e08811c7fbb4a2c2aa12e6f368307454c;hpb=79bfc7a2a6577000c405be6344ba91ec3f8745e9;p=paraslash.git diff --git a/blob.c b/blob.c index 47253b5e..5e9fe755 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; @@ -130,7 +130,7 @@ static int print_blob(struct osl_table *table, struct osl_row *row, return 1; } -static void com_lsblob_callback(struct osl_table *table, +static int com_lsblob_callback(struct osl_table *table, int fd, const struct osl_object *query) { struct lsblob_action_data lbad = { @@ -163,10 +163,12 @@ static void 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 ret; } static int com_lsblob(callback_function *f, struct command_context *cc) @@ -218,9 +220,10 @@ static int cat_blob(struct osl_table *table, struct osl_row *row, return (ret < 0)? ret : ret2; } -static void com_catblob_callback(struct osl_table *table, int fd, +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, @@ -230,11 +233,12 @@ static void 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)); - } + 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) @@ -263,7 +267,7 @@ static int remove_blob(struct osl_table *table, struct osl_row *row, return 1; } -static void com_rmblob_callback(struct osl_table *table, int fd, +static int com_rmblob_callback(struct osl_table *table, int fd, const struct osl_object *query) { int ret; @@ -296,6 +300,7 @@ static void com_rmblob_callback(struct osl_table *table, int fd, afs_event(BLOB_RENAME, NULL, table); } flush_and_free_pb(&rmbd.pb); + return 0; } static int com_rmblob(callback_function *f, struct command_context *cc) @@ -306,7 +311,7 @@ static int com_rmblob(callback_function *f, struct command_context *cc) afs_cb_result_handler, cc); } -static void com_addblob_callback(struct osl_table *table, int fd, +static int com_addblob_callback(struct osl_table *table, int fd, const struct osl_object *query) { struct osl_object objs[NUM_BLOB_COLUMNS]; @@ -382,6 +387,7 @@ out: 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; } /* Write input from fd to dynamically allocated buffer, but maximal 10M. */ @@ -466,7 +472,7 @@ static int com_addblob(callback_function *f, struct command_context *cc) return stdin_command(cc, &arg_obj, f); } -static void com_mvblob_callback(struct osl_table *table, int fd, +static int com_mvblob_callback(struct osl_table *table, int fd, const struct osl_object *query) { char *src = (char *) query->data; @@ -496,6 +502,7 @@ static void com_mvblob_callback(struct osl_table *table, int fd, afs_event(BLOB_RENAME, NULL, table); out: flush_and_free_pb(&pb); + return 0; } static int com_mvblob(callback_function *f, struct command_context *cc) @@ -512,7 +519,7 @@ static int com_mvblob(callback_function *f, struct command_context *cc) } #define DEFINE_BLOB_COMMAND(cmd_name, table_name, cmd_prefix) \ - static void com_ ## cmd_name ## cmd_prefix ## _callback(int fd, const struct osl_object *query) \ + static int com_ ## cmd_name ## cmd_prefix ## _callback(int fd, const struct osl_object *query) \ { \ return com_ ## cmd_name ## blob_callback(table_name ## _table, fd, query); \ } \