lib: Always set errno in hcreate_r
authorSean Anderson <seanga2@gmail.com>
Wed, 24 Jun 2020 10:41:15 +0000 (06:41 -0400)
committerAndes <uboot@andestech.com>
Wed, 1 Jul 2020 07:01:21 +0000 (15:01 +0800)
This could give a confusing error message if it failed and didn't set
errno.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
lib/hashtable.c

index b96dbe1..7b6781b 100644 (file)
@@ -110,8 +110,10 @@ int hcreate_r(size_t nel, struct hsearch_data *htab)
        }
 
        /* There is still another table active. Return with error. */
-       if (htab->table != NULL)
+       if (htab->table != NULL) {
+               __set_errno(EINVAL);
                return 0;
+       }
 
        /* Change nel to the first prime number not smaller as nel. */
        nel |= 1;               /* make odd */
@@ -124,8 +126,10 @@ int hcreate_r(size_t nel, struct hsearch_data *htab)
        /* allocate memory and zero out */
        htab->table = (struct env_entry_node *)calloc(htab->size + 1,
                                                sizeof(struct env_entry_node));
-       if (htab->table == NULL)
+       if (htab->table == NULL) {
+               __set_errno(ENOMEM);
                return 0;
+       }
 
        /* everything went alright */
        return 1;