summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.h1
-rw-r--r--equipment.c19
-rw-r--r--info.c2
3 files changed, 18 insertions, 4 deletions
diff --git a/dive.h b/dive.h
index ab854e37e..f1df0e225 100644
--- a/dive.h
+++ b/dive.h
@@ -95,6 +95,7 @@ typedef struct {
extern gboolean cylinder_none(void *_data);
extern gboolean no_cylinders(cylinder_t *cyl);
extern gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2);
+extern void copy_cylinders(cylinder_t *cyl1, cylinder_t *cyl2);
extern gboolean no_weightsystems(weightsystem_t *ws);
extern gboolean weightsystems_equal(weightsystem_t *ws1, weightsystem_t *ws2);
diff --git a/equipment.c b/equipment.c
index 43bb29d59..d676fc05d 100644
--- a/equipment.c
+++ b/equipment.c
@@ -461,13 +461,11 @@ gboolean description_equal(const char *desc1, const char *desc2)
}
/* when checking for the same cylinder we want the size and description to match
- but don't compare the start and end pressures */
+ but don't compare the start and end pressures, nor the Nitrox/He values */
static gboolean one_cylinder_equal(cylinder_t *cyl1, cylinder_t *cyl2)
{
return cyl1->type.size.mliter == cyl2->type.size.mliter &&
cyl1->type.workingpressure.mbar == cyl2->type.workingpressure.mbar &&
- cyl1->gasmix.o2.permille == cyl2->gasmix.o2.permille &&
- cyl1->gasmix.he.permille == cyl2->gasmix.he.permille &&
description_equal(cyl1->type.description, cyl2->type.description);
}
@@ -481,6 +479,21 @@ gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2)
return TRUE;
}
+/* copy size and description of all cylinders from cyl1 to cyl2 */
+void copy_cylinders(cylinder_t *cyl1, cylinder_t *cyl2)
+{
+ int i;
+
+ for (i = 0; i < MAX_CYLINDERS; i++) {
+ cyl2[i].type.size.mliter = cyl1[i].type.size.mliter;
+ cyl2[i].type.workingpressure.mbar = cyl1[i].type.workingpressure.mbar;
+ if (cyl1[i].type.description)
+ cyl2[i].type.description = strdup(cyl1[i].type.description);
+ else
+ cyl2[i].type.description = NULL;
+ }
+}
+
static gboolean weightsystem_none(void *_data)
{
weightsystem_t *ws = _data;
diff --git a/info.c b/info.c
index 8db606344..17667a87b 100644
--- a/info.c
+++ b/info.c
@@ -482,7 +482,7 @@ void update_equipment_data(struct dive *dive, struct dive *master)
if ( ! cylinders_equal(remember_cyl, master->cylinder) &&
(no_cylinders(dive->cylinder) ||
cylinders_equal(dive->cylinder, remember_cyl)))
- memcpy(dive->cylinder, master->cylinder, CYL_BYTES);
+ copy_cylinders(master->cylinder, dive->cylinder);
if (! weightsystems_equal(remember_ws, master->weightsystem) &&
(no_weightsystems(dive->weightsystem) ||
weightsystems_equal(dive->weightsystem, remember_ws)))