Browse Source

libcompat: Do not preallocate list before the loop in scandir

Let the realloc in the loop take care of it once it's needed, this way
we get rid of an additional point of failure.
Guillem Jover 16 years ago
parent
commit
5ad592f7ef
1 changed files with 6 additions and 7 deletions
  1. 6 7
      lib/compat/scandir.c

+ 6 - 7
lib/compat/scandir.c

@@ -57,12 +57,8 @@ scandir(const char *dir, struct dirent ***namelist,
 	if (!d)
 		return -1;
 
-	used = 0;
-	avail = 20;
-
-	list = malloc(avail * sizeof(struct dirent *));
-	if (!list)
-		return cleanup(d, list, used);
+	list = NULL;
+	used = avail = 0;
 
 	while ((e = readdir(d)) != NULL) {
 		if (filter != NULL && !filter(e))
@@ -71,7 +67,10 @@ scandir(const char *dir, struct dirent ***namelist,
 		if (used >= avail - 1) {
 			struct dirent **newlist;
 
-			avail += avail;
+			if (avail)
+				avail *= 2;
+			else
+				avail = 20;
 			newlist = realloc(list, avail * sizeof(struct dirent *));
 			if (!newlist)
 				return cleanup(d, list, used);