mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
improve tk_istream_read_line
This commit is contained in:
parent
2f44ca1771
commit
bc2bd979d7
@ -1,4 +1,7 @@
|
||||
# 最新动态
|
||||
2022/04/19
|
||||
* 完善tk\_istream\_read\_line
|
||||
|
||||
2022/04/18
|
||||
* 增加函数path\_app\_root\_ex
|
||||
* 完善ui\_loader\_load对xml的支持。
|
||||
|
@ -144,10 +144,10 @@ int32_t tk_istream_read_line(tk_istream_t* stream, void* buff, uint32_t max_size
|
||||
uint32_t end = 0;
|
||||
int32_t offset = 0;
|
||||
int32_t read_bytes = 0;
|
||||
int32_t remain_bytes = max_size;
|
||||
uint8_t* p = (uint8_t*)buff;
|
||||
int32_t remain_bytes = max_size - 1;
|
||||
return_value_if_fail(stream != NULL && stream->read != NULL, -1);
|
||||
return_value_if_fail(buff != NULL, 0);
|
||||
return_value_if_fail(buff != NULL && max_size > 1, 0);
|
||||
|
||||
start = time_now_ms();
|
||||
end = start + timeout_ms;
|
||||
@ -157,6 +157,8 @@ int32_t tk_istream_read_line(tk_istream_t* stream, void* buff, uint32_t max_size
|
||||
|
||||
if (read_bytes < 0) {
|
||||
break;
|
||||
} else if (read_bytes == 0 && tk_istream_eos(stream)) {
|
||||
break;
|
||||
}
|
||||
|
||||
offset += read_bytes;
|
||||
@ -165,11 +167,14 @@ int32_t tk_istream_read_line(tk_istream_t* stream, void* buff, uint32_t max_size
|
||||
break;
|
||||
}
|
||||
|
||||
if (p[offset] == '\n') {
|
||||
if (offset > 0 && p[offset - 1] == '\n') {
|
||||
break;
|
||||
}
|
||||
|
||||
} while (remain_bytes > 0);
|
||||
|
||||
p[offset] = '\0';
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
@ -168,6 +168,7 @@ int32_t tk_istream_read_line(tk_istream_t* stream, void* buff, uint32_t max_size
|
||||
* @method tk_istream_read_line_str
|
||||
*
|
||||
* 读取一行数据。
|
||||
* >istream必须支持随机读写(seek/tell)。
|
||||
*
|
||||
* @param {tk_istream_t*} stream istream对象。
|
||||
* @param {str_t*} str 返回数据的str对象。
|
||||
|
@ -79,7 +79,7 @@ TEST(IStreamMem, seek) {
|
||||
tk_object_unref(TK_OBJECT(is));
|
||||
}
|
||||
|
||||
TEST(IStreamMem, read_line) {
|
||||
TEST(IStreamMem, read_line_str) {
|
||||
str_t str;
|
||||
const char* content = "1111\n2222\r\n\r\n3333\n";
|
||||
tk_istream_t* is = tk_istream_mem_create((uint8_t*)content, strlen(content), 4, FALSE);
|
||||
@ -102,3 +102,25 @@ TEST(IStreamMem, read_line) {
|
||||
str_reset(&str);
|
||||
tk_object_unref(TK_OBJECT(is));
|
||||
}
|
||||
|
||||
TEST(IStreamMem, read_line) {
|
||||
char str[128];
|
||||
const char* content = "1111\n2222\r\n\r\n3333\n";
|
||||
tk_istream_t* is = tk_istream_mem_create((uint8_t*)content, strlen(content), 4, FALSE);
|
||||
uint32_t timeout = 100000000;
|
||||
ASSERT_EQ(tk_istream_read_line(is, str, sizeof(str) - 1, timeout), 5);
|
||||
ASSERT_STREQ(str, "1111\n");
|
||||
|
||||
ASSERT_EQ(tk_istream_read_line(is, str, sizeof(str) - 1, timeout), 6);
|
||||
ASSERT_STREQ(str, "2222\r\n");
|
||||
|
||||
ASSERT_EQ(tk_istream_read_line(is, str, sizeof(str) - 1, timeout), 2);
|
||||
ASSERT_STREQ(str, "\r\n");
|
||||
|
||||
ASSERT_EQ(tk_istream_read_line(is, str, sizeof(str) - 1, timeout), 5);
|
||||
ASSERT_STREQ(str, "3333\n");
|
||||
|
||||
ASSERT_EQ(tk_istream_read_line(is, str, sizeof(str) - 1, timeout), 0);
|
||||
|
||||
tk_object_unref(TK_OBJECT(is));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user