fixing all the warnings

This commit is contained in:
Mylloon 2021-12-25 11:59:03 +01:00
parent 80b4867243
commit 21f8173d86
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 21 additions and 18 deletions

36
arbre.c
View file

@ -113,41 +113,41 @@ void enteteVersFichier(Entete *enteteListe, int nombreLettresDansFichier, int lo
} }
void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nombreLettresDansFichier) { void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nombreLettresDansFichier) {
int buffer = 0, tailleBuffer = 0; int buffer = 0, tailleBufferActuelle = 0, sizeOfInt = sizeof(int) * 8; // *8 car "long unsigned int" d'après GCC
char lettre = 'a'; // initalisation pour éviter un warning char lettre = 'a'; // initalisation pour éviter un warning
while (lettre != EOF) { while (lettre != EOF) {
lettre = fgetc(entree); lettre = fgetc(entree);
Entete *entete = NULL; // rappel: entete représente une liste de caractères Entete entete = recuperationLettre(lettre, enteteListe, nombreLettresDansFichier); // rappel: entete représente une liste de caractères
for(int i = 0; i < nombreLettresDansFichier; i++) if (tailleBufferActuelle + entete.longueur >= sizeOfInt) { // écriture dans le fichier
if(enteteListe[i].lettre == lettre) {
entete = &enteteListe[i];
break;
}
if (entete == NULL) {
printf("Incohérence entre l'entête généré et le fichier...");
exit(1);
}
if (tailleBuffer + (*entete).longueur >= sizeof(int)) { // écriture dans le fichier
// Modification du buffer // Modification du buffer
int aAjouter = sizeof(int) - tailleBuffer; int aAjouter = sizeOfInt - tailleBufferActuelle;
buffer <<= aAjouter; buffer <<= aAjouter;
// Ajout de la lettre // Ajout de la lettre
int tmp = (*entete).code >> ((*entete).longueur - aAjouter); int tmp = entete.code >> (entete.longueur - aAjouter);
(*entete).longueur -= aAjouter; entete.longueur -= aAjouter;
// Écriture dans le fichier ici
buffer |= tmp; buffer |= tmp;
fwrite(&buffer, sizeof(int), 1, sortie); fwrite(&buffer, sizeof(int), 1, sortie);
buffer = 0, tailleBuffer = 0; // reset du buffer buffer = 0, tailleBufferActuelle = 0; // reset du buffer
} }
} }
if (tailleBuffer > 0) { if (tailleBufferActuelle > 0) {
buffer <<= sizeof(int) - tailleBuffer; // décalage vers la gauche buffer <<= sizeOfInt - tailleBufferActuelle; // décalage vers la gauche
fwrite(&buffer, sizeof(int), 1, sortie); fwrite(&buffer, sizeof(int), 1, sortie);
} }
} }
Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier) {
for (int i = 0; i < nombreLettresDansFichier; i++)
if (enteteListe[i].lettre == lettre)
return enteteListe[i];
exit(1);
}
void decompression(FILE *entree, FILE *sortie) { void decompression(FILE *entree, FILE *sortie) {
/* fclose temporaire pour supprimer les warnings */ /* fclose temporaire pour supprimer les warnings */
fclose(entree); fclose(entree);

View file

@ -51,4 +51,7 @@ void enteteVersFichier(Entete *enteteListe, int nombreLettresDansFichier, int lo
// Écrit les données une fois traduite après l'algorithme de Huffman dans le fichier de sortie. // Écrit les données une fois traduite après l'algorithme de Huffman dans le fichier de sortie.
void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nombreLettresDansFichier); void huffmanVersFichier(FILE *entree, FILE *sortie, Entete *enteteListe, int nombreLettresDansFichier);
// Récupère les infos d'une lettre depuis l'entête
Entete recuperationLettre(char lettre, Entete *enteteListe, int nombreLettresDansFichier);
#endif #endif