summaryrefslogtreecommitdiff
path: root/src/arch/vmpa.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/vmpa.c')
-rw-r--r--src/arch/vmpa.c52
1 files changed, 39 insertions, 13 deletions
diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c
index 6db62cc..f90ab22 100644
--- a/src/arch/vmpa.c
+++ b/src/arch/vmpa.c
@@ -193,8 +193,8 @@ int cmp_vmpa_by_phy(const vmpa2t *a, const vmpa2t *b)
else
{
if (a->physical == VMPA_NO_PHYSICAL && b->physical == VMPA_NO_PHYSICAL) result = 0;
- else if (a->physical == VMPA_NO_PHYSICAL) result = -1;
- else result = 1;
+ else if (a->physical == VMPA_NO_PHYSICAL) result = 1;
+ else result = -1;
}
return result;
@@ -228,8 +228,8 @@ int cmp_vmpa_by_virt(const vmpa2t *a, const vmpa2t *b)
else
{
if (a->virtual == VMPA_NO_VIRTUAL && b->virtual == VMPA_NO_VIRTUAL) result = 0;
- else if (a->virtual == VMPA_NO_VIRTUAL) result = -1;
- else result = 1;
+ else if (a->virtual == VMPA_NO_VIRTUAL) result = 1;
+ else result = -1;
}
return result;
@@ -253,22 +253,48 @@ int cmp_vmpa_by_virt(const vmpa2t *a, const vmpa2t *b)
int cmp_vmpa(const vmpa2t *a, const vmpa2t *b)
{
int result; /* Bilan à retourner */
- bool half; /* Comparaison débutée */
+ bool compared; /* Comparaison effectuée */
- result = -1;
+ if (a->physical == VMPA_NO_PHYSICAL && a->virtual == VMPA_NO_VIRTUAL
+ && b->physical == VMPA_NO_PHYSICAL && b->virtual == VMPA_NO_VIRTUAL)
+ {
+ result = 0;
- half = false;
+ }
- if (a->physical != VMPA_NO_PHYSICAL && b->physical != VMPA_NO_PHYSICAL)
+ else if (a->physical == VMPA_NO_PHYSICAL && a->virtual == VMPA_NO_VIRTUAL)
{
- result = cmp_vmpa_by_phy(a, b);
- half = true;
+ result = 1;
+
}
- if (a->virtual != VMPA_NO_VIRTUAL && b->virtual != VMPA_NO_VIRTUAL
- && (!half || (half && result == 0)))
+ else if (b->physical == VMPA_NO_PHYSICAL && b->virtual == VMPA_NO_VIRTUAL)
+ {
+ result = -1;
+
+ }
+
+ else
{
- result = cmp_vmpa_by_virt(a, b);
+ compared = false;
+
+ if (a->physical != VMPA_NO_PHYSICAL && b->physical != VMPA_NO_PHYSICAL)
+ {
+ result = cmp_vmpa_by_phy(a, b);
+ compared = true;
+ }
+
+ if (a->virtual != VMPA_NO_VIRTUAL && b->virtual != VMPA_NO_VIRTUAL
+ && (!compared || (compared && result == 0)))
+ {
+ result = cmp_vmpa_by_virt(a, b);
+ compared = true;
+ }
+
+ /* Cas particulier : les deux éléments n'ont aucun champ défini en commun ! */
+ if (!compared)
+ result = cmp_vmpa_by_phy(a, b);
+
}
return result;