trafi

Transducteurs finis
git clone git://git.asteride.xyz/trafi.git
Journaux | Fichiers | Références

commit dcbe1426ea6217b983631500641676c60077c719
parent d69c685f444f595e39d08cec9d6614cb0a5e056c
Auteur: Loïc Daignault-Pichette <loic@asteride.xyz>
Date:   Fri, 10 Apr 2026 21:19:31 -0400

Aligner les segments du fichier tfd

Diffstat:
Mtfd.c | 11++++++++++-
1 fichier modifié, 10 insertions(+), 1 suppression(-)

diff --git a/tfd.c b/tfd.c @@ -13,6 +13,9 @@ /* Renvoie le maximum de deux nombres. */ #define MAX(n1, n2) ((n1) > (n2) ? (n1) : (n2)) +/* Aligner un pointeur p sur n octets. */ +#define ALIGNER(p, n) (((p) + ((n) - 1)) & -(n)) + /* Écrire la valeur val dans le tampon tp, en préservant le boutisme de * l’hôte. ecrire_16() écrit deux octets et ecrire_32() en écrit 4. * Renvoie un pointer vers l’octet suivant le dernier écrit. */ @@ -65,7 +68,7 @@ tfd_ecrire(FILE *f, struct tfm *tfm) assert(f); assert(tfm); - dec = TFD_ENTETE_TLL; + dec = ALIGNER(TFD_ENTETE_TLL, 8); if (fseek(f, dec, SEEK_SET) != 0) return -1; @@ -91,6 +94,9 @@ tfd_ecrire(FILE *f, struct tfm *tfm) pent = ecrire_32(pent, lngr); dec += lngr; + dec = ALIGNER(dec, 2); + if (fseek(f, dec, SEEK_SET) != 0) + return -1; /* Écrire le segmenteur. */ if ((te = segmenteur(tfm)) == NULL) @@ -105,6 +111,9 @@ tfd_ecrire(FILE *f, struct tfm *tfm) pent = ecrire_32(pent, lngr); dec += lngr; + dec = ALIGNER(dec, 4); + if (fseek(f, dec, SEEK_SET) != 0) + return -1; /* Écrire le transducteur. */ if ((te = transducteur(tfm)) == NULL)