in src/log_builder.c [521:552]
void add_log_end(log_group_builder * bder)
{
log_tag * logs = &bder->grp->logs;
uint32_t log_size = bder->grp->log_now_buffer - logs->now_buffer - INIT_LOG_SIZE_BYTES;
// check total size and uint32_size(total size)
int32_t header_size = uint32_size(log_size) + 1;
if (header_size != INIT_LOG_SIZE_BYTES)
{
int32_t delta_header_size = header_size - (int32_t)INIT_LOG_SIZE_BYTES;
// need check buffer size
if (delta_header_size > 0 && bder->grp->log_now_buffer - logs->buffer + delta_header_size > logs->max_buffer_len)
{
// reset log_now_buffer
size_t delta = bder->grp->log_now_buffer - logs->buffer;
_adjust_buffer(logs, delta + delta_header_size);
bder->grp->log_now_buffer = logs->buffer + delta;
}
// move buffer
memmove(logs->now_buffer + header_size, logs->now_buffer + INIT_LOG_SIZE_BYTES, log_size);
}
// set log header
uint8_t * buf = (uint8_t *)logs->now_buffer;
*buf++ = 0x0A;
buf += uint32_pack(log_size, buf);
// do not need to add header_size
logs->now_buffer = (char *)buf + log_size;
logs->now_buffer_len += header_size + log_size;
// update loggroup size
bder->loggroup_size += header_size + log_size;
}