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)27 DirectoryIteratorImpl::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()43 DirectoryIteratorImpl::~DirectoryIteratorImpl()
44 {
45 	if (_pDir) closedir(_pDir);
46 }
47 
48 
next()49 const 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