summaryrefslogtreecommitdiffstats
path: root/save-xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'save-xml.c')
-rw-r--r--save-xml.c54
1 files changed, 26 insertions, 28 deletions
diff --git a/save-xml.c b/save-xml.c
index 56de154fe..7801080e9 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -5,6 +5,7 @@
#include <errno.h>
#include <time.h>
#include <unistd.h>
+#include <fcntl.h>
#include "dive.h"
#include "device.h"
@@ -210,18 +211,6 @@ static void save_overview(struct membuffer *b, struct dive *dive)
show_utf8(b, dive->suit, " <suit>", "</suit>\n", 0);
}
-static int nr_cylinders(struct dive *dive)
-{
- int nr;
-
- for (nr = MAX_CYLINDERS; nr; --nr) {
- cylinder_t *cylinder = dive->cylinder + nr - 1;
- if (!cylinder_nodata(cylinder))
- break;
- }
- return nr;
-}
-
static void save_cylinder_info(struct membuffer *b, struct dive *dive)
{
int i, nr;
@@ -251,18 +240,6 @@ static void save_cylinder_info(struct membuffer *b, struct dive *dive)
}
}
-static int nr_weightsystems(struct dive *dive)
-{
- int nr;
-
- for (nr = MAX_WEIGHTSYSTEMS; nr; --nr) {
- weightsystem_t *ws = dive->weightsystem + nr - 1;
- if (!weightsystem_none(ws))
- break;
- }
- return nr;
-}
-
static void save_weightsystem_info(struct membuffer *b, struct dive *dive)
{
int i, nr;
@@ -609,15 +586,12 @@ static void save_backup(const char *name, const char *ext, const char *new_ext)
free(newname);
}
-void save_dives_logic(const char *filename, const bool select_only)
+static void try_to_backup(const char *filename)
{
- struct membuffer buf = { 0 };
- FILE *f;
char extension[][5] = { "xml", "ssrf", "" };
int i = 0;
int flen = strlen(filename);
- save_dives_buffer(&buf, select_only);
/* Maybe we might want to make this configurable? */
while (extension[i][0] != '\0') {
int elen = strlen(extension[i]);
@@ -627,6 +601,30 @@ void save_dives_logic(const char *filename, const bool select_only)
}
i++;
}
+}
+
+void save_dives_logic(const char *filename, const bool select_only)
+{
+ struct membuffer buf = { 0 };
+ FILE *f;
+ int fd;
+
+ /*
+ * See if the file already exists, and if so,
+ * perhaps it's a git save-file pointer?
+ *
+ * Otherwise, try to back it up.
+ */
+ fd = subsurface_open(filename, O_RDONLY, 0);
+ if (fd >= 0) {
+ if (git_save_dives(fd, select_only))
+ return;
+ close(fd);
+ try_to_backup(filename);
+ }
+
+ save_dives_buffer(&buf, select_only);
+
f = subsurface_fopen(filename, "w");
if (f) {
flush_buffer(&buf, f);