Fix some bugs in blob handling.
[paraslash.git] / blob.c
diff --git a/blob.c b/blob.c
index 559564506e399d39c9a43123745c5941a9ee75da..b396ef792c1ecc6bec8d03b5b88885ea1f7f0bac 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -138,9 +138,10 @@ static int com_lsblob(callback_function *f, int fd, int argc, char * const * con
                return -E_BLOB_SYNTAX;
        ret = send_option_arg_callback_request(&query, argc - i,
                argv + i, f, &ls_output);
-       if (ret >= 0 && ls_output.data)
+       if (ret > 0) {
                send_buffer(fd, (char *)ls_output.data);
-       free(ls_output.data);
+               free(ls_output.data);
+       }
        return ret;
 }
 
@@ -162,6 +163,7 @@ static int com_catblob_callback(struct osl_table *table,
        memcpy(output->data, obj.data, obj.size);
        return osl_close_disk_object(&obj);
 }
+
 static int com_catblob(callback_function *f, int fd, int argc,
                char * const * const argv)
 {
@@ -173,8 +175,8 @@ static int com_catblob(callback_function *f, int fd, int argc,
        if (!*argv[1]) /* empty name is reserved of the dummy row */
                return -E_BLOB_SYNTAX;
        ret = send_standard_callback_request(1, argv + 1, f, &cat_output);
-       if (ret >= 0 && cat_output.data)
-               ret = send_buffer(fd, (char *)cat_output.data);
+       if (ret > 0)
+               ret = send_bin_buffer(fd, (char *)cat_output.data, cat_output.size);
        free(cat_output.data);
        return ret;
 
@@ -231,7 +233,7 @@ static int com_addblob_callback(struct osl_table *table,
        return osl_add_row(table, objs);
 }
 
-static int com_addblob(callback_function *f, __a_unused int fd, int argc,
+static int com_addblob(callback_function *f, int fd, int argc,
                char * const * const argv)
 {
        struct osl_object arg_obj;
@@ -243,7 +245,7 @@ static int com_addblob(callback_function *f, __a_unused int fd, int argc,
        PARA_NOTICE_LOG("argv[1]: %s\n", argv[1]);
        arg_obj.size = strlen(argv[1]) + 1;
        arg_obj.data = (char *)argv[1];
-       return stdin_command(&arg_obj, f, 10 * 1024 * 1024, NULL);
+       return stdin_command(fd, &arg_obj, f, 10 * 1024 * 1024, NULL);
 }
 
 static int com_rmblob_callback(struct osl_table *table,