1 // 2 // DirectoryIterator_UNIX.cpp 3 // 4 // Library: Foundation 5 // Package: Filesystem 6 // Module: DirectoryIterator 7 // 8 // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. 9 // and Contributors. 10 // 11 // SPDX-License-Identifier: BSL-1.0 12 // 13 14 15 #include "Poco/DirectoryIterator_UNIX.h" 16 #if defined(POCO_VXWORKS) 17 #include "Poco/File_VX.h" 18 #else 19 #include "Poco/File_UNIX.h" 20 #endif 21 #include "Poco/Path.h" 22 23 24 namespace Poco { 25 26 DirectoryIteratorImpl(const std::string & path)27DirectoryIteratorImpl::DirectoryIteratorImpl(const std::string& path): _pDir(0), _rc(1) 28 { 29 Path p(path); 30 p.makeFile(); 31 32 #if defined(POCO_VXWORKS) 33 _pDir = opendir(const_cast<char*>(p.toString().c_str())); 34 #else 35 _pDir = opendir(p.toString().c_str()); 36 #endif 37 if (!_pDir) File::handleLastError(path); 38 39 next(); 40 } 41 42 ~DirectoryIteratorImpl()43DirectoryIteratorImpl::~DirectoryIteratorImpl() 44 { 45 if (_pDir) closedir(_pDir); 46 } 47 48 next()49const std::string& DirectoryIteratorImpl::next() 50 { 51 do 52 { 53 struct dirent* pEntry = readdir(_pDir); 54 if (pEntry) 55 _current = pEntry->d_name; 56 else 57 _current.clear(); 58 } 59 while (_current == "." || _current == ".."); 60 return _current; 61 } 62 63 64 } // namespace Poco 65