in src/logwriter.c [260:293]
static sparkey_returncode log_add(sparkey_logwriter *log, uint64_t num1, uint64_t num2, uint64_t len1, const uint8_t *data1, uint64_t len2, const uint8_t *data2, ptrdiff_t *datasize) {
uint8_t buf1[10];
uint8_t buf2[10];
uint64_t written1 = write_vlq(buf1, num1);
uint64_t written2 = write_vlq(buf2, num2);
*datasize = written1 + written2 + len1 + len2;
uint64_t remaining;
if (sparkey_uses_compressor(log->header.compression_type)) {
remaining = buf_remaining(&log->block_buf);
// todo: make it smarter by checking if it's better to flush directly
uint64_t fits_in_one = written1 + written2 + len1 + len2 <= buf_size(&log->block_buf);
uint64_t doesnt_fit_this = written1 + written2 + len1 + len2 > buf_remaining(&log->block_buf);
if ((remaining < written1 + written2) || (fits_in_one && doesnt_fit_this)) {
RETHROW(flush_compressed(log));
}
log->entry_count++;
log->flushed = 0;
RETHROW(compressed_add(log, buf1, written1));
RETHROW(compressed_add(log, buf2, written2));
RETHROW(compressed_add(log, data1, len1));
RETHROW(compressed_add(log, data2, len2));
if (log->flushed && buf_used(&log->block_buf) > 0) {
RETHROW(flush_compressed(log));
}
} else {
RETHROW(buf_add(&log->file_buf, log->fd, buf1, written1));
RETHROW(buf_add(&log->file_buf, log->fd, buf2, written2));
RETHROW(buf_add(&log->file_buf, log->fd, data1, len1));
RETHROW(buf_add(&log->file_buf, log->fd, data2, len2));
}
return SPARKEY_SUCCESS;
}