#include #include #include #include "msgbuf.h" MessageBuffer * msgbuf_new(void) { MessageBuffer *p; if ((p = malloc(sizeof(*p))) == NULL) { perror("msgbuf_new"); exit(1); } if ((p->buf = malloc(sizeof(*p->buf) * 1024)) == NULL) { perror("msgbuf_new2"); exit(1); } p->size = 1024; p->cur = 0; return p; } void msgbuf_delete(MessageBuffer *m) { if (m) { if (m->buf) free(m->buf); free(m); } } void msgbuf_add(MessageBuffer *m, wchar_t ch) { wchar_t *p; m->buf[m->cur++] = ch; if (m->cur >= m->size) { m->size += 1024; if ((p = realloc(m->buf, sizeof(*m->buf) * m->size)) == NULL) { perror("msgbuf_add"); exit(1); } m->buf = p; } } wchar_t * msgbuf_cut(MessageBuffer *m) { wchar_t *p; if (m->cur == 0) return NULL; m->buf[m->cur++] = 0; if ((p = realloc(m->buf, sizeof(*m->buf) * m->cur)) == NULL) { perror("msgbuf_cut"); exit(1); } if ((m->buf = malloc(sizeof(*m->buf) * 1024)) == NULL) { perror("msgbuf_cut2"); exit(1); } m->size = 1024; m->cur = 0; return p; }