}
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;
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 = {
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)
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,
.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)
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;
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)
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];
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. */
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;
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)
}
#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); \
} \