add str_append_more

This commit is contained in:
xianjimli 2020-05-03 08:09:32 +08:00
parent 5fe6ff49b0
commit a4062c0b6a
4 changed files with 69 additions and 3 deletions

View File

@ -1,9 +1,10 @@
# 最新动态 # 最新动态
* 2020/05/03 * 2020/05/03
* 在 EVT_BLUR 的事件回调中 widget_destroy_children当前控件的父控件等, 会导致 widget_dispatch_blur_event() 访问野指针(感谢朝泽提供补丁)。 * 增加函数str\_append\_more。
* 控件事件的回调被调用时,如果当前控件的 ref_count == 2且回调中同时执行了 widget_destroy_children当前控件的父控件等、widget_destroy自身会导致 widget_unref_in_idle() 访问野指针(感谢朝泽提供补丁)。 * 在 EVT_BLUR 的事件回调中 widget_destroy_children当前控件的父控件等, 会导致 widget_dispatch_blur_event() 访问野指针(感谢朝泽提供补丁)。
* 如果在窗口某控件的 EVT_BLUR 事件回调中调用 widget_set_need_relayout_children(),当焦点在该控件时关闭程序,会导致当前窗口的 destroy 在 widget_destroy_sync(window_manager()) 之后执行,引起 wm_on_destroy_child() 访问野指针(感谢朝泽提供补丁)。 * 控件事件的回调被调用时,如果当前控件的 ref_count == 2且回调中同时执行了 widget_destroy_children当前控件的父控件等、widget_destroy自身会导致 widget_unref_in_idle() 访问野指针(感谢朝泽提供补丁)。
* 如果在窗口某控件的 EVT_BLUR 事件回调中调用 widget_set_need_relayout_children(),当焦点在该控件时关闭程序,会导致当前窗口的 destroy 在 widget_destroy_sync(window_manager()) 之后执行,引起 wm_on_destroy_child() 访问野指针(感谢朝泽提供补丁)。
* 2020/05/02 * 2020/05/02
* 完善控件动画(感谢朝泽提供补丁)。 * 完善控件动画(感谢朝泽提供补丁)。

View File

@ -102,6 +102,28 @@ ret_t str_append(str_t* str, const char* text) {
return str_append_with_len(str, text, strlen(text)); return str_append_with_len(str, text, strlen(text));
} }
ret_t str_append_more(str_t* str, const char* text, ...) {
va_list va;
const char* p = NULL;
return_value_if_fail(str != NULL && text != NULL, RET_BAD_PARAMS);
return_value_if_fail(str_append(str, text) == RET_OK, RET_OOM);
va_start(va, text);
do {
p = va_arg(va, char*);
if (p != NULL) {
return_value_if_fail(str_append(str, p) == RET_OK, RET_OOM);
} else {
break;
}
} while (p != NULL);
va_end(va);
return RET_OK;
}
ret_t str_append_int(str_t* str, int32_t value) { ret_t str_append_int(str_t* str, int32_t value) {
char num[32]; char num[32];
tk_snprintf(num, sizeof(num), "%d", value); tk_snprintf(num, sizeof(num), "%d", value);

View File

@ -39,6 +39,7 @@ BEGIN_C_DECLS
* *
* str_append(&s, "abc"); * str_append(&s, "abc");
* str_append(&s, "123"); * str_append(&s, "123");
* log_debug("%s\n", s.str);
* *
* str_reset(&s); * str_reset(&s);
* ``` * ```
@ -139,6 +140,28 @@ ret_t str_set_with_len(str_t* str, const char* text, uint32_t len);
*/ */
ret_t str_append(str_t* str, const char* text); ret_t str_append(str_t* str, const char* text);
/**
* @method str_append_more
* NULL结束
*
*
*
* ```c
* str_t s;
* str_init(&s, 0);
*
* str_append_more(&s, "abc", "123", NULL);
* log_debug("%s\n", s.str);
*
* str_reset(&s);
* ```
* @param {str_t*} str str对象
* @param {char*} text
*
* @return {ret_t} RET_OK表示成功
*/
ret_t str_append_more(str_t* str, const char* text, ...);
/** /**
* @method str_append_with_len * @method str_append_with_len
* *

View File

@ -298,3 +298,23 @@ TEST(Str, json) {
str_reset(s); str_reset(s);
} }
TEST(Str, append_more1) {
str_t str;
str_t* s = NULL;
s = str_init(&str, 100);
ASSERT_EQ(str_append_more(s, "123", NULL), RET_OK);
ASSERT_STREQ(s->str, "123");
str_reset(s);
}
TEST(Str, append_more2) {
str_t str;
str_t* s = NULL;
s = str_init(&str, 100);
ASSERT_EQ(str_append_more(s, "123", "abc", NULL), RET_OK);
ASSERT_STREQ(s->str, "123abc");
str_reset(s);
}