File tree 5 files changed +38
-0
lines changed
5 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -203,6 +203,15 @@ String File::getNextFileName(void)
203
203
204
204
}
205
205
206
+ String File::getNextFileName (bool *isDir)
207
+ {
208
+ if (!_p) {
209
+ return " " ;
210
+ }
211
+ return _p->getNextFileName (isDir);
212
+
213
+ }
214
+
206
215
void File::rewindDirectory (void )
207
216
{
208
217
if (!*this ) {
Original file line number Diff line number Diff line change @@ -81,6 +81,7 @@ class File : public Stream
81
81
boolean seekDir (long position);
82
82
File openNextFile (const char * mode = FILE_READ);
83
83
String getNextFileName (void );
84
+ String getNextFileName (boolean *isDir);
84
85
void rewindDirectory (void );
85
86
86
87
protected:
Original file line number Diff line number Diff line change @@ -45,6 +45,7 @@ class FileImpl
45
45
virtual FileImplPtr openNextFile (const char * mode) = 0;
46
46
virtual boolean seekDir (long position);
47
47
virtual String getNextFileName (void );
48
+ virtual String getNextFileName (bool *isDir);
48
49
virtual void rewindDirectory (void ) = 0;
49
50
virtual operator bool () = 0;
50
51
};
Original file line number Diff line number Diff line change @@ -540,6 +540,32 @@ String VFSFileImpl::getNextFileName()
540
540
return name;
541
541
}
542
542
543
+ String VFSFileImpl::getNextFileName (bool *isDir)
544
+ {
545
+ if (!_isDirectory || !_d) {
546
+ return " " ;
547
+ }
548
+ struct dirent *file = readdir (_d);
549
+ if (file == NULL ) {
550
+ return " " ;
551
+ }
552
+ if (file->d_type != DT_REG && file->d_type != DT_DIR) {
553
+ return " " ;
554
+ }
555
+ String fname = String (file->d_name );
556
+ String name = String (_path);
557
+ if (!fname.startsWith (" /" ) && !name.endsWith (" /" )) {
558
+ name += " /" ;
559
+ }
560
+ name += fname;
561
+
562
+ // check entry is a directory
563
+ if (isDir) {
564
+ *isDir = (file->d_type == DT_DIR);
565
+ }
566
+ return name;
567
+ }
568
+
543
569
void VFSFileImpl::rewindDirectory (void )
544
570
{
545
571
if (!_isDirectory || !_d) {
Original file line number Diff line number Diff line change @@ -73,6 +73,7 @@ class VFSFileImpl : public FileImpl
73
73
boolean isDirectory (void ) override ;
74
74
boolean seekDir (long position) override ;
75
75
String getNextFileName (void ) override ;
76
+ String getNextFileName (bool *isDir) override ;
76
77
FileImplPtr openNextFile (const char * mode) override ;
77
78
void rewindDirectory (void ) override ;
78
79
operator bool ();
You can’t perform that action at this time.
0 commit comments