/*
buffer = pointeur sur la chaine source.
dest = pointeur sur la chaine destinatrice qui recevra la ligne.
buffer_size = taille en octet de la chaine source (buffer).
line = la ligne voulu. 0 EST CONSIDÉRÉ COMME LA PREMIÈRE LIGNE.
La fonction ne recherche pas les 0 finals. Elle ne se fit que sur buffer_size
pour être sûr de ne pas déborder sur les zones mémoire avoisinantes donc
soyez sûr d'entrer la bonne taille.
*/
void GetLine (char *buffer, char *dest, int buffer_size, int line)
{
char *c = dest; // Pointeur sur la chaine destinatrice
// Si la valeur de line est plus petite que 0 ou si buffer ne pointe sur rien
// ou encore si buffer_size est plus petit ou égal à 0...
if(line < 0 || buffer == 0 || buffer_size <= 0)
return; // On quitte
// On va se positionner sur la ligne voulu
while(line > 0) // 0 EST CONSIDÉRÉ COMME LA PREMIERE LIGNE
{
while(*buffer != '\n') // On cherche les retours à la ligne
{
// Si on atteind la fin de la chaine
if(buffer_size <= 0)
return; // On quitte car la ligne n'est pas présente
buffer++; buffer_size--;
}
// On incrémente le pointeur pour sauter le retour à la ligne trouvé
buffer++;
line--; buffer_size--;
}
// On extrait la ligne de buffer vers dest
while(*buffer != '\n') // Roule jusqu'au prochain retour à la ligne
{
// Si entre temps, on atteind la fin de la chaine, on arrete l'extraction ici
if(buffer_size <= 0)
break;
*c = *buffer;
c++; buffer++; buffer_size--;
}
/*
Vue qu'il s'agit ici d'une chaine de caractère, on ajoute un 0 final.
SOYEZ SUR QU'IL Y AI ASSEZ DE MEMOIRE POUR LA CHAINE DESTINATRICE!!!
Évidament, si on ne veut pas de 0 final, il faudra créé une variable qui
sera incrémenté à chaque ajoue de caractère dans dest et retourné à la fin
de la fonction. Savoir le nombre de valeur écrite dans un tampon est
essentiel pour éviter les débordements tampon potentiel !
*/
*c = 0;
}