diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-11-10 15:32:06 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2012-11-10 16:02:05 +0100 |
commit | 3d8c1e50fcc2c7e2ab43e8d09bf00e0610d69eaa (patch) | |
tree | 964065f93a8c96031bb47058993890b4f42adfc8 /gtk-gui.c | |
parent | 080bcc10fc5e1651bc31f2260ef85376a8356c0b (diff) | |
download | subsurface-3d8c1e50fcc2c7e2ab43e8d09bf00e0610d69eaa.tar.gz |
Fix default filename handling errors
The default filename handling is broken in two different ways:
(a) if we start subsurface with a non-existing file, we warn about
the inability to read that file, and then we exit without setting the
default filename.
This is broken because it means that if the user (perhaps by mistake,
by pressing ^S) now saves the file, he will overwrite the default
filename, even though that was *not* the file we read, and *not* the
file that subsurface was started with.
So just set the default filename even for a failed file open.
The exact same logic is true of a failed parse of an XML file that we
successfully opened. We do *not* want to leave the old default
filename in place just because the XML parsing failed, and possibly
then overwriting some file that was never involved with that failure
in the first place. So just get rid of all the logic to push the
filename saving into the XML parsing layer, it has zero relevance at
that point.
(b) if we do replace the default filename with a NULL file, we need
to set that even if we cannot do a strdup() on the NULL.
This fixes both errors.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'gtk-gui.c')
-rw-r--r-- | gtk-gui.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -1518,7 +1518,7 @@ static GError *setup_uemis_import(device_data_t *data) #ifdef DEBUGFILE fprintf(debugfile, "xml buffer \"%s\"\n\n", buf); #endif - parse_xml_buffer("Uemis Download", buf, strlen(buf), &error, FALSE); + parse_xml_buffer("Uemis Download", buf, strlen(buf), &error); set_uemis_last_dive(uemis_max_dive_data); #if UEMIS_DEBUG fprintf(debugfile, "uemis_max_dive_data: %s\n", uemis_max_dive_data); @@ -1672,4 +1672,6 @@ void set_filename(const char *filename, gboolean force) free((void *)existing_filename); if (filename) existing_filename = strdup(filename); + else + existing_filename = NULL; } |