| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 
 | int listerDossier(char *path, Fichier *list_fichier)
{
	// Declaration
	const char *regex="^\\.[[:alnum:]]+"; // Expression permettant de supprimer les fichiers caches
	DIR *dir;
	Fichier *dossiers;
	int d_i;
	int i,j;
	int nb_fichier= 0;
	regex_t preg;
	struct dirent *ptrent;
	struct stat st;
 
	// Allocation
	dossiers= (Fichier *)malloc(NB_FICHIER_MAX*BUFFER*sizeof(Fichier));
 
	// Ouverture du dossier
	if(stat(path, &st) == 0)
	{
		if(S_ISDIR(st.st_mode))
		{// Evite le favicon.ico
			if((dir= opendir(path)) == NULL)
			{
				perror("Dossier inexistant ou non autorise en lecture\n");
				exit(errno);
			}
			d_i= 0;
			while((ptrent= readdir(dir)) != NULL)
			{
				// Prend le chemin absolu du fichier
				char abs[254];
				sprintf(abs, "%s%s", path, ptrent->d_name);
 
				if((stat(abs, &st)) < 0)
				{
					perror("Erreur de stat\n");
					exit(errno);
				}
				if((regcomp(&preg, regex, REG_EXTENDED | REG_NOSUB)) == 0)
				{// Compilation de la regex
					if((regexec(&preg,ptrent->d_name,0,NULL,0)) != 0)
					{// Execution de la regex
						regfree(&preg);
						if((strcmp(ptrent->d_name, "..")) == 0)
						{// Repertoire parent en tete de liste
							list_fichier[0].nom= ptrent->d_name;
							list_fichier[0].type= 'p';
						}
						else if((strcmp(ptrent->d_name, ".")) == 0)
						{ /* On enleve le repertoire courant */ }
						else if(S_ISDIR(st.st_mode))
						{
							dossiers[d_i].nom= ptrent->d_name;
							dossiers[d_i].type= 'd';
							dossiers[d_i].taille= st.st_size;
							dossiers[d_i].modif= st.st_mtime;
							d_i++;
							nb_fichier++;
						}
					}
				}
			}
			closedir(dir);
		}
	}
	printf("Nombre d'elements: %d \nNombre de dossiers: %d\n", nb_fichier, d_i);
 
	// Triage des dossiers et fichiers par ordre alphabetique
	qsort(dossiers, (size_t) d_i, sizeof(dossiers[0]), compare);
 
	// Rajout des dossiers et fichiers dans le pointeur final
	for(i=1, j=0; i <= d_i; i++, j++)
	{
		list_fichier[i].nom= dossiers[j].nom;
		list_fichier[i].type= dossiers[j].type;
		list_fichier[i].modif= dossiers[j].modif;
	}
	// Liberation de l'espace memoire
	free(dossiers);
 
	return nb_fichier;
} | 
Partager