projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'efi-2020-07-rc4' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
[oweals/u-boot.git]
/
lib
/
hashtable.c
diff --git
a/lib/hashtable.c
b/lib/hashtable.c
index 2caab0a4c6d3157d3de8d83757bacfa00e257265..b96dbe19be4dd52e0233e9d452f3201f6c57ad69 100644
(file)
--- a/
lib/hashtable.c
+++ b/
lib/hashtable.c
@@
-13,7
+13,9
@@
*/
#include <errno.h>
*/
#include <errno.h>
+#include <log.h>
#include <malloc.h>
#include <malloc.h>
+#include <sort.h>
#ifdef USE_HOSTCC /* HOST build */
# include <string.h>
#ifdef USE_HOSTCC /* HOST build */
# include <string.h>
@@
-221,6
+223,17
@@
int hmatch_r(const char *match, int last_idx, struct env_entry **retval,
return 0;
}
return 0;
}
+static int
+do_callback(const struct env_entry *e, const char *name, const char *value,
+ enum env_op op, int flags)
+{
+#ifndef CONFIG_SPL_BUILD
+ if (e->callback)
+ return e->callback(name, value, op, flags);
+#endif
+ return 0;
+}
+
/*
* Compare an existing entry with the desired key, and overwrite if the action
* is ENV_ENTER. This is simply a helper function for hsearch_r().
/*
* Compare an existing entry with the desired key, and overwrite if the action
* is ENV_ENTER. This is simply a helper function for hsearch_r().
@@
-246,9
+259,8
@@
static inline int _compare_and_overwrite_entry(struct env_entry item,
}
/* If there is a callback, call it */
}
/* If there is a callback, call it */
- if (htab->table[idx].entry.callback &&
- htab->table[idx].entry.callback(item.key,
- item.data, env_op_overwrite, flag)) {
+ if (do_callback(&htab->table[idx].entry, item.key,
+ item.data, env_op_overwrite, flag)) {
debug("callback() rejected setting variable "
"%s, skipping it!\n", item.key);
__set_errno(EINVAL);
debug("callback() rejected setting variable "
"%s, skipping it!\n", item.key);
__set_errno(EINVAL);
@@
-401,9
+413,8
@@
int hsearch_r(struct env_entry item, enum env_action action,
}
/* If there is a callback, call it */
}
/* If there is a callback, call it */
- if (htab->table[idx].entry.callback &&
- htab->table[idx].entry.callback(item.key, item.data,
- env_op_create, flag)) {
+ if (do_callback(&htab->table[idx].entry, item.key, item.data,
+ env_op_create, flag)) {
debug("callback() rejected setting variable "
"%s, skipping it!\n", item.key);
_hdelete(item.key, htab, &htab->table[idx].entry, idx);
debug("callback() rejected setting variable "
"%s, skipping it!\n", item.key);
_hdelete(item.key, htab, &htab->table[idx].entry, idx);
@@
-440,7
+451,6
@@
static void _hdelete(const char *key, struct hsearch_data *htab,
debug("hdelete: DELETING key \"%s\"\n", key);
free((void *)ep->key);
free(ep->data);
debug("hdelete: DELETING key \"%s\"\n", key);
free((void *)ep->key);
free(ep->data);
- ep->callback = NULL;
ep->flags = 0;
htab->table[idx].used = USED_DELETED;
ep->flags = 0;
htab->table[idx].used = USED_DELETED;
@@
-472,8
+482,8
@@
int hdelete_r(const char *key, struct hsearch_data *htab, int flag)
}
/* If there is a callback, call it */
}
/* If there is a callback, call it */
- if (
htab->table[idx].entry.callback &&
-
htab->table[idx].entry.callback(key, NULL,
env_op_delete, flag)) {
+ if (
do_callback(&htab->table[idx].entry, key, NULL,
+
env_op_delete, flag)) {
debug("callback() rejected deleting variable "
"%s, skipping it!\n", key);
__set_errno(EINVAL);
debug("callback() rejected deleting variable "
"%s, skipping it!\n", key);
__set_errno(EINVAL);
@@
-596,7
+606,7
@@
static int match_entry(struct env_entry *ep, int flag, int argc,
ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag,
char **resp, size_t size,
ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag,
char **resp, size_t size,
- int argc, char *
const argv[])
+ int argc, char *const argv[])
{
struct env_entry *list[htab->size];
char *res, *p;
{
struct env_entry *list[htab->size];
char *res, *p;