diff options
Diffstat (limited to 'plugins/pychrysa/arch')
| -rw-r--r-- | plugins/pychrysa/arch/vmpa.c | 31 | 
1 files changed, 29 insertions, 2 deletions
| diff --git a/plugins/pychrysa/arch/vmpa.c b/plugins/pychrysa/arch/vmpa.c index af1557d..aaaede8 100644 --- a/plugins/pychrysa/arch/vmpa.c +++ b/plugins/pychrysa/arch/vmpa.c @@ -25,9 +25,13 @@  #include "vmpa.h" +#include <assert.h>  #include <string.h> +#include <i18n.h> + +  #include "../helpers.h" @@ -208,23 +212,43 @@ static PyObject *py_vmpa_richcompare(PyObject *a, PyObject *b, int op)      PyObject *result;                       /* Bilan à retourner           */      vmpa2t *addr_a;                         /* Première adresse à traiter  */      vmpa2t addr_b;                          /* Seconde adresse à traiter   */ +    int comp;                               /* Résultat d'une comparaison  */      addr_a = &((py_vmpa_t *)a)->addr;      if (!convert_pyobj_to_vmpa(b, &addr_b))          return NULL; +    comp = cmp_vmpa(addr_a, &addr_b); +      switch (op)      { +        case Py_LT: +            result = comp < 0 ? Py_True : Py_False; +            break; + +        case Py_LE: +            result = comp <= 0 ? Py_True : Py_False; +            break; +          case Py_EQ: -            result = are_equal(addr_a, &addr_b) ? Py_True : Py_False; +            result = comp == 0 ? Py_True : Py_False;              break;          case Py_NE: -            result = are_equal(addr_a, &addr_b) ? Py_False : Py_True; +            result = comp != 0 ? Py_True : Py_False; +            break; + +        case Py_GT: +            result = comp > 0 ? Py_True : Py_False; +            break; + +        case Py_GE: +            result = comp >= 0 ? Py_True : Py_False;              break;          default: +            assert(false);              result = Py_NotImplemented;              break; @@ -436,7 +460,10 @@ static bool convert_pyobj_to_vmpa(PyObject *obj, vmpa2t *addr)          value = PyLong_AsLongLongAndOverflow(obj, &overflow);          if (value == -1 && (overflow == 1 || PyErr_Occurred())) +        {              PyErr_Clear(); +            PyErr_SetString(PyExc_TypeError, _("Unable to cast object as VMPA.")); +        }          else          { | 
