comparison C++/modules/Directory/Directory.cpp @ 341:83ef77841ff1

Directory: dots are not listed by default
author David Demelier <markand@malikania.fr>
date Mon, 30 Mar 2015 09:21:01 +0200
parents 0b576ee64d45
children 8846b46fc435
comparison
equal deleted inserted replaced
340:1dc2e1adf247 341:83ef77841ff1
68 68
69 if (handle == nullptr) 69 if (handle == nullptr)
70 throw std::runtime_error(systemError()); 70 throw std::runtime_error(systemError());
71 71
72 do { 72 do {
73 Entry entry; 73 DirectoryEntry entry;
74 74
75 entry.name = fdata.cFileName; 75 entry.name = fdata.cFileName;
76 if ((flags & Directory::NotDot) && entry.name == ".") 76 if (entry.name == "." && !(flags & Directory::Dot))
77 continue; 77 continue;
78 if ((flags & Directory::NotDotDot) && entry.name == "..") 78 if (entry.name == ".." && !(flags & Directory::DotDot))
79 continue; 79 continue;
80 80
81 switch (fdata.dwFileAttributes) { 81 switch (fdata.dwFileAttributes) {
82 case FILE_ATTRIBUTE_DIRECTORY: 82 case FILE_ATTRIBUTE_DIRECTORY:
83 entry.type = Dir; 83 entry.type = DirectoryEntry::Dir;
84 break; 84 break;
85 case FILE_ATTRIBUTE_NORMAL: 85 case FILE_ATTRIBUTE_NORMAL:
86 entry.type = File; 86 entry.type = DirectoryEntry::File;
87 break; 87 break;
88 case FILE_ATTRIBUTE_REPARSE_POINT: 88 case FILE_ATTRIBUTE_REPARSE_POINT:
89 entry.type = Link; 89 entry.type = DirectoryEntry::Link;
90 break; 90 break;
91 default: 91 default:
92 break; 92 break;
93 } 93 }
94 94
110 110
111 while ((ent = readdir(dp)) != nullptr) { 111 while ((ent = readdir(dp)) != nullptr) {
112 Entry entry; 112 Entry entry;
113 113
114 entry.name = ent->d_name; 114 entry.name = ent->d_name;
115 if ((flags & Directory::NotDot) && entry.name == ".") 115 if (entry.name == "." && !(flags & Directory::Dot))
116 continue; 116 continue;
117 if ((flags & Directory::NotDotDot) && entry.name == "..") 117 if (entry.name == ".." && !(flags & Directory::DotDot))
118 continue; 118 continue;
119 119
120 switch (ent->d_type) { 120 switch (ent->d_type) {
121 case DT_DIR: 121 case DT_DIR:
122 entry.type = Dir; 122 entry.type = DirectoryEntry::Dir;
123 break; 123 break;
124 case DT_REG: 124 case DT_REG:
125 entry.type = File; 125 entry.type = DirectoryEntry::File;
126 break; 126 break;
127 case DT_LNK: 127 case DT_LNK:
128 entry.type = Link; 128 entry.type = DirectoryEntry::Link;
129 break; 129 break;
130 default: 130 default:
131 break; 131 break;
132 } 132 }
133 133
137 closedir(dp); 137 closedir(dp);
138 } 138 }
139 139
140 #endif 140 #endif
141 141
142 Directory::Entry::Entry() 142 bool operator==(const DirectoryEntry &e1, const DirectoryEntry &e2)
143 : type(Unknown)
144 {
145 }
146
147 bool operator==(const Directory::Entry &e1, const Directory::Entry &e2)
148 { 143 {
149 return e1.name == e2.name && e1.type == e2.type; 144 return e1.name == e2.name && e1.type == e2.type;
150 } 145 }
151 146
152 Directory::Directory() 147 Directory::Directory()