MINOR: lua: simplify hlua_alloc() to only rely on realloc()

The function really has the semantics of a realloc() except that it
also passes the old size to help with accounting. No need to special
case the free or malloc, realloc does everything we need.
diff --git a/src/hlua.c b/src/hlua.c
index 1829e87..176e6f7 100644
--- a/src/hlua.c
+++ b/src/hlua.c
@@ -8229,37 +8229,22 @@
 /* The memory allocator used by the Lua stack. <ud> is a pointer to the
  * allocator's context. <ptr> is the pointer to alloc/free/realloc. <osize>
  * is the previously allocated size or the kind of object in case of a new
- * allocation. <nsize> is the requested new size.
+ * allocation. <nsize> is the requested new size. A new allocation is
+ * indicated by <ptr> being NULL. A free is indicated by <nsize> being
+ * zero.
  */
 static void *hlua_alloc(void *ud, void *ptr, size_t osize, size_t nsize)
 {
 	struct hlua_mem_allocator *zone = ud;
 
-	if (nsize == 0) {
-		/* it's a free */
-		if (ptr)
-			zone->allocated -= osize;
-		free(ptr);
-		return NULL;
-	}
-
-	if (!ptr) {
-		/* it's a new allocation */
-		if (zone->limit && zone->allocated + nsize > zone->limit)
-			return NULL;
-
-		ptr = malloc(nsize);
-		if (ptr)
-			zone->allocated += nsize;
-		return ptr;
-	}
+	if (!ptr)
+		osize = 0;
 
-	/* it's a realloc */
 	if (zone->limit && zone->allocated + nsize - osize > zone->limit)
 		return NULL;
 
 	ptr = realloc(ptr, nsize);
-	if (ptr)
+	if (ptr || !nsize)
 		zone->allocated += nsize - osize;
 	return ptr;
 }