Browse Source

alloc: fix bug in tiny allocator

We can have a 0 byte in the *middle* of an encoding.
Rusty Russell 15 years ago
parent
commit
da153b468e
1 changed files with 5 additions and 5 deletions
  1. 5 5
      ccan/alloc/tiny.c

+ 5 - 5
ccan/alloc/tiny.c

@@ -152,13 +152,13 @@ static bool long_enough(unsigned long offset, unsigned long len,
 
 static unsigned long find_free_end(unsigned char *arr, unsigned long arrsize)
 {
-	unsigned long end;
+	long i;
 
-	for (end = 0; end < arrsize; end++) {
-		if (!arr[end])
-			break;
+	for (i = arrsize-1; i >= 0; i--) {
+		if (arr[i])
+			return i + 1;
 	}
-	return end;
+	return 0;
 }
 
 void *tiny_alloc_get(void *pool, unsigned long poolsize,