diff options
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/vmpa.c | 44 | ||||
| -rw-r--r-- | src/arch/vmpa.h | 5 | 
2 files changed, 19 insertions, 30 deletions
| diff --git a/src/arch/vmpa.c b/src/arch/vmpa.c index c32c836..27262d1 100644 --- a/src/arch/vmpa.c +++ b/src/arch/vmpa.c @@ -34,9 +34,6 @@  #include <i18n.h> -#include "../common/io.h" - -  /* ---------------------- DEFINITION D'UNE POSITION EN MEMOIRE ---------------------- */ @@ -347,9 +344,8 @@ phys_t compute_vmpa_diff(const vmpa2t *a, const vmpa2t *b)  /******************************************************************************  *                                                                             * -*  Paramètres  : addr  = élément à venir lire. [OUT]                          * -*                fd    = flux ouvert en lecture pour l'importation.           * -*                flags = éventuelles options d'envoi supplémentaires.         * +*  Paramètres  : addr = élément à venir lire. [OUT]                           * +*                pbuf = paquet de données où venir puiser les infos.          *  *                                                                             *  *  Description : Lit la définition d'une adresse depuis un flux réseau.       *  *                                                                             * @@ -359,31 +355,24 @@ phys_t compute_vmpa_diff(const vmpa2t *a, const vmpa2t *b)  *                                                                             *  ******************************************************************************/ -bool recv_vmpa(vmpa2t *addr, int fd, int flags) +bool unpack_vmpa(vmpa2t *addr, packed_buffer *pbuf)  { -    virt_t val64;                           /* Valeur sur 64 bits          */ -    bool status;                            /* Bilan d'une réception       */ - -    status = safe_recv(fd, &val64, sizeof(uint64_t), MSG_WAITALL | flags); -    if (!status) return false; - -    addr->physical = be64toh(val64); +    bool result;                            /* Bilan à retourner           */ -    status = safe_recv(fd, &val64, sizeof(uint64_t), MSG_WAITALL | flags); -    if (!status) return false; +    result = extract_packed_buffer(pbuf, (uint64_t *)&addr->physical, sizeof(uint64_t), true); -    addr->virtual = be64toh(val64); +    if (result) +        result = extract_packed_buffer(pbuf, (uint64_t *)&addr->virtual, sizeof(uint64_t), true); -    return true; +    return result;  }  /******************************************************************************  *                                                                             * -*  Paramètres  : addr  = élément à venir écrire.                              * -*                fd    = flux ouvert en écriture pour l'exportation.          * -*                flags = éventuelles options d'envoi supplémentaires.         * +*  Paramètres  : addr = élément à venir écrire.                               * +*                pbuf = paquet de données où venir inscrire les infos.        *  *                                                                             *  *  Description : Ecrit la définition d'une adresse dans un flux réseau.       *  *                                                                             * @@ -393,17 +382,16 @@ bool recv_vmpa(vmpa2t *addr, int fd, int flags)  *                                                                             *  ******************************************************************************/ -bool send_vmpa(const vmpa2t *addr, int fd, int flags) +bool pack_vmpa(const vmpa2t *addr, packed_buffer *pbuf)  { -    bool status;                            /* Bilan d'une émission        */ +    bool result;                            /* Bilan à retourner           */ -    status = safe_send(fd, (uint64_t []) { htobe64(addr->physical) }, sizeof(uint64_t), MSG_MORE | flags); -    if (!status) return false; +    result = extend_packed_buffer(pbuf, (uint64_t *)&addr->physical, sizeof(uint64_t), true); -    status = safe_send(fd, (uint64_t []) { htobe64(addr->virtual) }, sizeof(uint64_t), flags); -    if (!status) return false; +    if (result) +        result = extend_packed_buffer(pbuf, (uint64_t *)&addr->virtual, sizeof(uint64_t), true); -    return true; +    return result;  } diff --git a/src/arch/vmpa.h b/src/arch/vmpa.h index 6305f79..3bfb40c 100644 --- a/src/arch/vmpa.h +++ b/src/arch/vmpa.h @@ -33,6 +33,7 @@  #include "archbase.h"  #include "../common/cpp.h" +#include "../common/packed.h"  #include "../common/sqlite.h" @@ -122,10 +123,10 @@ void align_vmpa(vmpa2t *, phys_t);  phys_t compute_vmpa_diff(const vmpa2t *, const vmpa2t *);  /* Lit la définition d'une adresse depuis un flux réseau. */ -bool recv_vmpa(vmpa2t *, int, int); +bool unpack_vmpa(vmpa2t *, packed_buffer *);  /* Ecrit la définition d'une adresse dans un flux réseau. */ -bool send_vmpa(const vmpa2t *, int, int); +bool pack_vmpa(const vmpa2t *, packed_buffer *);  /* Transforme une adresse physique en chaîne de caractères. */  char *vmpa2_phys_to_string(const vmpa2t *, MemoryDataSize, char [VMPA_MAX_LEN], size_t *); | 
