diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-26 16:03:16 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-26 16:03:16 +0000 |
commit | 9e4627141721cea66091be08e2ed8a2300d8e888 (patch) | |
tree | a304c00d65bcadaf86f98359098fcaf03c371dc1 /libmenu | |
parent | db1e3c66af91d4c1675aedfdfb70f35ac34e5130 (diff) | |
download | mpv-9e4627141721cea66091be08e2ed8a2300d8e888.tar.bz2 mpv-9e4627141721cea66091be08e2ed8a2300d8e888.tar.xz |
Also attached some cleanup to menu_filesel.c, mainly to make it more
robust in case of lack of memory.
patch by Björn Sandell <biorn@dce.chalmers.se>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9105 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmenu')
-rw-r--r-- | libmenu/menu_filesel.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libmenu/menu_filesel.c b/libmenu/menu_filesel.c index 582f019e77..7e073ff494 100644 --- a/libmenu/menu_filesel.c +++ b/libmenu/menu_filesel.c @@ -98,9 +98,6 @@ static int mylstat(char *dir, char *file,struct stat* st) { } static int compare(char **a, char **b){ - int la,lb; - la = strlen(*a); - lb = strlen(*b); if((*a)[strlen(*a) - 1] == '/') { if((*b)[strlen(*b) - 1] == '/') return strcmp(*b, *a) ; @@ -149,6 +146,7 @@ static int open_dir(menu_t* menu,char* args) { if((tp = (char **) realloc(namelist, (n+20) * sizeof (char *))) == NULL) { printf("realloc error: %s", strerror(errno)); + n--; goto bailout; } namelist=tp; @@ -157,6 +155,7 @@ static int open_dir(menu_t* menu,char* args) { namelist[n] = (char *) malloc(strlen(dp->d_name) + 2); if(namelist[n] == NULL){ printf("malloc error: %s", strerror(errno)); + n--; goto bailout; } @@ -166,20 +165,24 @@ static int open_dir(menu_t* menu,char* args) { strcat(namelist[n], "/"); n++; } - qsort(namelist, n, sizeof(char *), (kill_warn)compare); bailout: + qsort(namelist, n, sizeof(char *), (kill_warn)compare); + if (n < 0) { - printf("scandir error: %s\n",strerror(errno)); + printf("readdir error: %s\n",strerror(errno)); return 0; } while(n--) { - e = calloc(1,sizeof(list_entry_t)); + if((e = calloc(1,sizeof(list_entry_t))) != NULL){ e->p.next = NULL; e->p.txt = strdup(namelist[n]); if(strchr(namelist[n], '/') != NULL) e->d = 1; menu_list_add_entry(menu,e); + }else{ + printf("malloc error: %s", strerror(errno)); + } free(namelist[n]); } free(namelist); |