com_lsblob: Print an error message if no blob matched.
[paraslash.git] / blob.c
diff --git a/blob.c b/blob.c
index 707c6c6254b88a359a5297c469a1f3105528e5bc..2545aea9af2d9dbb5d34b4a41a6d3363c35c3385 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -156,6 +156,8 @@ static void com_lsblob_callback(struct osl_table *table,
        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");
        if (lbad.pb.offset)
                pass_buffer_as_shm(lbad.pb.buf, lbad.pb.offset, &fd);
        free(lbad.pb.buf);
@@ -203,9 +205,9 @@ static int cat_blob(struct osl_table *table, struct osl_row *row,
 
        ret = osl(osl_open_disk_object(table, row, BLOBCOL_DEF, &obj));
        if (ret < 0)
-               return ret;
-       if (obj.size)
-               ret = pass_buffer_as_shm(obj.data, obj.size, data);
+               return (ret == osl(-E_OSL_EMPTY))? 0 : ret;
+       assert(obj.size > 0);
+       ret = pass_buffer_as_shm(obj.data, obj.size, data);
        ret2 = osl(osl_close_disk_object(&obj));
        return (ret < 0)? ret : ret2;
 }
@@ -223,6 +225,10 @@ static void com_catblob_callback(struct osl_table *table, int fd,
                .action = cat_blob
        };
        for_each_matching_row(&pmd);
+       if (pmd.num_matches == 0) {
+               char err_msg[] = "no matches\n";
+               pass_buffer_as_shm(err_msg, sizeof(err_msg), &fd);
+       }
 }
 
 static int com_catblob(callback_function *f, struct stream_cipher_context *scc, int argc,
@@ -238,8 +244,6 @@ static int com_catblob(callback_function *f, struct stream_cipher_context *scc,
 struct rmblob_data {
        /** Message buffer. */
        struct para_buffer pb;
-       /** Number of removed blobs. */
-       unsigned num_removed;
 };
 
 static int remove_blob(struct osl_table *table, struct osl_row *row,
@@ -251,7 +255,6 @@ static int remove_blob(struct osl_table *table, struct osl_row *row,
                para_printf(&rmbd->pb, "%s: %s\n", name, para_strerror(-ret));
                return ret;
        }
-       rmbd->num_removed++;
        return 1;
 }
 
@@ -260,7 +263,6 @@ static void com_rmblob_callback(struct osl_table *table, int fd,
 {
        int ret, ret2 = 0;
        struct rmblob_data rmbd = {
-               .num_removed = 0,
                .pb = {
                        .max_size = shm_get_shmmax(),
                        .private_data = &fd,
@@ -282,10 +284,10 @@ static void com_rmblob_callback(struct osl_table *table, int fd,
                if (ret2 < 0)
                        goto out;
        }
-       if (!rmbd.num_removed)
+       if (pmd.num_matches == 0)
                ret2 = para_printf(&rmbd.pb, "no matches, nothing removed\n");
        else {
-               ret2 = para_printf(&rmbd.pb, "removed %d blobs\n", rmbd.num_removed);
+               ret2 = para_printf(&rmbd.pb, "removed %d blobs\n", pmd.num_matches);
                afs_event(BLOB_RENAME, NULL, table);
        }
 out: