mirror of
https://github.com/neovim/neovim.git
synced 2025-01-01 17:23:36 -07:00
eval/encode: Simplify loop in encode_list_write
Patch made up by oni-link.
This commit is contained in:
parent
bda0165514
commit
45304b482c
@ -75,36 +75,38 @@ int encode_list_write(void *data, const char *buf, size_t len)
|
|||||||
const char *const end = buf + len;
|
const char *const end = buf + len;
|
||||||
const char *line_end = buf;
|
const char *line_end = buf;
|
||||||
listitem_T *li = list->lv_last;
|
listitem_T *li = list->lv_last;
|
||||||
do {
|
|
||||||
|
// Continue the last list element
|
||||||
|
if (li != NULL) {
|
||||||
|
line_end = xmemscan(buf, NL, len);
|
||||||
|
if (line_end != buf) {
|
||||||
|
const size_t line_length = (size_t)(line_end - buf);
|
||||||
|
char *str = (char *)li->li_tv.vval.v_string;
|
||||||
|
const size_t li_len = (str == NULL ? 0 : strlen(str));
|
||||||
|
li->li_tv.vval.v_string = xrealloc(str, li_len + line_length + 1);
|
||||||
|
str = (char *)li->li_tv.vval.v_string + li_len;
|
||||||
|
memcpy(str, buf, line_length);
|
||||||
|
str[line_length] = 0;
|
||||||
|
memchrsub(str, NUL, NL, line_length);
|
||||||
|
}
|
||||||
|
line_end++;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (line_end < end) {
|
||||||
const char *line_start = line_end;
|
const char *line_start = line_end;
|
||||||
line_end = xmemscan(line_start, NL, (size_t) (end - line_start));
|
line_end = xmemscan(line_start, NL, (size_t) (end - line_start));
|
||||||
char *str = NULL;
|
char *str = NULL;
|
||||||
if (line_end != line_start) {
|
if (line_end != line_start) {
|
||||||
const size_t line_length = (size_t) (line_end - line_start);
|
const size_t line_length = (size_t)(line_end - line_start);
|
||||||
if (li == NULL) {
|
str = xmemdupz(line_start, line_length);
|
||||||
str = xmemdupz(line_start, line_length);
|
|
||||||
} else {
|
|
||||||
const size_t li_len = (li->li_tv.vval.v_string == NULL
|
|
||||||
? 0
|
|
||||||
: STRLEN(li->li_tv.vval.v_string));
|
|
||||||
li->li_tv.vval.v_string = xrealloc(li->li_tv.vval.v_string,
|
|
||||||
li_len + line_length + 1);
|
|
||||||
str = (char *) li->li_tv.vval.v_string + li_len;
|
|
||||||
memcpy(str, line_start, line_length);
|
|
||||||
str[line_length] = 0;
|
|
||||||
}
|
|
||||||
memchrsub(str, NUL, NL, line_length);
|
memchrsub(str, NUL, NL, line_length);
|
||||||
}
|
}
|
||||||
if (li == NULL) {
|
list_append_allocated_string(list, str);
|
||||||
list_append_allocated_string(list, str);
|
|
||||||
} else {
|
|
||||||
li = NULL;
|
|
||||||
}
|
|
||||||
if (line_end == end - 1) {
|
|
||||||
list_append_allocated_string(list, NULL);
|
|
||||||
}
|
|
||||||
line_end++;
|
line_end++;
|
||||||
} while (line_end < end);
|
}
|
||||||
|
if (line_end == end) {
|
||||||
|
list_append_allocated_string(list, NULL);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user