Merge "Report tests using Draw*BaseVertex as NotSupported" am: f96636fdfa
[platform/upstream/VK-GL-CTS.git] / framework / delibs / decpp / deDirectoryIterator.cpp
1 /*-------------------------------------------------------------------------
2  * drawElements Quality Program Tester Core
3  * ----------------------------------------
4  *
5  * Copyright 2014 The Android Open Source Project
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *//*!
20  * \file
21  * \brief Directory iterator.
22  *//*--------------------------------------------------------------------*/
23
24 #include "deDirectoryIterator.hpp"
25 #include "deString.h"
26
27 #if (DE_DIRITER == DE_DIRITER_WIN32)
28 #       include <direct.h> /* _chdir() */
29 #       include <io.h> /* _findfirst(), _findnext() */
30 #endif
31
32 namespace de
33 {
34
35 #if (DE_DIRITER == DE_DIRITER_WIN32)
36
37 DirectoryIterator::DirectoryIterator (const FilePath& path)
38         : m_path(FilePath::normalize(path))
39 {
40         DE_CHECK_RUNTIME_ERR(m_path.exists());
41         DE_CHECK_RUNTIME_ERR(m_path.getType() == FilePath::TYPE_DIRECTORY);
42
43         m_handle        = _findfirst32((std::string(m_path.getPath()) + "/*").c_str(), &m_fileInfo);
44         m_hasItem       = m_handle != -1;
45
46         skipCurAndParent();
47 }
48
49 DirectoryIterator::~DirectoryIterator (void)
50 {
51         if (m_handle != -1)
52                 _findclose(m_handle);
53 }
54
55 bool DirectoryIterator::hasItem (void) const
56 {
57         return m_hasItem;
58 }
59
60 FilePath DirectoryIterator::getItem (void) const
61 {
62         DE_ASSERT(hasItem());
63         return FilePath::join(m_path, m_fileInfo.name);
64 }
65
66 void DirectoryIterator::next (void)
67 {
68         m_hasItem = (_findnext32(m_handle, &m_fileInfo) == 0);
69         skipCurAndParent();
70 }
71
72 void DirectoryIterator::skipCurAndParent (void)
73 {
74         while (m_hasItem && (deStringEqual(m_fileInfo.name, "..") || deStringEqual(m_fileInfo.name, ".")))
75                 m_hasItem = (_findnext32(m_handle, &m_fileInfo) == 0);
76 }
77
78 #elif (DE_DIRITER == DE_DIRITER_POSIX)
79
80 DirectoryIterator::DirectoryIterator (const FilePath& path)
81         : m_path        (FilePath::normalize(path))
82         , m_handle      (DE_NULL)
83         , m_curEntry(DE_NULL)
84 {
85         DE_CHECK_RUNTIME_ERR(m_path.exists());
86         DE_CHECK_RUNTIME_ERR(m_path.getType() == FilePath::TYPE_DIRECTORY);
87
88         m_handle = opendir(m_path.getPath());
89         DE_CHECK_RUNTIME_ERR(m_handle);
90
91         // Find first entry
92         next();
93 }
94
95 DirectoryIterator::~DirectoryIterator (void)
96 {
97         closedir(m_handle);
98 }
99
100 bool DirectoryIterator::hasItem (void) const
101 {
102         return (m_curEntry != DE_NULL);
103 }
104
105 FilePath DirectoryIterator::getItem (void) const
106 {
107         DE_ASSERT(hasItem());
108         return FilePath::join(m_path, m_curEntry->d_name);
109 }
110
111 void DirectoryIterator::next (void)
112 {
113         do
114         {
115                 m_curEntry = readdir(m_handle);
116         } while (m_curEntry && (deStringEqual(m_curEntry->d_name, "..") || deStringEqual(m_curEntry->d_name, ".")));
117 }
118
119 #endif
120
121 } // de