File tree 5 files changed +52
-0
lines changed
5 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -187,6 +187,22 @@ File File::openNextFile(const char* mode)
187
187
return _p->openNextFile (mode);
188
188
}
189
189
190
+ boolean File::seekDir (long position){
191
+ if (!_p){
192
+ return false ;
193
+ }
194
+ return _p->seekDir (position);
195
+ }
196
+
197
+ String File::getNextFileName (void )
198
+ {
199
+ if (!_p) {
200
+ return " " ;
201
+ }
202
+ return _p->getNextFileName ();
203
+
204
+ }
205
+
190
206
void File::rewindDirectory (void )
191
207
{
192
208
if (!*this ) {
Original file line number Diff line number Diff line change @@ -78,7 +78,9 @@ class File : public Stream
78
78
const char * name () const ;
79
79
80
80
boolean isDirectory (void );
81
+ boolean seekDir (long position);
81
82
File openNextFile (const char * mode = FILE_READ);
83
+ String getNextFileName (void );
82
84
void rewindDirectory (void );
83
85
84
86
protected:
Original file line number Diff line number Diff line change @@ -43,6 +43,8 @@ class FileImpl
43
43
virtual const char * name () const = 0;
44
44
virtual boolean isDirectory (void ) = 0;
45
45
virtual FileImplPtr openNextFile (const char * mode) = 0;
46
+ virtual boolean seekDir (long position);
47
+ virtual String getNextFileName (void );
46
48
virtual void rewindDirectory (void ) = 0;
47
49
virtual operator bool () = 0;
48
50
};
Original file line number Diff line number Diff line change @@ -476,6 +476,36 @@ FileImplPtr VFSFileImpl::openNextFile(const char* mode)
476
476
return std::make_shared<VFSFileImpl>(_fs, name.c_str (), mode);
477
477
}
478
478
479
+ boolean VFSFileImpl::seekDir (long position){
480
+ if (!_d){
481
+ return false ;
482
+ }
483
+ seekdir (_d, position);
484
+ return true ;
485
+ }
486
+
487
+
488
+ String VFSFileImpl::getNextFileName ()
489
+ {
490
+ if (!_isDirectory || !_d) {
491
+ return " " ;
492
+ }
493
+ struct dirent *file = readdir (_d);
494
+ if (file == NULL ) {
495
+ return " " ;
496
+ }
497
+ if (file->d_type != DT_REG && file->d_type != DT_DIR) {
498
+ return " " ;
499
+ }
500
+ String fname = String (file->d_name );
501
+ String name = String (_path);
502
+ if (!fname.startsWith (" /" ) && !name.endsWith (" /" )) {
503
+ name += " /" ;
504
+ }
505
+ name += fname;
506
+ return name;
507
+ }
508
+
479
509
void VFSFileImpl::rewindDirectory (void )
480
510
{
481
511
if (!_isDirectory || !_d) {
Original file line number Diff line number Diff line change @@ -71,6 +71,8 @@ class VFSFileImpl : public FileImpl
71
71
const char * name () const override ;
72
72
time_t getLastWrite () override ;
73
73
boolean isDirectory (void ) override ;
74
+ boolean seekDir (long position) override ;
75
+ String getNextFileName (void ) override ;
74
76
FileImplPtr openNextFile (const char * mode) override ;
75
77
void rewindDirectory (void ) override ;
76
78
operator bool ();
You can’t perform that action at this time.
0 commit comments