mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
show the error string in the GUI rather than stderr
This makes the error string just be an internal "membuffer", which the GUI can fetch and show when errors occur. The error string keeps accumulating until somebody retrieves it with "get_error_string()". This should make any write errors actually show up to the user. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
b5d0cfd557
commit
ec33a95ad0
3 changed files with 33 additions and 9 deletions
1
dive.h
1
dive.h
|
@ -661,6 +661,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
extern int report_error(const char *fmt, ...);
|
||||
extern const char *get_error_string(void);
|
||||
|
||||
extern struct dive *find_dive_including(timestamp_t when);
|
||||
extern bool dive_within_time_range(struct dive *dive, timestamp_t when, timestamp_t offset);
|
||||
|
|
|
@ -899,8 +899,10 @@ int MainWindow::file_save_as(void)
|
|||
if (ui.InfoWidget->isEditing())
|
||||
ui.InfoWidget->acceptChanges();
|
||||
|
||||
if (save_dives(filename.toUtf8().data()))
|
||||
if (save_dives(filename.toUtf8().data())) {
|
||||
showError(get_error_string());
|
||||
return -1;
|
||||
}
|
||||
|
||||
set_filename(filename.toUtf8().data(), true);
|
||||
setTitle(MWTF_FILENAME);
|
||||
|
@ -927,8 +929,10 @@ int MainWindow::file_save(void)
|
|||
if (!current_def_dir.exists())
|
||||
current_def_dir.mkpath(current_def_dir.absolutePath());
|
||||
}
|
||||
if (save_dives(existing_filename))
|
||||
if (save_dives(existing_filename)) {
|
||||
showError(get_error_string());
|
||||
return -1;
|
||||
}
|
||||
mark_divelist_changed(false);
|
||||
addRecentFile(QStringList() << QString(existing_filename));
|
||||
return 0;
|
||||
|
|
33
save-git.c
33
save-git.c
|
@ -340,16 +340,35 @@ static void create_dive_buffer(struct dive *dive, struct membuffer *b)
|
|||
save_dive_temperature(b, dive);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
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 b = { 0 };
|
||||
VA_BUF(&b, fmt);
|
||||
|
||||
/* We should do some UI element thing describing the failure */
|
||||
put_bytes(&b, "\n", 1);
|
||||
flush_buffer(&b, stderr);
|
||||
free_buffer(&b);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue