#include #include #include "ostool.h" #include "commun.h" #ifdef TEST #include static void near dump(char *name, int nbf) { printf ("trouve %d-%s\n",nbf,name); } #else #define dump(x,y) #endif static int fct( const FILEINFO *info, const char *, const char *, int nbf) { int ok = 0; dump(info->name,nbf); if (nbf == 1){ ok = 1; }else if (info->type == FILETYPE_REG){ ok = 1; }else if (info->type == FILETYPE_DIR && strcmp(info->name,".")!=0 && strcmp(info->name,"..")!=0){ ok = 1; } return (ok); } /* Retourne != 0 si le r‚pertoire est vide (pas de fichier, pas de sous-repertoire) ou ne contient que des fichiers d‚finie par exclu[] Si exclu == NULL, le r‚pertoire doit ˆtre complŠtement vide Ne tient compte que des fichiers */ export int dir_empty ( const char *path, const char *exclu[], /* wildcard … exclure, table termin‚ par un NULL */ /* ou NULL */ int nbsub) /* == 0 : ne cherche pas dans les sous-r‚pertoire */ /* != 0 : Cherche jusqu'… la profondeur sp‚cifi‚ */ { int ret = 1; static const char *tbnull[]={NULL}; static const char *tball[]={WILD_ALLFILE,NULL}; if (exclu == NULL) exclu = tbnull; if (dir_gen(path,tball,exclu,nbsub,fct,0)>0){ ret = 0; } return (ret); } #ifdef TEST #include static void tst (char *str, int nbsub) { static char *tball[]={"*.*",NULL}; printf (":%s[-NULL]: -> %d\n",str,dir_empty(str,NULL,nbsub)); printf (":%s[-*.*]: -> %d\n",str,dir_empty(str,tball,nbsub)); } void main(void) { tst ("\\prj",2); tst ("\\prj\\",2); tst ("e:\\usr\\pierre",0); tst ("e:\\usr\\pierre",1); tst ("e:\\usr\\pierre",2); tst ("e:\\usr\\pierre",10); } #endif