X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Fbuffer.h;h=b4e5baaa42ee2197dc602ca72a35b48611a480fd;hb=471db7e648c8a6b41e14ed90e370fe3b70af0e7f;hp=24bc590cd0aafa8b35967e425d69cebc2cbcfe4e;hpb=8977d252fc44ae953df4bde4a2f1c5895beea4e0;p=apps%2Fpfixtools.git diff --git a/common/buffer.h b/common/buffer.h index 24bc590..b4e5baa 100644 --- a/common/buffer.h +++ b/common/buffer.h @@ -39,14 +39,11 @@ #include #include "mem.h" #include "str.h" +#include "array.h" -typedef struct buffer_t { - char *data; - ssize_t len; - ssize_t size; -} buffer_t; +typedef A(char) buffer_t; -#define BUFFER_INIT {NULL, 0, 0} +#define BUFFER_INIT ARRAY_INIT DO_INIT(buffer_t, buffer); static inline void buffer_wipe(buffer_t *buf) { @@ -66,20 +63,21 @@ static inline char *buffer_unwrap(buffer_t **buf) { return res; } +#define buffer_resize(buffer, newsize) \ + array_ensure_exact_capacity(*(buffer), (newsize) + 1) -void buffer_resize(buffer_t *, ssize_t newsize); -static inline void buffer_ensure(buffer_t *buf, ssize_t extra) { +static inline void buffer_ensure(buffer_t *buf, int extra) { assert (extra >= 0); if (buf->len + extra >= buf->size) { buffer_resize(buf, buf->len + extra); } } -static inline void buffer_extend(buffer_t *buf, ssize_t extra) { +static inline void buffer_extend(buffer_t *buf, int extra) { buffer_ensure(buf, extra); buf->len += extra; buf->data[buf->len] = '\0'; } -static inline void buffer_extendch(buffer_t *buf, ssize_t extra, int c) { +static inline void buffer_extendch(buffer_t *buf, int extra, int c) { buffer_ensure(buf, extra); memset(buf->data + buf->len, c, extra); buf->len += extra; @@ -87,7 +85,7 @@ static inline void buffer_extendch(buffer_t *buf, ssize_t extra, int c) { } -static inline void buffer_add(buffer_t *buf, const void *data, ssize_t len) { +static inline void buffer_add(buffer_t *buf, const void *data, int len) { buffer_ensure(buf, len); memcpy(buf->data + buf->len, data, len); buf->len += len; @@ -104,12 +102,12 @@ static inline void buffer_addch(buffer_t *buf, int c) { } __attribute__((format(printf,2,0))) -ssize_t buffer_addvf(buffer_t *, const char *fmt, va_list); +int buffer_addvf(buffer_t *, const char *fmt, va_list); static inline __attribute__((format(printf,2,3))) -ssize_t buffer_addf(buffer_t *buf, const char *fmt, ...) +int buffer_addf(buffer_t *buf, const char *fmt, ...) { - ssize_t res; + int res; va_list args; va_start(args, fmt); res = buffer_addvf(buf, fmt, args); @@ -117,9 +115,9 @@ ssize_t buffer_addf(buffer_t *buf, const char *fmt, ...) return res; } -void buffer_consume(buffer_t *buf, ssize_t len); +void buffer_consume(buffer_t *buf, int len); -ssize_t buffer_read(buffer_t *buf, int fd, ssize_t count); -ssize_t buffer_write(buffer_t *buf, int fd); +int buffer_read(buffer_t *buf, int fd, int count); +int buffer_write(buffer_t *buf, int fd); #endif /* PFIXTOOLS_BUFFER_H */