Update cylinder info properly

The "cylinders_equal()/copy_cylinders()" functions were buggered, and
only checked (and copied) the cylinder type.  That was on purpose, since
you do want to be able to change the type of a cylinder without changing
the gasmix of the cylinder.

HOWEVER, the reverse is also true: you may want to change the gasmix of
a cylinder without changing the type.

So it's not that the type of the cylinder is special - it's that the
type and the gasmix should be considered separately.

Do that properly for the equipment editing case.

Reported-by: Ďoďo <dodo.sk@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Linus Torvalds 2012-09-24 12:03:58 -07:00
parent 37760d830f
commit 6ae67f96f8
3 changed files with 81 additions and 40 deletions

View file

@ -485,40 +485,6 @@ gboolean description_equal(const char *desc1, const char *desc2)
(desc1 && desc2 && strcmp(desc1, desc2) == 0));
}
/* when checking for the same cylinder we want the size and description to match
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 &&
description_equal(cyl1->type.description, cyl2->type.description);
}
gboolean cylinders_equal(cylinder_t *cyl1, cylinder_t *cyl2)
{
int i;
for (i = 0; i < MAX_CYLINDERS; i++)
if (!one_cylinder_equal(cyl1 + i, cyl2 + i))
return FALSE;
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;