diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2014-08-26 22:41:12 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2014-08-26 22:41:12 (GMT) | 
| commit | 10b620c3f7d6a9e78aa1e9d6dabef466d0b9e3af (patch) | |
| tree | 3324503e81bdbc83611aa52b4df83b51090d7104 /src/arch | |
| parent | 90a79bf4c2c21715e5ef9d8a370928d218c08784 (diff) | |
Looked for coordinates using the new addresses definitions.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@394 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/vmpa.c | 87 | ||||
| -rw-r--r-- | src/arch/vmpa.h | 9 | 
2 files changed, 96 insertions, 0 deletions
| diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c index edff789..297a0ca 100644 --- a/src/arch/vmpa.c +++ b/src/arch/vmpa.c @@ -26,6 +26,7 @@  #include <inttypes.h>  #include <malloc.h> +#include <stdlib.h>  #include <string.h> @@ -174,6 +175,46 @@ int cmp_vmpa_by_virt(const vmpa2t *a, const vmpa2t *b)  /******************************************************************************  *                                                                             * +*  Paramètres  : a = première définition à analyser.                          * +*                b = seconde définition à analyser.                           * +*                                                                             * +*  Description : Compare deux localisations selon leurs parties définies.     * +*                                                                             * +*  Retour      : Bilan de la comparaison : -1, 0 ou 1 (-1 par défaut).        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +int cmp_vmpa(const vmpa2t *a, const vmpa2t *b) +{ +    int result;                             /* Bilan à retourner           */ +    bool half;                              /* Comparaison débutée         */ + +    result = -1; + +    half = false; + +    if (a->physical != VMPA_NO_PHYSICAL && b->physical != VMPA_NO_PHYSICAL) +    { +        result = cmp_vmpa_by_phy(a, b); +        half = true; +    } + +    if (a->virtual != VMPA_NO_VIRTUAL && b->virtual != VMPA_NO_VIRTUAL +        && (!half || (half && result == 0))) +    { +        result = cmp_vmpa_by_virt(a, b); +    } + +    return result; + +} + + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : addr = élément à modifier.                                   *  *                qty  = quantité d'unités de décallage.                       *  *                                                                             * @@ -389,3 +430,49 @@ char *vmpa2_virt_to_string(const vmpa2t *addr, MemoryDataSize msize, char buffer      return buffer;  } + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : buffer = chaîne de caractères à consulter.                   * +*                                                                             * +*  Description : Transforme une chaîne de caractères en position physique.    * +*                                                                             * +*  Retour      : Adresse obtenue.                                             * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +vmpa2t *string_to_vmpa_phy(const char *buffer) +{ +    off_t physical;                         /* Position à retrouver        */ + +    physical = strtoull(buffer, NULL, 16); + +    return make_vmpa(physical, VMPA_NO_VIRTUAL); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : buffer = chaîne de caractères à consulter.                   * +*                                                                             * +*  Description : Transforme une chaîne de caractères en adresse virtuelle.    * +*                                                                             * +*  Retour      : Adresse obtenue.                                             * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +vmpa2t *string_to_vmpa_virt(const char *buffer) +{ +    uint64_t virtual;                       /* Adresse à retrouver         */ + +    virtual = strtoull(buffer, NULL, 16); + +    return make_vmpa(VMPA_NO_PHYSICAL, virtual); + +} diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h index d89c290..85ff6b4 100644 --- a/src/arch/vmpa.h +++ b/src/arch/vmpa.h @@ -74,6 +74,9 @@ int cmp_vmpa_by_phy(const vmpa2t *, const vmpa2t *);  /* Compare entre elles deux adresses virtuelles. */  int cmp_vmpa_by_virt(const vmpa2t *, const vmpa2t *); +/* Compare deux localisations selon leurs parties définies. */ +int cmp_vmpa(const vmpa2t *, const vmpa2t *); +  #define are_equal(a, b) \      (cmp_vmpa_by_phy(a, b) == 0 && cmp_vmpa_by_virt(a, b) == 0) @@ -101,6 +104,12 @@ char *vmpa2_phys_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN],  /* Transforme une adresse virtuelle en chaîne de caractères. */  char *vmpa2_virt_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN], size_t *); +/* Transforme une chaîne de caractères en position physique. */ +vmpa2t *string_to_vmpa_phy(const char *); + +/* Transforme une chaîne de caractères en adresse virtuelle. */ +vmpa2t *string_to_vmpa_virt(const char *); +  #endif  /* _ARCH_VMPA_H */ | 
