mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-07-24 09:37:22 +03:00
Make buffered writer an independent module
This commit is contained in:
parent
6b6b4709b3
commit
6d8e616902
13 changed files with 76 additions and 57 deletions
36
src/buf_writer.c
Normal file
36
src/buf_writer.c
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#define JEMALLOC_BUF_WRITER_C_
|
||||
#include "jemalloc/internal/jemalloc_preamble.h"
|
||||
#include "jemalloc/internal/jemalloc_internal_includes.h"
|
||||
|
||||
#include "jemalloc/internal/buf_writer.h"
|
||||
#include "jemalloc/internal/malloc_io.h"
|
||||
|
||||
void
|
||||
buf_write_flush(buf_write_arg_t *arg) {
|
||||
assert(arg->buf_end <= arg->buf_size);
|
||||
arg->buf[arg->buf_end] = '\0';
|
||||
if (arg->write_cb == NULL) {
|
||||
arg->write_cb = je_malloc_message != NULL ?
|
||||
je_malloc_message : wrtmessage;
|
||||
}
|
||||
arg->write_cb(arg->cbopaque, arg->buf);
|
||||
arg->buf_end = 0;
|
||||
}
|
||||
|
||||
void
|
||||
buf_write_cb(void *buf_write_arg, const char *s) {
|
||||
buf_write_arg_t *arg = (buf_write_arg_t *)buf_write_arg;
|
||||
size_t i, slen, n, s_remain, buf_remain;
|
||||
assert(arg->buf_end <= arg->buf_size);
|
||||
for (i = 0, slen = strlen(s); i < slen; i += n) {
|
||||
if (arg->buf_end == arg->buf_size) {
|
||||
buf_write_flush(arg);
|
||||
}
|
||||
s_remain = slen - i;
|
||||
buf_remain = arg->buf_size - arg->buf_end;
|
||||
n = s_remain < buf_remain ? s_remain : buf_remain;
|
||||
memcpy(arg->buf + arg->buf_end, s + i, n);
|
||||
arg->buf_end += n;
|
||||
}
|
||||
assert(i == slen);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue