From: Rusty Russell Date: Thu, 15 Jul 2010 08:40:47 +0000 (+0930) Subject: alloc: fix bug in tiny allocator X-Git-Url: http://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=da153b468e362f89a0bfd296a1f733f345aecad3;ds=sidebyside alloc: fix bug in tiny allocator We can have a 0 byte in the *middle* of an encoding. --- diff --git a/ccan/alloc/tiny.c b/ccan/alloc/tiny.c index b965eb47..feffa618 100755 --- a/ccan/alloc/tiny.c +++ b/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,