/***************************************************************************** Gestionnaire de terminal Unix: dir.h (c) Pierre Adriaans 1994 ------------------------------------------------------------------------------ Ensemble de fonctions de gestion de sous-repertoires. Elles sont integrees au gestionnaire de terminal juste pour profiter du test du malloc() et de l'emission de SIGME interceptee par le gestionnaire de clavier (voir keyboard.* pour les details). Les masques du gestionnaire sont des masques DOS!! *****************************************************************************/ #ifndef _DIR_H_ #define _DIR_H_ #include #include #include #include #include #include #include #include #define PATH_SEPARATOR_STR "/" #define PATH_SEPARATOR_CHAR '/' /* Si defini: on utilise lstat() au lieu de stat(), ce qui permet d'analyser les liens symboliques. */ #define BSD_SYMBOLIC_LINKS #define BSD_SOCKETS struct FileInfo_s { char *Name; struct stat s; int Tagged; }; typedef struct FileInfo_s FileInfo_t; struct DirList_s { FileInfo_t Info; struct DirList_s *Prec; struct DirList_s *Suivant; }; typedef struct DirList_s DirList_t; /* Macros d'identification du type de fichier */ #define IS_FIFO(x) (((x)&(S_IFMT)) == (S_IFIFO)) /* FIFO ? */ #define IS_DIR(x) (((x)&(S_IFMT)) == (S_IFDIR)) /* Repertoire ? */ #define IS_SCHR(x) (((x)&(S_IFMT)) == (S_IFCHR)) /* /dev char ? */ #define IS_SBLK(x) (((x)&(S_IFMT)) == (S_IFBLK)) /* /dev bloc ? */ #define IS_ORD(x) (((x)&(S_IFMT)) == (S_IFREG)) /* ordinaire ? */ /* Extensions BSD */ #ifdef BSD_SYMBOLIC_LINKS #define IS_SYMLINK(x) (((x)&(S_IFMT)) == (S_IFLNK)) /* Lien symbolique ? */ #else #define IS_SYMLINK(x) (0) #endif #ifdef BSD_SOCKETS #define IS_SOCKET(x) (((x)&(S_IFMT)) == (S_IFSOCK)) /* Socket ? */ #else #define IS_SOCKET(x) (0) #endif /* Macros d'identification des permissions */ #define __TEST__(x,y) (((x)&(y)) == (y)) #define SET_UID_ON(x) __TEST__(x,S_ISUID) #define SET_GID_ON(x) __TEST__(x,S_ISGID) #define STICKY_BIT(x) __TEST__(x,S_ISVTX) #define IS_RUSR(x) __TEST__(x,S_IRUSR) #define IS_WUSR(x) __TEST__(x,S_IWUSR) #define IS_XUSR(x) __TEST__(x,S_IXUSR) #define IS_RGRP(x) __TEST__(x,S_IRGRP) #define IS_WGRP(x) __TEST__(x,S_IWGRP) #define IS_XGRP(x) __TEST__(x,S_IXGRP) #define IS_ROTH(x) __TEST__(x,S_IROTH) #define IS_WOTH(x) __TEST__(x,S_IWOTH) #define IS_XOTH(x) __TEST__(x,S_IXOTH) int Dir(char *Spec,DirList_t **List); void FreeAllTheList(DirList_t **List); void AddInList(DirList_t **List,DirList_t *Enreg); void GetName(char *Str,char *Nom); void GetExt(char *Str,char *Ext); int TestPart(char *Masque,char *Str); int IsInMask(char *Masque,char *NomFichier); void GetMask(char *Spec,char *Path,char *Mask); void Analyse(char *Spec,char *Path,char *Mask); #endif