doc: Add top-level description about U-Boot documentation
[oweals/u-boot.git] / lib / hashtable.c
index 93028ed83b2677f9dd83d1f2a16abbcd9f3d2d37..0d288d12d991128a6f3d5690e49215d863c3b0dd 100644 (file)
@@ -40,6 +40,9 @@
 #define        CONFIG_ENV_MAX_ENTRIES 512
 #endif
 
+#define USED_FREE 0
+#define USED_DELETED -1
+
 #include <env_callback.h>
 #include <env_flags.h>
 #include <search.h>
@@ -303,7 +306,7 @@ int hsearch_r(ENTRY item, ACTION action, ENTRY ** retval,
                 */
                unsigned hval2;
 
-               if (htab->table[idx].used == -1
+               if (htab->table[idx].used == USED_DELETED
                    && !first_deleted)
                        first_deleted = idx;
 
@@ -335,13 +338,17 @@ int hsearch_r(ENTRY item, ACTION action, ENTRY ** retval,
                        if (idx == hval)
                                break;
 
+                       if (htab->table[idx].used == USED_DELETED
+                           && !first_deleted)
+                               first_deleted = idx;
+
                        /* If entry is found use it. */
                        ret = _compare_and_overwrite_entry(item, action, retval,
                                htab, flag, hval, idx);
                        if (ret != -1)
                                return ret;
                }
-               while (htab->table[idx].used);
+               while (htab->table[idx].used != USED_FREE);
        }
 
        /* An empty bucket has been found. */
@@ -433,7 +440,7 @@ static void _hdelete(const char *key, struct hsearch_data *htab, ENTRY *ep,
        free(ep->data);
        ep->callback = NULL;
        ep->flags = 0;
-       htab->table[idx].used = -1;
+       htab->table[idx].used = USED_DELETED;
 
        --htab->filled;
 }
@@ -542,9 +549,8 @@ static int match_string(int flag, const char *str, const char *pat, void *priv)
        case H_MATCH_REGEX:
                {
                        struct slre *slrep = (struct slre *)priv;
-                       struct cap caps[slrep->num_caps + 2];
 
-                       if (slre_match(slrep, str, strlen(str), caps))
+                       if (slre_match(slrep, str, strlen(str), NULL))
                                return 1;
                }
                break;