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:
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)