From 43e3b0c4bc063927bc32d55b4c2103b79dcc09a2 Mon Sep 17 00:00:00 2001 From: John Sanpe Date: Fri, 2 May 2025 02:23:30 +0800 Subject: [PATCH 1/3] feat buff: added initial functions Signed-off-by: John Sanpe --- include/bfdev/buff.h | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 include/bfdev/buff.h diff --git a/include/bfdev/buff.h b/include/bfdev/buff.h new file mode 100644 index 00000000..31ce3cdb --- /dev/null +++ b/include/bfdev/buff.h @@ -0,0 +1,61 @@ +/* SPDX-License-Identifier: LGPL-3.0-or-later */ +/* + * Copyright(c) 2024 John Sanpe + */ + +#ifndef _BFDEV_BUFF_H_ +#define _BFDEV_BUFF_H_ + +#include +#include +#include + +BFDEV_BEGIN_DECLS + +typedef struct bfdev_buff bfdev_buff_t; + +struct bfdev_buff { + bfdev_size_t len; + void *data; +}; + +#define BFDEV_BUFF_STATIC(LEN, DATA) { \ + .len = (LEN), .data = (void *)(DATA), \ +} + +#define BFDEV_BUFF_INIT(len, data) \ + (bfdev_buff_t) BFDEV_BUFF_STATIC(len, data) + +#define BFDEV_DEFINE_BUFF(name, len, data) \ + bfdev_buff_t name = BFDEV_BUFF_INIT(len, data) + +#define BFDEV_DEFINE_STRING(name, str) \ + BFDEV_DEFINE_BUFF(name, sizeof(str) - 1, str) + +static inline void +bfdev_buff_init(bfdev_buff_t *buff, bfdev_size_t len, void *data) +{ + *buff = BFDEV_BUFF_INIT(len, data); +} + +static inline void +bfdev_string_init(bfdev_buff_t *buff, const char *str) +{ + *buff = BFDEV_BUFF_INIT(bfdev_strlen(str), str); +} + +static inline void * +bfdev_buff_data(bfdev_buff_t *buff) +{ + return buff->data; +} + +static inline bfdev_size_t +bfdev_buff_len(bfdev_buff_t *buff) +{ + return buff->len; +} + +BFDEV_END_DECLS + +#endif /* _BFDEV_BUFF_H_ */ From 99fc7a458fc2644cd7acdc2f335726d21ba264b3 Mon Sep 17 00:00:00 2001 From: John Sanpe Date: Fri, 2 May 2025 02:23:49 +0800 Subject: [PATCH 2/3] feat buff: added string example Signed-off-by: John Sanpe --- examples/CMakeLists.txt | 1 + examples/buff/.gitignore | 2 ++ examples/buff/CMakeLists.txt | 22 ++++++++++++++++++++++ examples/buff/string.c | 18 ++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 examples/buff/.gitignore create mode 100644 examples/buff/CMakeLists.txt create mode 100644 examples/buff/string.c diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 55e704b5..963e40a9 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,6 +13,7 @@ add_subdirectory(base64) add_subdirectory(bfdev) add_subdirectory(bloom) add_subdirectory(btree) +add_subdirectory(buff) add_subdirectory(cache) add_subdirectory(circle) add_subdirectory(crc) diff --git a/examples/buff/.gitignore b/examples/buff/.gitignore new file mode 100644 index 00000000..fcafc18f --- /dev/null +++ b/examples/buff/.gitignore @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +/buff-string diff --git a/examples/buff/CMakeLists.txt b/examples/buff/CMakeLists.txt new file mode 100644 index 00000000..0d2eeeac --- /dev/null +++ b/examples/buff/CMakeLists.txt @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright(c) 2025 ffashion +# + +add_executable(buff-string string.c) +target_link_libraries(buff-string bfdev) +add_test(buff-string buff-string) + +if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev") + install(FILES + string.c + DESTINATION + ${CMAKE_INSTALL_DOCDIR}/examples/buff + ) + + install(TARGETS + buff-string + DESTINATION + ${CMAKE_INSTALL_DOCDIR}/bin + ) +endif() diff --git a/examples/buff/string.c b/examples/buff/string.c new file mode 100644 index 00000000..64bf7eaa --- /dev/null +++ b/examples/buff/string.c @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright(c) 2025 John Sanpe + */ + +#define MODULE_NAME "string-simple" +#define bfdev_log_fmt(fmt) MODULE_NAME ": " fmt + +#include +#include + +int +main(int argc, const char *argv[]) +{ + BFDEV_DEFINE_STRING(test, "Hello World!\n"); + fwrite(test.data, test.len, 1, stdout); + return 0; +} From 68a3eb5da7e7910c54da76cd95b8b3c5a6e0f5bc Mon Sep 17 00:00:00 2001 From: John Sanpe Date: Fri, 2 May 2025 02:26:17 +0800 Subject: [PATCH 3/3] feat array: added append buff api Signed-off-by: John Sanpe --- include/bfdev/template/array.h | 11 +++++++++++ template/array.c | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/bfdev/template/array.h b/include/bfdev/template/array.h index 96e5537c..7571e3a1 100644 --- a/include/bfdev/template/array.h +++ b/include/bfdev/template/array.h @@ -8,6 +8,7 @@ #include #include +#include BFDEV_BEGIN_DECLS @@ -32,6 +33,16 @@ bfdev_array_append(bfdev_array_t *array, const void *data, unsigned long num); extern int bfdev_array_append_array(bfdev_array_t *array, const bfdev_array_t *append); +/** + * bfdev_array_append_buff() - append buff into the array. + * @array: the array object. + * @append: the buff to append. + * + * Return 0 on success or a negative error code on failure. + */ +extern int +bfdev_array_append_buff(bfdev_array_t *array, bfdev_buff_t *append); + /** * bfdev_array_append_cstr() - append cstr into the array. * @array: the array object. diff --git a/template/array.c b/template/array.c index 742fc0b0..8ec13d5a 100644 --- a/template/array.c +++ b/template/array.c @@ -39,6 +39,21 @@ bfdev_array_append_array(bfdev_array_t *array, const bfdev_array_t *append) return -BFDEV_ENOERR; } +export int +bfdev_array_append_buff(bfdev_array_t *array, bfdev_buff_t *append) +{ + int retval; + + if (array->cells != BFDEV_BYTES_PER_U8) + return -BFDEV_EPROTO; + + retval = bfdev_array_append(array, append->data, append->len); + if (bfdev_unlikely(retval)) + return retval; + + return -BFDEV_ENOERR; +} + export int bfdev_array_append_cstr(bfdev_array_t *array, const char *append) {