@@ -545,17 +545,13 @@ int FATFileSystem::dir_close(fs_dir_t dir) {
545545 return fat_error_remap (res);
546546}
547547
548- ssize_t FATFileSystem::dir_read (fs_dir_t dir, char *path, size_t len) {
549- return dir_read (dir, path, len, NULL );
550- }
551-
552- ssize_t FATFileSystem::dir_read (fs_dir_t dir, char *path, size_t len, uint8_t *type) {
548+ ssize_t FATFileSystem::dir_read (fs_dir_t dir, struct dirent *ent) {
553549 FATFS_DIR *dh = static_cast <FATFS_DIR*>(dir);
554550 FILINFO finfo;
555551
556552#if _USE_LFN
557- finfo.lfname = path ;
558- finfo.lfsize = len ;
553+ finfo.lfname = ent-> d_name ;
554+ finfo.lfsize = NAME_MAX ;
559555#endif // _USE_LFN
560556
561557 lock ();
@@ -565,23 +561,21 @@ ssize_t FATFileSystem::dir_read(fs_dir_t dir, char *path, size_t len, uint8_t *t
565561 if (res != FR_OK) {
566562 return fat_error_remap (res);
567563 } else if (finfo.fname [0 ] == 0 ) {
568- return -EINVAL ;
564+ return 0 ;
569565 }
570566
571- if (type) {
572- *type = (finfo.fattrib & AM_DIR) ? DT_DIR : DT_REG;
573- }
567+ ent->d_type = (finfo.fattrib & AM_DIR) ? DT_DIR : DT_REG;
574568
575569#if _USE_LFN
576- if (path [0 ] == 0 ) {
570+ if (ent-> d_name [0 ] == 0 ) {
577571 // No long filename so use short filename.
578- strncpy (path , finfo.fname , len );
572+ strncpy (ent-> d_name , finfo.fname , NAME_MAX );
579573 }
580574#else
581- strncpy (path , finfo.fname , len);
575+ strncpy (end-> d_name , finfo.fname , len);
582576#endif
583577
584- return 0 ;
578+ return 1 ;
585579}
586580
587581void FATFileSystem::dir_seek (fs_dir_t dir, off_t offset) {
0 commit comments