From a5974124ce05dc7ee58a4e80809aa5e090692758 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Mon, 26 Nov 2018 19:16:01 +0100
Subject: Updated the Python bindings printing memory ranges.

---
 plugins/pychrysalide/arch/vmpa.c | 57 ++++++++++++++++++++++++++++++----------
 1 file changed, 43 insertions(+), 14 deletions(-)

diff --git a/plugins/pychrysalide/arch/vmpa.c b/plugins/pychrysalide/arch/vmpa.c
index c226224..abca73f 100644
--- a/plugins/pychrysalide/arch/vmpa.c
+++ b/plugins/pychrysalide/arch/vmpa.c
@@ -165,29 +165,27 @@ static PyObject *py_vmpa_to_str(PyObject *obj)
     PyObject *result;                       /* Chaîne à retourner          */
     vmpa2t *addr;                           /* Véritable adresse manipulée */
     phys_t physical;                        /* Position physique           */
-    virt_t virtual;                         /* Adresse virtuelle           */
     VMPA_BUFFER(phys_str);                  /* Version humaine de position */
+    virt_t virtual;                         /* Adresse virtuelle           */
     VMPA_BUFFER(virt_str);                  /* Version humaine d'adresse   */
 
     addr = &((py_vmpa_t *)obj)->addr;
 
     physical = get_phy_addr(addr);
-    virtual = get_virt_addr(addr);
-
-    vmpa2_phys_to_string(addr, MDS_UNDEFINED, phys_str, NULL);
-    vmpa2_virt_to_string(addr, MDS_UNDEFINED, virt_str, NULL);
 
-    if (physical == VMPA_NO_PHYSICAL && virtual == VMPA_NO_VIRTUAL)
-        result = PyUnicode_FromFormat("<phy=None, virt=None>");
-
-    else if (physical != VMPA_NO_PHYSICAL && virtual == VMPA_NO_VIRTUAL)
-        result = PyUnicode_FromFormat("<phy=%s, virt=None>", phys_str);
+    if (physical == VMPA_NO_PHYSICAL)
+        strncpy(phys_str, _("None"), sizeof(phys_str) - 1);
+    else
+        vmpa2_phys_to_string(addr, MDS_UNDEFINED, phys_str, NULL);
 
-    else if (physical == VMPA_NO_PHYSICAL && virtual != VMPA_NO_VIRTUAL)
-        result = PyUnicode_FromFormat("<phy=None, virt=%s>", virt_str);
+    virtual = get_virt_addr(addr);
 
+    if (virtual == VMPA_NO_VIRTUAL)
+        strncpy(virt_str, _("None"), sizeof(virt_str) - 1);
     else
-        result = PyUnicode_FromFormat("<phy=%s, virt=%s>", phys_str, virt_str);
+        vmpa2_virt_to_string(addr, MDS_UNDEFINED, virt_str, NULL);
+
+    result = PyUnicode_FromFormat("<phy=%s, virt=%s>", phys_str, virt_str);
 
     return result;
 
@@ -838,8 +836,39 @@ int convert_any_to_vmpa(PyObject *arg, void *dst)
 static PyObject *py_mrange_to_str(PyObject *obj)
 {
     PyObject *result;                       /* Chaîne à retourner          */
+    mrange_t *range;                        /* Espace mémoire à traiter    */
+    vmpa2t *addr;                           /* Véritable adresse manipulée */
+    phys_t physical;                        /* Position physique           */
+    VMPA_BUFFER(phys_str);                  /* Version humaine de position */
+    virt_t virtual;                         /* Adresse virtuelle           */
+    VMPA_BUFFER(virt_str);                  /* Version humaine d'adresse   */
+    vmpa2t length;                          /* Fausse taille physique      */
+    VMPA_BUFFER(len_str);                   /* Version humaine de longueur */
+
+    range = get_internal_mrange(obj);
+    assert(range != NULL);
+
+    addr = get_mrange_addr(range);
+
+    physical = get_phy_addr(addr);
+
+    if (physical == VMPA_NO_PHYSICAL)
+        strncpy(phys_str, _("None"), sizeof(phys_str) - 1);
+    else
+        vmpa2_phys_to_string(addr, MDS_UNDEFINED, phys_str, NULL);
+
+    virtual = get_virt_addr(addr);
+
+    if (virtual == VMPA_NO_VIRTUAL)
+        strncpy(virt_str, _("None"), sizeof(virt_str) - 1);
+    else
+        vmpa2_virt_to_string(addr, MDS_UNDEFINED, virt_str, NULL);
+
+    init_vmpa(&length, get_mrange_length(range), VMPA_NO_VIRTUAL);
+
+    vmpa2_phys_to_string(&length, MDS_UNDEFINED, len_str, NULL);
 
-    result = PyUnicode_FromFormat("<TODO!>");
+    result = PyUnicode_FromFormat("(<phy=%s, virt=%s>, +%s)", phys_str, virt_str, len_str);
 
     return result;
 
-- 
cgit v0.11.2-87-g4458