refactor: remove unnecessary allocation in read operation

pull/87/head
Falk Werner 4 years ago
parent 3496c605d2
commit c114a2c3be

@ -14,32 +14,28 @@
// do not read chunks larger than 1 MByte
#define WF_MAX_READ_LENGTH (1024 * 1024)
char * wf_impl_fill_buffer(
char const * data,
char * wf_impl_operation_read_transform(
char * data,
size_t data_size,
char const * format,
size_t count,
wf_status * status)
{
*status = WF_GOOD;
char * buffer = malloc(count);
char * buffer = data;
if (0 < count)
{
if (0 == strcmp("identity", format))
{
if (count == data_size)
{
memcpy(buffer, data, count);
}
else
if (count != data_size)
{
*status = WF_BAD;
}
}
else if (0 == strcmp("base64", format))
{
size_t result = wf_impl_base64_decode(data, data_size, (uint8_t *) buffer, count);
size_t result = wf_impl_base64_decode(data, data_size, (uint8_t *) data, count);
if (result != count)
{
*status = WF_BAD;
@ -51,12 +47,6 @@ char * wf_impl_fill_buffer(
}
}
if (WF_GOOD != *status)
{
free(buffer);
buffer = NULL;
}
return buffer;
}
@ -80,12 +70,12 @@ void wf_impl_operation_read_finished(
(wf_impl_json_is_string(format_holder)) &&
(wf_impl_json_is_int(count_holder)))
{
char const * const data = wf_impl_json_string_get(data_holder);
char * const data = (char*) wf_impl_json_string_get(data_holder);
size_t const data_size = wf_impl_json_string_size(data_holder);
char const * const format = wf_impl_json_string_get(format_holder);
length = (size_t) wf_impl_json_int_get(count_holder);
buffer = wf_impl_fill_buffer(data, data_size, format, length, &status);
buffer = wf_impl_operation_read_transform(data, data_size, format, length, &status);
}
else
{
@ -101,9 +91,6 @@ void wf_impl_operation_read_finished(
{
fuse_reply_err(request, ENOENT);
}
free(buffer);
}
void wf_impl_operation_read(

@ -17,8 +17,8 @@ extern void wf_impl_operation_read(
fuse_ino_t ino, size_t size, off_t off,
struct fuse_file_info *fi);
extern char * wf_impl_fill_buffer(
char const * data,
extern char * wf_impl_operation_read_transform(
char * data,
size_t data_size,
char const * format,
size_t count,

@ -84,53 +84,52 @@ TEST(wf_impl_operation_read, fail_rpc_null)
TEST(wf_impl_operation_read, fill_buffer_identity)
{
wf_status status;
char * buffer = wf_impl_fill_buffer("brummni", 8, "identity", 8, &status);
char text[] = "brummni";
char * buffer = wf_impl_operation_read_transform(text, 8, "identity", 8, &status);
ASSERT_EQ(WF_GOOD, status);
ASSERT_STREQ("brummni", buffer);
free(buffer);
}
TEST(wf_impl_operation_read, fill_buffer_identity_fail_inconsistent_size)
{
wf_status status;
char * buffer = wf_impl_fill_buffer("brummni", 8, "identity", 7, &status);
char text[] = "brummni";
wf_impl_operation_read_transform(text, 8, "identity", 7, &status);
ASSERT_NE(WF_GOOD, status);
ASSERT_EQ(nullptr, buffer);
}
TEST(wf_impl_operation_read, fill_buffer_base64)
{
wf_status status;
char * buffer = wf_impl_fill_buffer("YnJ1bW1uaQ==", 12, "base64", 7, &status);
char text[] = "YnJ1bW1uaQ==";
char * buffer = wf_impl_operation_read_transform(text, 12, "base64", 7, &status);
ASSERT_EQ(WF_GOOD, status);
ASSERT_EQ(0, strncmp("brummni", buffer, 7));
free(buffer);
}
TEST(wf_impl_operation_read, fill_buffer_base64_fail_invalid_data)
{
wf_status status;
char * buffer = wf_impl_fill_buffer("YnJ1bW1uaQ=A", 12, "base64", 8, &status);
char text[] = "YnJ1bW1uaQ=A";
wf_impl_operation_read_transform(text, 12, "base64", 8, &status);
ASSERT_NE(WF_GOOD, status);
ASSERT_EQ(nullptr, buffer);
}
TEST(wf_impl_operation_read, fill_buffer_empty)
{
wf_status status;
char * buffer = wf_impl_fill_buffer(nullptr, 0, "identity", 0, &status);
wf_impl_operation_read_transform(nullptr, 0, "identity", 0, &status);
ASSERT_EQ(WF_GOOD, status);
free(buffer);
}
TEST(wf_impl_operation_read, fill_buffer_fail_invalid_format)
{
wf_status status;
char * buffer = wf_impl_fill_buffer("some data", 9, "unknown", 9, &status);
char text[] = "some data";
wf_impl_operation_read_transform(text, 9, "unknown", 9, &status);
ASSERT_NE(WF_GOOD, status);
ASSERT_EQ(nullptr, buffer);
}
TEST(wf_impl_operation_read, finished)

Loading…
Cancel
Save