
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>

#include "commun.h"
#ifndef WINTST
#include <dirent.h>
#endif
#include <errno.h>
#include <limits.h> // Pour définir PATH_MAX

#include "trtdir.h"
#include "trtfile.h"
#include <string.h>

#define false 0
#define true  1

char szPathInit[300];

void InitRecurDir (char *szPath)
{
 strcpy (szPathInit, szPath);     
}

int recurdir (char * szPath, char* szDirFileExclus)
{
#ifndef WINTST
    char szErreur[300];
	DIR* dDir;
	struct dirent * dp; 
	char szDirectory[PATH_MAX];
	struct stat bufstat;
	int bResultat;

	if (szPathInit[0] == 0)
	   strcpy (szPathInit, szPath);
	if (!TstDirExclus (szPath))
	{
		dDir = opendir(szPath);

		if (dDir == 0)
		{
			sprintf (szErreur, "Erreur pendant l'ouverture répertoire %s:%d", szPath, errno);
			GenereErreur (szErreur);

			return false;
		}

		errno = 0;
		bResultat = true;
		do
		{
			 dp = readdir(dDir);
			 if (dp != NULL)
			 {
				 if (strcmp(dp->d_name, ".") != 0 && strcmp(dp->d_name, "..") != 0)
				 {
   					 strcpy (szDirectory, szPath);
					 strcat (szDirectory, "/");
					 strcat (szDirectory, dp->d_name);
					 stat(szDirectory, &bufstat);
                 
					 if (S_ISDIR(bufstat.st_mode))
					 { // Il s'agit d'un répertoire
						recurdir (szDirectory, szDirFileExclus);
					 }
					 else
					 { // C'est un fichier...
						if (S_ISREG(bufstat.st_mode))
						{
							bResultat = TraiterFichier(szDirectory, szPathInit, szDirFileExclus);
						}
						// Les autres cas sont simplement non traités
					 }
					 errno = 0;
				 }
			 }
			 else
			 {
				 if (errno != 0)
				 {
		 			sprintf (szErreur, "Erreur pendant la lecture du répertoire %s:%d", szPath, errno);
					GenereErreur (szErreur);
					closedir(dDir);
					return false;
				 }
			 }
		} while (dp != NULL && bResultat);

		closedir(dDir);
	}
#endif
	return true;
}
