summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--membuffer.c24
-rw-r--r--membuffer.h13
-rw-r--r--save-xml.c2
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");