diff libmenu/menu_filesel.c @ 9104:a0aacfb492a5

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>
author arpi
date Sun, 26 Jan 2003 16:03:16 +0000
parents 27705ba7ffa9
children 8546faeb0112
line wrap: on
line diff
--- a/libmenu/menu_filesel.c	Sun Jan 26 16:02:58 2003 +0000
+++ b/libmenu/menu_filesel.c	Sun Jan 26 16:03:16 2003 +0000
@@ -98,9 +98,6 @@
 }
 
 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 @@
       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 @@
     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 @@
       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);