void add_log_key_value()

in src/log_builder.c [488:519]


void add_log_key_value(log_group_builder *bder, char * key, size_t key_len, char * value, size_t value_len)
{
    // sum total size
    uint32_t kv_size = sizeof(char) * (key_len + value_len) + uint32_size((uint32_t)key_len) + uint32_size((uint32_t)value_len) + 2;
    kv_size += 1 + uint32_size(kv_size);
    log_tag * logs = &bder->grp->logs;
    // ensure buffer size
    if (bder->grp->log_now_buffer - logs->buffer + kv_size > logs->max_buffer_len )
    {
        // reset log_now_buffer
        size_t delta = bder->grp->log_now_buffer - logs->buffer;
        _adjust_buffer(logs, delta + kv_size);
        bder->grp->log_now_buffer = logs->buffer + delta;
    }
    uint8_t * buf = (uint8_t *)bder->grp->log_now_buffer;
    // key_value header
    *buf++ = 0x12;
    buf += uint32_pack(uint32_size(key_len) + uint32_size(value_len) + 2 + key_len + value_len, buf);
    // key len
    *buf++ = 0x0A;
    buf += uint32_pack(key_len, buf);
    // key
    memcpy(buf, key, key_len);
    buf += key_len;
    // value len
    *buf++ = 0x12;
    buf += uint32_pack(value_len, buf);
    // value
    memcpy(buf, value, value_len);
    buf += value_len;
    bder->grp->log_now_buffer = (char *)buf;
}