mirror of
https://gitee.com/zlgopen/awtk.git
synced 2024-11-30 02:58:26 +08:00
add str_append_more
This commit is contained in:
parent
5fe6ff49b0
commit
a4062c0b6a
@ -1,9 +1,10 @@
|
||||
# 最新动态
|
||||
|
||||
* 2020/05/03
|
||||
* 在 EVT_BLUR 的事件回调中 widget_destroy_children(当前控件的父控件等), 会导致 widget_dispatch_blur_event() 访问野指针(感谢朝泽提供补丁)。
|
||||
* 控件事件的回调被调用时,如果当前控件的 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() 访问野指针(感谢朝泽提供补丁)。
|
||||
* 增加函数str\_append\_more。
|
||||
* 在 EVT_BLUR 的事件回调中 widget_destroy_children(当前控件的父控件等), 会导致 widget_dispatch_blur_event() 访问野指针(感谢朝泽提供补丁)。
|
||||
* 控件事件的回调被调用时,如果当前控件的 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
|
||||
* 完善控件动画(感谢朝泽提供补丁)。
|
||||
|
@ -102,6 +102,28 @@ ret_t str_append(str_t* str, const char* 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) {
|
||||
char num[32];
|
||||
tk_snprintf(num, sizeof(num), "%d", value);
|
||||
|
@ -39,6 +39,7 @@ BEGIN_C_DECLS
|
||||
*
|
||||
* str_append(&s, "abc");
|
||||
* str_append(&s, "123");
|
||||
* log_debug("%s\n", s.str);
|
||||
*
|
||||
* 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);
|
||||
|
||||
/**
|
||||
* @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
|
||||
* 追加字符串。
|
||||
|
@ -298,3 +298,23 @@ TEST(Str, json) {
|
||||
|
||||
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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user