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 *); |