Return Type | Function name | Arguments |
---|---|---|
hzEcode | ReadDir | (hzVect<hzDirent>&,hzVect<hzDirent>&,const char*,const char*,) |
Declared in file: hzDirectory.h
Defined in file : hzDirectory.cpp
Function Logic:
Function body:
hzEcode ReadDir (hzVect<hzDirent>& Dirs, hzVect<hzDirent>& Files, const char* cpPath, const char* cpCriteria) { _hzfunc("ReadDir(1)") ; FSTAT fs ; dirent* pDE ; DIR* pDir ; hzDirent meta ; hzString thePath ; hzString teststr ; hzString de_name ; hzEcode rc ; /* ** ** Move thru current directory and read files and sub directories ** */ Dirs.Clear() ; Files.Clear() ; rc = GetAbsPath(thePath, cpPath) ; if (rc != E_OK) return hzwarn(rc, "Could not obtain absolute path for (%s)", cpPath) ; if (lstat(*thePath, &fs) < 0) return E_NOTFOUND ; if (!S_ISDIR(fs.st_mode)) return hzwarn(E_TYPE, "Given path (%s) is not a directory", cpPath) ; pDir = opendir(*thePath) ; if (!pDir) return hzwarn(E_OPENFAIL, "Directory (%s) could not be opened", cpPath) ; for (; pDE = readdir(pDir) ;) { if (pDE->d_name[0]== ''.''&&(pDE->d_name[1]== 0|| (pDE->d_name[1]== ''.''&&pDE->d_name[2]== 0))) continue ; if (cpCriteria) { if (!FormCheckCstr(pDE->d_name, cpCriteria)) continue ; } if (cpPath && cpPath[0]) { teststr = cpPath ; teststr += "/" ; teststr += pDE->d_name ; } else teststr = pDE->d_name ; if (stat(*teststr, &fs) == -1) { closedir(pDir) ; hzerr(E_CORRUPT, "Could not stat directory entry %s", *teststr) ; return E_CORRUPT ; } if (S_ISDIR(fs.st_mode)) { de_name = pDE->d_name ; meta.InitStat(thePath, de_name, fs) ; Dirs.Add(meta) ; continue ; } if (S_ISREG(fs.st_mode)) { de_name = pDE->d_name ; meta.InitStat(thePath, de_name, fs) ; Files.Add(meta) ; continue ; } } closedir(pDir) ; return E_OK ; }