Il faut deja que tu testes les retours d'erreur des fonctions opendir() et stat(). En effet, en cas d'erreur, ce qu'elles sont censées renvoyer ne sera pas initialisé.
Tu vas donc te retrouver avec un pointeur NULL pour opendir() (d'où coredump), ou une structure aléatoire pour stat() (d'où récursion là où il faut pas.)
Donc, rajoute par exemple ces includes
#include <error.h>
#include <errno.h>
Et modifie ton code:
d = opendir(directory);
if (d == NULL){
error(0, errno, "opendir %s", directory);
return 1;
}
[...]
A ce moment là, en lançant ton test, tu verras mieux ce qu'il se passe, et il se terminera sans planter (et sans rien faire, aussi).
L'erreur de base de stat() c'est : "no such file or directory"
Alors apparemment, l'erreur c'est que tu appeles stat() avec comme paramètre le nom du fichier pris directement dans le résultat de readdir(), et c'est un nom local au répertoire, stat() va donc le chercher dans le repertoire courant (et non pas dans le sous-repertoire). Il faut que tu construises le chemin complet, au moins relatif (en collant "directory/" avant)
# Verifier les retours d'erreur
Posté par daggett . En réponse au message Récursivité qui ne marche pas avec "stat()". Évalué à 3.
Tu vas donc te retrouver avec un pointeur NULL pour opendir() (d'où coredump), ou une structure aléatoire pour stat() (d'où récursion là où il faut pas.)
Donc, rajoute par exemple ces includes
#include <error.h>
#include <errno.h>
Et modifie ton code:
A ce moment là, en lançant ton test, tu verras mieux ce qu'il se passe, et il se terminera sans planter (et sans rien faire, aussi).
L'erreur de base de stat() c'est : "no such file or directory"
Alors apparemment, l'erreur c'est que tu appeles stat() avec comme paramètre le nom du fichier pris directement dans le résultat de readdir(), et c'est un nom local au répertoire, stat() va donc le chercher dans le repertoire courant (et non pas dans le sous-repertoire). Il faut que tu construises le chemin complet, au moins relatif (en collant "directory/" avant)