mirror of
https://github.com/falk-werner/webfuse
synced 2024-10-27 20:34:10 +00:00
refactor: remove unnecessary allocation in read operation
This commit is contained in:
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…
Reference in New Issue
Block a user