#include "internal.h" static int flush(fmt·State *io) { int n; char *s; void *heap = io->heap; mem·Reallocator mem = io->mem; if(!io->buffer.beg) return 0; n = 2*(uintptr)io->file; s = io->buffer.beg; io->buffer.beg = mem.realloc(heap, io->buffer.beg, n, 1); if(!io->buffer.beg){ io->file = io->buffer.cur = io->buffer.end = nil; mem.free(heap, s); return 0; } io->file = (void*)(uintptr)n; io->buffer.cur = io->buffer.beg + (io->buffer.cur - s); io->buffer.end = io->buffer.beg + n - 1; return 1; } int fmt·make(mem·Reallocator mem, void *heap, fmt·State *io) { int n; memset(io, 0, sizeof(*io)); n = 32; io->buffer.beg = io->buffer.cur = mem.alloc(heap, n, 1); if(!io->buffer.beg) return -1; io->buffer.end = io->buffer.beg + n - 1; io->flush = flush; io->file = (void*)(uintptr)n; io->n = 0; fmt·setlocale(io, nil, nil, nil); return 0; } void fmt·free(fmt·State *io) { void *heap = io->heap; mem·Reallocator mem = io->mem; mem.free(heap, io->buffer.beg); io->buffer.beg = io->buffer.cur = io->buffer.end = nil; }