MCPcopy Create free account
hub / github.com/ArduPilot/ardupilot / readdir

Method readdir

libraries/AP_Filesystem/AP_Filesystem.cpp:230–264  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

228}
229
230struct dirent *AP_Filesystem::readdir(DirHandle *dirp)
231{
232 if (!dirp) {
233 return nullptr;
234 }
235 const Backend &backend = backends[dirp->fs_index];
236 struct dirent * ret = backend.fs.readdir(dirp->dir);
237 if (ret != nullptr) {
238 return ret;
239 }
240
241 // virtual directory entries in the root directory (e.g. @SYS, @MISSION)
242 for (; ret == nullptr && virtual_dirent.backend_ofs < ARRAY_SIZE(AP_Filesystem::backends); virtual_dirent.backend_ofs++) {
243 const char *prefix = backends[virtual_dirent.backend_ofs].prefix;
244 if (prefix == nullptr) {
245 continue;
246 }
247 if (prefix[0] != '@') {
248 continue;
249 }
250
251 // only return @ entries in root if we can successfully opendir them:
252 auto *d = backends[virtual_dirent.backend_ofs].fs.opendir("");
253 if (d == nullptr) {
254 continue;
255 }
256 backends[virtual_dirent.backend_ofs].fs.closedir(d);
257
258 // found a virtual directory we haven't returned yet
259 strncpy_noterm(virtual_dirent.de.d_name, prefix, sizeof(virtual_dirent.de.d_name));
260 virtual_dirent.d_off++;
261 ret = &virtual_dirent.de;
262 }
263 return ret;
264}
265
266int AP_Filesystem::closedir(DirHandle *dirp)
267{

Callers 5

ftp_list_dirMethod · 0.45
find_oldest_logMethod · 0.45
get_num_logsMethod · 0.45
lua_dirlistFunction · 0.45

Calls 3

strncpy_notermFunction · 0.85
opendirMethod · 0.45
closedirMethod · 0.45

Tested by

no test coverage detected