mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
A file that we import should never become the default file we save to
Only files that are opened should be considered r/w. Files that are imported should be treated as if they were r/o. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
ffd3b8591d
commit
a2afe41280
5 changed files with 18 additions and 14 deletions
5
dive.h
5
dive.h
|
@ -344,11 +344,12 @@ static inline struct dive *get_dive(int nr)
|
|||
for ((_i) = 0; ((_x) = get_dive(_i)) != NULL; (_i)++)
|
||||
|
||||
extern void parse_xml_init(void);
|
||||
extern void parse_xml_buffer(const char *url, const char *buf, int size, GError **error);
|
||||
extern void parse_xml_buffer(const char *url, const char *buf, int size, GError **error,
|
||||
gboolean possible_default_filename);
|
||||
extern void parse_xml_exit(void);
|
||||
extern void set_filename(const char *filename, gboolean force);
|
||||
|
||||
extern void parse_file(const char *filename, GError **error);
|
||||
extern void parse_file(const char *filename, GError **error, gboolean possible_default_filename);
|
||||
|
||||
#ifdef XSLT
|
||||
extern xmlDoc *test_xslt_transforms(xmlDoc *doc);
|
||||
|
|
11
file.c
11
file.c
|
@ -71,7 +71,7 @@ static void suunto_read(struct zip_file *file, GError **error)
|
|||
size = read * 3 / 2;
|
||||
mem = realloc(mem, size);
|
||||
}
|
||||
parse_xml_buffer("SDE file", mem, read, error);
|
||||
parse_xml_buffer("SDE file", mem, read, error, FALSE);
|
||||
free(mem);
|
||||
}
|
||||
#endif
|
||||
|
@ -239,16 +239,17 @@ static int open_by_filename(const char *filename, const char *fmt, struct memblo
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void parse_file_buffer(const char *filename, struct memblock *mem, GError **error)
|
||||
static void parse_file_buffer(const char *filename, struct memblock *mem, GError **error,
|
||||
gboolean possible_default_filename)
|
||||
{
|
||||
char *fmt = strrchr(filename, '.');
|
||||
if (fmt && open_by_filename(filename, fmt+1, mem, error))
|
||||
return;
|
||||
|
||||
parse_xml_buffer(filename, mem->buffer, mem->size, error);
|
||||
parse_xml_buffer(filename, mem->buffer, mem->size, error, possible_default_filename);
|
||||
}
|
||||
|
||||
void parse_file(const char *filename, GError **error)
|
||||
void parse_file(const char *filename, GError **error, gboolean possible_default_filename)
|
||||
{
|
||||
struct memblock mem;
|
||||
|
||||
|
@ -267,6 +268,6 @@ void parse_file(const char *filename, GError **error)
|
|||
return;
|
||||
}
|
||||
|
||||
parse_file_buffer(filename, &mem, error);
|
||||
parse_file_buffer(filename, &mem, error, possible_default_filename);
|
||||
free(mem.buffer);
|
||||
}
|
||||
|
|
|
@ -336,7 +336,7 @@ static void file_open(GtkWidget *w, gpointer data)
|
|||
|
||||
GError *error = NULL;
|
||||
filename = fn_glist->data;
|
||||
parse_file(filename, &error);
|
||||
parse_file(filename, &error, TRUE);
|
||||
if (error != NULL)
|
||||
{
|
||||
report_error(error);
|
||||
|
@ -1371,7 +1371,7 @@ static GtkEntry *dive_computer_device(GtkWidget *vbox)
|
|||
static void do_import_file(gpointer data, gpointer user_data)
|
||||
{
|
||||
GError *error = NULL;
|
||||
parse_file(data, &error);
|
||||
parse_file(data, &error, FALSE);
|
||||
|
||||
if (error != NULL)
|
||||
{
|
||||
|
@ -1440,7 +1440,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);
|
||||
parse_xml_buffer("Uemis Download", buf, strlen(buf), &error, FALSE);
|
||||
set_uemis_last_dive(uemis_max_dive_data);
|
||||
#if UEMIS_DEBUG
|
||||
fprintf(debugfile, "uemis_max_dive_data: %s\n", uemis_max_dive_data);
|
||||
|
|
4
main.c
4
main.c
|
@ -244,7 +244,7 @@ int main(int argc, char **argv)
|
|||
}
|
||||
no_filenames = FALSE;
|
||||
GError *error = NULL;
|
||||
parse_file(a, &error);
|
||||
parse_file(a, &error, TRUE);
|
||||
|
||||
if (error != NULL)
|
||||
{
|
||||
|
@ -256,7 +256,7 @@ int main(int argc, char **argv)
|
|||
if (no_filenames) {
|
||||
GError *error = NULL;
|
||||
const char *filename = subsurface_default_filename();
|
||||
parse_file(filename, &error);
|
||||
parse_file(filename, &error, TRUE);
|
||||
/* don't report errors - this file may not exist, but make
|
||||
sure we remember this as the filename in use */
|
||||
set_filename(filename, FALSE);
|
||||
|
|
|
@ -1455,7 +1455,8 @@ static void reset_all(void)
|
|||
import_source = UNKNOWN;
|
||||
}
|
||||
|
||||
void parse_xml_buffer(const char *url, const char *buffer, int size, GError **error)
|
||||
void parse_xml_buffer(const char *url, const char *buffer, int size, GError **error,
|
||||
gboolean possible_default_filename)
|
||||
{
|
||||
xmlDoc *doc;
|
||||
|
||||
|
@ -1472,7 +1473,8 @@ void parse_xml_buffer(const char *url, const char *buffer, int size, GError **er
|
|||
return;
|
||||
}
|
||||
/* remember, if necessary, that this is the filename to store to */
|
||||
set_filename(url, FALSE);
|
||||
if (possible_default_filename)
|
||||
set_filename(url, FALSE);
|
||||
reset_all();
|
||||
dive_start();
|
||||
#ifdef XSLT
|
||||
|
|
Loading…
Add table
Reference in a new issue