diff options
-rw-r--r-- | membuffer.c | 24 | ||||
-rw-r--r-- | membuffer.h | 13 | ||||
-rw-r--r-- | save-xml.c | 2 |
3 files changed, 28 insertions, 11 deletions
diff --git a/membuffer.c b/membuffer.c index 30ba05fdb..a258c424a 100644 --- a/membuffer.c +++ b/membuffer.c @@ -10,18 +10,24 @@ void free_buffer(struct membuffer *b) { free(b->buffer); b->buffer = NULL; - b->used = 0; - b->size = 0; + b->len = 0; + b->alloc = 0; } void flush_buffer(struct membuffer *b, FILE *f) { - if (b->used) { - fwrite(b->buffer, 1, b->used, f); + if (b->len) { + fwrite(b->buffer, 1, b->len, f); free_buffer(b); } } +void strip_mb(struct membuffer *b) +{ + while (b->len && isspace(b->buffer[b->len-1])) + b->len--; +} + /* * Running out of memory isn't really an issue these days. * So rather than do insane error handling and making the @@ -36,8 +42,8 @@ static void oom(void) static void make_room(struct membuffer *b, unsigned int size) { - unsigned int needed = b->used + size; - if (needed > b->size) { + unsigned int needed = b->len + size; + if (needed > b->alloc) { char *n; /* round it up to not reallocate all the time.. */ needed = needed * 9 / 8 + 1024; @@ -45,15 +51,15 @@ static void make_room(struct membuffer *b, unsigned int size) if (!n) oom(); b->buffer = n; - b->size = needed; + b->alloc = needed; } } void put_bytes(struct membuffer *b, const char *str, int len) { make_room(b, len); - memcpy(b->buffer + b->used, str, len); - b->used += len; + memcpy(b->buffer + b->len, str, len); + b->len += len; } void put_string(struct membuffer *b, const char *str) diff --git a/membuffer.h b/membuffer.h index bef9e76bc..17cfe6e8c 100644 --- a/membuffer.h +++ b/membuffer.h @@ -1,8 +1,14 @@ #ifndef MEMBUFFER_H #define MEMBUFFER_H +#ifdef __cplusplus +extern "C" { +#endif + +#include <ctype.h> + struct membuffer { - unsigned int size, used; + unsigned int len, alloc; char *buffer; }; @@ -16,6 +22,7 @@ extern void free_buffer(struct membuffer *); extern void flush_buffer(struct membuffer *, FILE *); extern void put_bytes(struct membuffer *, const char *, int); extern void put_string(struct membuffer *, const char *); +extern void strip_mb(struct membuffer *); extern __printf(2,0) void put_vformat(struct membuffer *, const char *, va_list); extern __printf(2,3) void put_format(struct membuffer *, const char *fmt, ...); @@ -49,4 +56,8 @@ extern int put_duration(struct membuffer *, duration_t, const char *, const char extern int put_pressure(struct membuffer *, pressure_t, const char *, const char *); extern int put_salinity(struct membuffer *, int, const char *, const char *); +#ifdef __cplusplus +} +#endif + #endif diff --git a/save-xml.c b/save-xml.c index 7eba7165c..7bb2642bd 100644 --- a/save-xml.c +++ b/save-xml.c @@ -610,7 +610,7 @@ void export_dives_uddf(const char *filename, const bool selected) * transform it to UDDF format, finally dumping * the XML into a character buffer. */ - doc = xmlReadMemory(buf.buffer, buf.used, "divelog", NULL, 0); + doc = xmlReadMemory(buf.buffer, buf.len, "divelog", NULL, 0); free_buffer(&buf); if (!doc) { fprintf(stderr, "Failed to read XML memory\n"); |