void add_log_end()

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;
}