/*
Fichier trtbordure.c
Auteur Bernard Chardonneau
Logiciel libre, droits d'utilisation précisés en français
dans le fichier : licence.fr
Traductions des droits d'utilisation dans les fichiers :
licence.de , licence.en , licence.es , licence.it
licence.nl , licence.pt , licence.eo , licence.eo-utf
Bibliothèque de fonctions permettant de mémoriser les bordures
de sections des messages en mode multipart et de vérifier si on
est positionné sur l'une de ces bordures
*/
#include <stdio.h>
#include <stdlib.h>
#include "buflect.h"
#include "trtbordure.h"
/* récupère la valeur du champ boundary d'un mail en mode
multipart et la recopie dans bordure [nbordures + 1]
retourne 1 si champ boundary trouvé dans la ligne, 0 sinon */
int mem_boundary ()
{
int i, j; // compteurs
// initialisation
i = 1;
// chercher le mot boundary dans la ligne et sortir s'il n'y est pas
while (tolower (buf_lect [i]) != 'b' || tolower (buf_lect [i+1]) != 'o')
if (! buf_lect [++i])
return (0);
// se positionner après le caractère =
while (buf_lect [i++] != '=')
if (! buf_lect [i])
return (0);
// vérifier si l'on peut encore mémoriser une bordure
if (nbordures >= max_bordures)
{
// "Trop de sections dans le mail"
// "Recompiler avec max_bordures plus grand dans trtbordure.h"
affiche_err ("DEBORD_SECTIONS-1");
affiche_err ("DEBORD_SECTIONS-2");
exit (-1);
}
// sauter les blancs après le = s'il y en a
if (buf_lect [i] == ' ')
i++;
// sauter également le " s'il y est
if (buf_lect [i] == '"')
i++;
// initialisation
j = 0;
// copie de la bordure
while (buf_lect [i] != '"' && buf_lect [i] != '\0')
bordure [nbordures][j++] = buf_lect [i++];
// terminaison de la chaine et prise en compte de la nouvelle bordure
bordure [nbordures++][j] = '\0';
// on a trouvé le champ boundary
return (1);
}
/* indique si la ligne courante représente une bordure de section */
int surbordure ()
{
int i; // compteur
// si aucune bordure mémorisée
if (! nbordures)
// "Erreur système : appel de surbordure() sans bordure mémorisée"
errfatale ("AUCUNE_BORDURE");
// une bordure commence par 2 caractères -
if (buf_lect [0] != '-' || buf_lect [1] != '-')
return (0);
// initialisation boucle de comparaison
i = 0;
// comparer les caractères de la ligne à ceux de la dernière bordure
while (buf_lect [i+2] == bordure [nbordures-1][i])
{
// terminé si aucune différence trouvée en fin de ligne
if (bordure [nbordures-1][i] == '\0')
return (1);
else
// sinon, passer aux caractères suivants
i++;
}
// différence trouvée : vérifier si ce sont des -- après la bordure
if (bordure [nbordures-1][i] == '\0' && buf_lect [i+2] == '-')
{
// oui : on supprime cette bordure de la liste
nbordures --;
return (1);
}
else
// non : bordure non trouvée
return (0);
}