diff --git a/libbb/inode_hash.c b/libbb/inode_hash.c
index 2ac1623..55a7564 100644
--- a/libbb/inode_hash.c
+++ b/libbb/inode_hash.c
@@ -13,41 +13,40 @@
 #include <string.h>
 #include "libbb.h"
 
+typedef struct ino_dev_hash_bucket_struct {
+	struct ino_dev_hash_bucket_struct *next;
+	ino_t ino;
+	dev_t dev;
+	char name[1];
+} ino_dev_hashtable_bucket_t;
+
 #define HASH_SIZE	311		/* Should be prime */
 #define hash_inode(i)	((i) % HASH_SIZE)
 
-typedef struct ino_dev_hash_bucket_struct {
-  struct ino_dev_hash_bucket_struct *next;
-  ino_t ino;
-  dev_t dev;
-  char name[1];
-} ino_dev_hashtable_bucket_t;
-
-static ino_dev_hashtable_bucket_t *ino_dev_hashtable[HASH_SIZE];
+/* array of [HASH_SIZE] elements */
+static ino_dev_hashtable_bucket_t **ino_dev_hashtable;
 
 /*
- * Return 1 if statbuf->st_ino && statbuf->st_dev are recorded in
- * `ino_dev_hashtable', else return 0
- *
- * If NAME is a non-NULL pointer to a character pointer, and there is
- * a match, then set *NAME to the value of the name slot in that
- * bucket.
+ * Return name if statbuf->st_ino && statbuf->st_dev are recorded in
+ * ino_dev_hashtable, else return NULL
  */
-int is_in_ino_dev_hashtable(const struct stat *statbuf, char **name)
+char *is_in_ino_dev_hashtable(const struct stat *statbuf)
 {
 	ino_dev_hashtable_bucket_t *bucket;
 
+	if (!ino_dev_hashtable)
+		return NULL;
+
 	bucket = ino_dev_hashtable[hash_inode(statbuf->st_ino)];
 	while (bucket != NULL) {
-	  if ((bucket->ino == statbuf->st_ino) &&
-		  (bucket->dev == statbuf->st_dev))
-	  {
-		if (name) *name = bucket->name;
-		return 1;
-	  }
-	  bucket = bucket->next;
+		if ((bucket->ino == statbuf->st_ino)
+		 && (bucket->dev == statbuf->st_dev)
+		) {
+			return bucket->name;
+		}
+		bucket = bucket->next;
 	}
-	return 0;
+	return NULL;
 }
 
 /* Add statbuf to statbuf hash table */
@@ -58,19 +57,21 @@
 	ino_dev_hashtable_bucket_t *bucket;
 
 	i = hash_inode(statbuf->st_ino);
-	s = name ? strlen(name) : 0;
-	bucket = xmalloc(sizeof(ino_dev_hashtable_bucket_t) + s);
+	if (!name)
+		name = "";
+	bucket = xmalloc(sizeof(ino_dev_hashtable_bucket_t) + strlen(name));
 	bucket->ino = statbuf->st_ino;
 	bucket->dev = statbuf->st_dev;
-	if (name)
-		strcpy(bucket->name, name);
-	else
-		bucket->name[0] = '\0';
+	strcpy(bucket->name, name);
+
+	if (!ino_dev_hashtable)
+		ino_dev_hashtable = xzalloc(HASH_SIZE * sizeof(*ino_dev_hashtable));
+
 	bucket->next = ino_dev_hashtable[i];
 	ino_dev_hashtable[i] = bucket;
 }
 
-#ifdef CONFIG_FEATURE_CLEAN_UP
+#if ENABLE_FEATURE_CLEAN_UP
 /* Clear statbuf hash table */
 void reset_ino_dev_hashtable(void)
 {
@@ -84,5 +85,7 @@
 			ino_dev_hashtable[i] = bucket;
 		}
 	}
+	free(ino_dev_hashtable);
+	ino_dev_hashtable = NULL;
 }
 #endif
