@@ -44,6 +44,7 @@ static int select_file(const struct dirent *de)
44
44
45
45
void dir_init (Dir * dir )
46
46
{
47
+ dir -> entries = 0 ;
47
48
dir -> files = 0 ;
48
49
dir -> ep = NULL ;
49
50
dir -> path [0 ] = '\0' ;
@@ -78,11 +79,12 @@ int dir_read(Dir *dir, char *path, int directories_first)
78
79
new_path = dir_get_new_dir_alloc (dir -> path , path );
79
80
wdprintf (V_DEBUG , "dir" , "old path=%s\nnew path=%s\n" , dir -> path , new_path );
80
81
if (new_path && strncmp (new_path , dir -> base_dir , strlen (dir -> base_dir )) == 0 ) {
81
- dir -> files = 0 ;
82
82
memset (dir -> path , 0 , 256 );
83
83
strncpy (dir -> path , new_path , 255 );
84
84
wdprintf (V_DEBUG , "dir" , "scanning path=[%s]\n" , dir -> path );
85
- dir -> files = scandir (dir -> path , & (dir -> ep ), select_file , alphasort );
85
+ dir_free (dir );
86
+ dir -> entries = scandir (dir -> path , & (dir -> ep ), select_file , alphasort );
87
+ dir -> files = dir -> entries ;
86
88
wdprintf (V_DEBUG , "dir" , "files found=%d\n" , dir -> files );
87
89
if (dir -> files > MAX_FILES ) dir -> files = MAX_FILES ;
88
90
for (i = 0 ; i < dir -> files ; i ++ ) {
@@ -160,7 +162,7 @@ void dir_free(Dir *dir)
160
162
struct dirent * * list ;
161
163
162
164
if (dir -> ep ) {
163
- for (i = 0 , list = dir -> ep ; i < dir -> files ; i ++ , list ++ )
165
+ for (i = 0 , list = dir -> ep ; i < dir -> entries ; i ++ , list ++ )
164
166
free (* list );
165
167
free (dir -> ep );
166
168
dir -> ep = NULL ;
0 commit comments