/******************************************************** * File: jbdir.c * Created at Sun Jan 28 22:10:25 MSK 2001 by raorn // raorn@binec.ru * Directory reading stuff * $Id: jbdir.c,v 1.6 2002/02/10 23:36:59 raorn Exp $ *******************************************************/ #include #include #include #include #ifdef HAVE_DIRENT_H # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif # ifdef HAVE_SYS_DIR_H # include # endif # ifdef HAVE_NDIR_H # include # endif #endif #ifdef HAVE_SYS_STAT_H # include #endif #include "jblist.h" #include "mystrncpy.h" #include "path.h" #include "jbdir.h" bool ReadDir(uchar * dirname, struct jbList *filelist, bool(*acceptfunc) (uchar * filename)) { DIR *dir; struct dirent *dirent; struct FileEntry *tmp; char buf[200]; jbNewList(filelist); if (!(dir = opendir(dirname))) return (FALSE); while ((dirent = readdir(dir))) { bool add; if (!acceptfunc) add = TRUE; else add = (*acceptfunc) (dirent->d_name); MakeFullPath(dirname, dirent->d_name, buf, 200); #ifdef __MINGW32__ if (add) { int hdl; struct _finddata_t ffblk; hdl = _findfirst(buf,&ffblk); if(ffblk.attrib&_A_HIDDEN) add = FALSE; _findclose(hdl); } #endif /* __MINGW32__ */ if (add) { struct stat st; if (stat(buf, &st) == 0) { if (!(tmp=(struct FileEntry *) calloc(1, sizeof(struct FileEntry)))) { jbFreeList(filelist); closedir(dir); return (FALSE); } mystrncpy(tmp->Name, dirent->d_name, 100); tmp->Size = st.st_size; tmp->Date = st.st_mtime; jbAddNode(filelist, (struct jbNode *) tmp); } } } closedir(dir); return (TRUE); } bool ScanDir(uchar * dirname, void (*func) (uchar * file)) { DIR *dir; struct dirent *dirent; if (!(dir = opendir(dirname))) return (FALSE); while ((dirent = readdir(dir))) (*func) (dirent->d_name); closedir(dir); return (TRUE); } struct FileEntry *GetFileEntry(uchar * file) { struct stat st; struct FileEntry *tmp; if (stat(file, &st) != 0) return (FALSE); if (!(tmp=(struct FileEntry *) calloc(1, sizeof(struct FileEntry)))) return (FALSE); mystrncpy(tmp->Name, GetFilePart(file), 100); tmp->Size = st.st_size; tmp->Date = st.st_mtime; return (tmp); }