]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - blob.c
com_catblob(): Return negative on errors
[paraslash.git] / blob.c
diff --git a/blob.c b/blob.c
index 47253b5e08811c7fbb4a2c2aa12e6f368307454c..5e9fe75553e5a331eeb1d7630e50516c8cfe05fb 100644 (file)
--- 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); \
        } \