summaryrefslogtreecommitdiffstats
path: root/save-git.c
diff options
context:
space:
mode:
Diffstat (limited to 'save-git.c')
-rw-r--r--save-git.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/save-git.c b/save-git.c
index ab00ba951..745f26b01 100644
--- a/save-git.c
+++ b/save-git.c
@@ -340,16 +340,35 @@ static void create_dive_buffer(struct dive *dive, struct membuffer *b)
save_dive_temperature(b, dive);
}
-int report_error(const char *fmt, ...)
+static struct membuffer error_string_buffer = { 0 };
+
+/*
+ * Note that the act of "getting" the error string
+ * buffer doesn't de-allocate the buffer, but it does
+ * set the buffer length to zero, so that any future
+ * error reports will overwrite the string rather than
+ * append to it.
+ */
+const char *get_error_string(void)
{
- struct membuffer b = { 0 };
- VA_BUF(&b, fmt);
+ const char *str;
- /* We should do some UI element thing describing the failure */
- put_bytes(&b, "\n", 1);
- flush_buffer(&b, stderr);
- free_buffer(&b);
+ if (!error_string_buffer.len)
+ return "";
+ str = mb_cstring(&error_string_buffer);
+ error_string_buffer.len = 0;
+ return str;
+}
+
+int report_error(const char *fmt, ...)
+{
+ struct membuffer *buf = &error_string_buffer;
+ /* Previous unprinted errors? Add a newline in between */
+ if (buf->len)
+ put_bytes(buf, "\n", 1);
+ VA_BUF(buf, fmt);
+ mb_cstring(buf);
return -1;
}