From fc4e248728f7d580644485f8b71fbeee5f1a694d Mon Sep 17 00:00:00 2001 From: bear <1248825327@qq.com> Date: Tue, 18 Jun 2024 18:15:17 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E5=92=8C=E5=85=A5=E5=8F=82=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E4=B8=8D=E4=B8=A5=E6=A0=BC=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tabs.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/tabs.c b/src/tabs.c index 3fd5b3f..1c03505 100644 --- a/src/tabs.c +++ b/src/tabs.c @@ -63,10 +63,31 @@ static int internal_add_node_by_args(int max[], node *head, int param_count, va_ int length = 0; const char *current_arg_ptr = NULL; + va_list temp_args; + va_copy(temp_args, args); + // 拿到第一个数据 - current_arg_ptr = va_arg(args, const char *); + current_arg_ptr = va_arg(temp_args, const char *); counter = 1; + while(counter <= param_count) { + if(current_arg_ptr == NULL) { + va_end(temp_args); + return COMMON_TABS_BAD_INPUT; + } + current_arg_ptr = va_arg(temp_args, const char *); + counter++; + } + va_end(temp_args); + + // 拿到第一个数据 + current_arg_ptr = va_arg(args, const char *); + counter =1; + + while(counter <= param_count) { + if(current_arg_ptr == NULL) { + return COMMON_TABS_BAD_INPUT; + } // 添加节点,尾插法 length = strlen(current_arg_ptr); node *node_ptr = (node *)malloc(sizeof(node)); @@ -267,6 +288,14 @@ int common_tabs_free(tab_handler ** handler) { 5. 根节点置为NULL ==================*/ + if(handler == NULL) { + return COMMON_TABS_BAD_INPUT; + } + + if(*handler == NULL) { + return COMMON_TABS_OK; + } + tab_data *free_ptr_data = NULL; tab_data *free_ptr_temp = NULL; @@ -325,6 +354,11 @@ int common_tabs_add_header(tab_handler *handler, int header_count, ...) { ret = internal_add_node_by_args(handler->column_max, &handler->handler_header, header_count, args); va_end(args); + if(ret != COMMON_TABS_OK) { + free(handler->column_max); + handler->column_max = NULL; + } + return ret; } @@ -391,6 +425,14 @@ int common_tabs_print_unicode_tabs(tab_handler *handler) { // step4 循环打印数据 // step5 打印最后一行 + if(handler == NULL) { + return COMMON_TABS_NEED_INIT; + } + + if((*handler).handler_header.next == NULL) { + return COMMON_TABS_HEADERS_ARE_REQUIRED; + } + // 设置本地化,以支持宽字符 setlocale(LC_ALL, ""); @@ -425,6 +467,14 @@ int common_tabs_print_ascii_tabs(tab_handler *handler) { // step4 循环打印数据 // step5 打印最后一行 + if(handler == NULL) { + return COMMON_TABS_NEED_INIT; + } + + if((*handler).handler_header.next == NULL) { + return COMMON_TABS_HEADERS_ARE_REQUIRED; + } + // step1 internal_print_special_line_ascii(handler); -- Gitee From dafc5e24f819764a573936ca95c4829fcbab5fa8 Mon Sep 17 00:00:00 2001 From: bear <1248825327@qq.com> Date: Tue, 18 Jun 2024 18:16:00 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0tabs=E7=9A=84=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/check_interface.c | 1 + test/check_interface.h | 1 + test/check_tabs.c | 72 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 test/check_tabs.c diff --git a/test/check_interface.c b/test/check_interface.c index 8b74de0..29d8dfb 100644 --- a/test/check_interface.c +++ b/test/check_interface.c @@ -9,6 +9,7 @@ int main() sr = srunner_create(check_base64()); srunner_add_suite(sr, check_byte()); srunner_add_suite(sr, check_big_number()); + srunner_add_suite(sr, check_tabs()); /* can debug with gdb */ srunner_set_fork_status(sr, CK_NOFORK); diff --git a/test/check_interface.h b/test/check_interface.h index 6af75b0..25a3d6c 100644 --- a/test/check_interface.h +++ b/test/check_interface.h @@ -8,5 +8,6 @@ Suite *check_base64(void); Suite *check_byte(void); Suite *check_big_number(void); +Suite *check_tabs(void); #endif \ No newline at end of file diff --git a/test/check_tabs.c b/test/check_tabs.c new file mode 100644 index 0000000..d77234a --- /dev/null +++ b/test/check_tabs.c @@ -0,0 +1,72 @@ +#include +#include + +#include "check.h" +#include "tabs.h" + +START_TEST(test_ok) { + tab_handler *handler = NULL; + ck_assert_int_eq(common_tabs_init(&handler), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_add_header(handler, 3, "header1", "header2", "header3"), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_add_data(handler, 3, "data1", "data2", "data3"), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_print_ascii_tabs(handler), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_free(&handler), COMMON_TABS_OK); + ck_assert_ptr_eq(handler, NULL); +} +END_TEST + +START_TEST(test_input) { + // 正常使用的句柄 + tab_handler *handler = NULL; + // 初始化但未添加表头的句柄 + tab_handler *handler2 = NULL; + + // 初始化检查 + ck_assert_int_eq(common_tabs_init(&handler), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_init(&handler2), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_init(NULL), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_init(&handler), COMMON_TABS_ALREADY_INITED); + + // 添加表头检查 + ck_assert_int_eq(common_tabs_add_header(handler, 3, "header1", "header2", NULL), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_add_header(handler, -1, "header1", "header2", "header3"), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_add_header(handler, 3, "header1", "header2", "header3"), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_add_header(handler, 3, "header1", "header2", "header3"), COMMON_TABS_ALREADY_INITED); + ck_assert_int_eq(common_tabs_add_header(NULL, 3, "header1", "header2", "header3"), COMMON_TABS_BAD_INPUT); + + // 添加数据检查 + ck_assert_int_eq(common_tabs_add_data(handler, 3, "data1", "data2", "data3"), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_add_data(handler, 4, "data1", "data2", "data3"), COMMON_TABS_HEADER_AND_DATA_MISMATCH); + ck_assert_int_eq(common_tabs_add_data(handler, 3, "data1", "data2", NULL), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_add_data(handler, 0, "data1", "data2", "data3"), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_add_data(NULL, 3, "data1", "data2", "data3"), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_add_data(handler2, 3, "data1", "data2", "data3"), COMMON_TABS_HEADERS_ARE_REQUIRED); + + ck_assert_int_eq(common_tabs_print_ascii_tabs(handler), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_print_ascii_tabs(NULL), COMMON_TABS_NEED_INIT); + ck_assert_int_eq(common_tabs_print_ascii_tabs(handler2), COMMON_TABS_HEADERS_ARE_REQUIRED); + + ck_assert_int_eq(common_tabs_free(&handler), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_free(NULL), COMMON_TABS_BAD_INPUT); + ck_assert_int_eq(common_tabs_free(&handler2), COMMON_TABS_OK); + ck_assert_int_eq(common_tabs_free(&handler), COMMON_TABS_OK); + + ck_assert_ptr_eq(handler, NULL); + ck_assert_ptr_eq(handler2, NULL); +} + +Suite *check_tabs(void) +{ + Suite *s; + TCase *tc_core; + + s = suite_create("tabs check"); + + tc_core = tcase_create("core"); + tcase_add_test(tc_core, test_ok); + tcase_add_test(tc_core, test_input); + + suite_add_tcase(s, tc_core); + + return s; +} \ No newline at end of file -- Gitee From ac910f905d17f5efef5bee8a69e5317e8a815f5c Mon Sep 17 00:00:00 2001 From: bear <1248825327@qq.com> Date: Tue, 18 Jun 2024 18:25:13 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dvalgrind=E7=9A=84?= =?UTF-8?q?=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tabs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tabs.c b/src/tabs.c index 1c03505..2587640 100644 --- a/src/tabs.c +++ b/src/tabs.c @@ -89,7 +89,7 @@ static int internal_add_node_by_args(int max[], node *head, int param_count, va_ return COMMON_TABS_BAD_INPUT; } // 添加节点,尾插法 - length = strlen(current_arg_ptr); + length = strlen(current_arg_ptr) + 1; node *node_ptr = (node *)malloc(sizeof(node)); node_ptr->value = (char *)malloc(sizeof(char) * length); strcpy(node_ptr->value, current_arg_ptr); -- Gitee