Skip to content

Commit 2a3a7e6

Browse files
committedJan 15, 2012
Fix memory leak.
1 parent b39c8ce commit 2a3a7e6

File tree

5 files changed

+14
-5
lines changed

5 files changed

+14
-5
lines changed
 

‎src/dir.c

+5-3
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ static int select_file(const struct dirent *de)
4444

4545
void dir_init(Dir *dir)
4646
{
47+
dir->entries = 0;
4748
dir->files = 0;
4849
dir->ep = NULL;
4950
dir->path[0] = '\0';
@@ -78,11 +79,12 @@ int dir_read(Dir *dir, char *path, int directories_first)
7879
new_path = dir_get_new_dir_alloc(dir->path, path);
7980
wdprintf(V_DEBUG, "dir", "old path=%s\nnew path=%s\n", dir->path, new_path);
8081
if (new_path && strncmp(new_path, dir->base_dir, strlen(dir->base_dir)) == 0) {
81-
dir->files = 0;
8282
memset(dir->path, 0, 256);
8383
strncpy(dir->path, new_path, 255);
8484
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;
8688
wdprintf(V_DEBUG, "dir", "files found=%d\n", dir->files);
8789
if (dir->files > MAX_FILES) dir->files = MAX_FILES;
8890
for (i = 0; i < dir->files; i++) {
@@ -160,7 +162,7 @@ void dir_free(Dir *dir)
160162
struct dirent **list;
161163

162164
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++)
164166
free(*list);
165167
free(dir->ep);
166168
dir->ep = NULL;

‎src/dir.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
struct _Dir
2222
{
2323
struct dirent **ep;
24-
int files;
24+
/* "entries" contains all fetched files, while "files" contains the number of visible files */
25+
int entries, files;
2526
short flag_tmp[MAX_FILES];
2627
short flag[MAX_FILES];
2728
long filesize_tmp[MAX_FILES];

‎src/frontends/sdl/filebrowser.c

+5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ void file_browser_init(FileBrowser *fb, const Skin *skin, Charset charset, char
3434
dir_set_base_dir(&(fb->dir), base_dir);
3535
}
3636

37+
void file_browser_free(FileBrowser *fb)
38+
{
39+
dir_free(&(fb->dir));
40+
}
41+
3742
void file_browser_set_directories_first(FileBrowser *fb, int value)
3843
{
3944
fb->directories_first = value;

‎src/frontends/sdl/filebrowser.h

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ typedef struct FileBrowser
2727
} FileBrowser;
2828

2929
void file_browser_init(FileBrowser *fb, const Skin *skin, Charset charset, char *base_dir);
30+
void file_browser_free(FileBrowser *fb);
3031
int file_browser_set_selection(FileBrowser *fb, int selection);
3132
int file_browser_get_selection(FileBrowser *fb);
3233
void file_browser_move_selection_down(FileBrowser *fb);

‎src/frontends/sdl/sdl.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1283,7 +1283,7 @@ static void run_player(char *skin_name, char *decoders_str)
12831283
}
12841284
cfg_add_key(config, "SDL_frontend.Fullscreen", fullscreen ? "yes" : "no");
12851285
}
1286-
/*dir_free(&fb.dir);*/
1286+
file_browser_free(&fb);
12871287
cover_viewer_free(&cv);
12881288
skin_free(&skin);
12891289
}

0 commit comments

Comments
 (0)
Please sign in to comment.