]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - blob.c
afs: Introduce flush_and_free_pb().
[paraslash.git] / blob.c
diff --git a/blob.c b/blob.c
index 3073bf0098f8d5f4a9334453ad86f638caff8085..47253b5e08811c7fbb4a2c2aa12e6f368307454c 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -116,15 +116,18 @@ static int print_blob(struct osl_table *table, struct osl_row *row,
        uint32_t id;
        int ret;
 
-       if (!(lbad->flags & BLOB_LS_FLAG_LONG))
-               return para_printf(&lbad->pb, "%s\n", name);
+       if (!(lbad->flags & BLOB_LS_FLAG_LONG)) {
+               para_printf(&lbad->pb, "%s\n", name);
+               return 0;
+       }
        ret = osl(osl_get_object(table, row, BLOBCOL_ID, &obj));
        if (ret < 0) {
                para_printf(&lbad->pb, "%s: %s\n", name, para_strerror(-ret));
                return ret;
        }
        id = *(uint32_t *)obj.data;
-       return para_printf(&lbad->pb, "%u\t%s\n", id, name);
+       para_printf(&lbad->pb, "%u\t%s\n", id, name);
+       return 1;
 }
 
 static void com_lsblob_callback(struct osl_table *table,
@@ -163,9 +166,7 @@ static void com_lsblob_callback(struct osl_table *table,
                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(fd, SBD_OUTPUT, lbad.pb.buf, lbad.pb.offset);
-       free(lbad.pb.buf);
+       flush_and_free_pb(&lbad.pb);
 }
 
 static int com_lsblob(callback_function *f, struct command_context *cc)
@@ -265,7 +266,7 @@ static int remove_blob(struct osl_table *table, struct osl_row *row,
 static void com_rmblob_callback(struct osl_table *table, int fd,
                const struct osl_object *query)
 {
-       int ret, ret2 = 0;
+       int ret;
        struct rmblob_data rmbd = {
                .pb = {
                        .max_size = shm_get_shmmax(),
@@ -286,21 +287,15 @@ static void com_rmblob_callback(struct osl_table *table, int fd,
                .action = remove_blob
        };
        ret = for_each_matching_row(&pmd);
-       if (ret < 0) {
-               ret2 = para_printf(&rmbd.pb, "%s\n", para_strerror(-ret));
-               if (ret2 < 0)
-                       goto out;
-       }
+       if (ret < 0)
+               para_printf(&rmbd.pb, "%s\n", para_strerror(-ret));
        if (pmd.num_matches == 0)
-               ret2 = para_printf(&rmbd.pb, "no matches, nothing removed\n");
+               para_printf(&rmbd.pb, "no matches, nothing removed\n");
        else {
-               ret2 = para_printf(&rmbd.pb, "removed %d blobs\n", pmd.num_matches);
+               para_printf(&rmbd.pb, "removed %d blobs\n", pmd.num_matches);
                afs_event(BLOB_RENAME, NULL, table);
        }
-out:
-       if (ret2 >= 0 && rmbd.pb.offset)
-               pass_buffer_as_shm(fd, SBD_OUTPUT, rmbd.pb.buf, rmbd.pb.offset);
-       free(rmbd.pb.buf);
+       flush_and_free_pb(&rmbd.pb);
 }
 
 static int com_rmblob(callback_function *f, struct command_context *cc)
@@ -500,9 +495,7 @@ static void com_mvblob_callback(struct osl_table *table, int fd,
        }
        afs_event(BLOB_RENAME, NULL, table);
 out:
-       if (pb.offset)
-               pass_buffer_as_shm(fd, SBD_OUTPUT, pb.buf, pb.offset);
-       free(pb.buf);
+       flush_and_free_pb(&pb);
 }
 
 static int com_mvblob(callback_function *f, struct command_context *cc)