mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-21 22:21:36 +00:00
lib/hashtable.c: create helper for calling env_entry::callback
This is preparation for compiling out the "call the callback" code and associated error handling for SPL, where ->callback is always NULL. Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e13df08a26
commit
7f529f6585
1 changed files with 15 additions and 8 deletions
|
@ -222,6 +222,15 @@ 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)
|
||||||
|
{
|
||||||
|
if (e->callback)
|
||||||
|
return e->callback(name, value, op, flags);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compare an existing entry with the desired key, and overwrite if the action
|
* 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().
|
* is ENV_ENTER. This is simply a helper function for hsearch_r().
|
||||||
|
@ -247,9 +256,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 &&
|
if (do_callback(&htab->table[idx].entry, item.key,
|
||||||
htab->table[idx].entry.callback(item.key,
|
item.data, env_op_overwrite, flag)) {
|
||||||
item.data, env_op_overwrite, flag)) {
|
|
||||||
debug("callback() rejected setting variable "
|
debug("callback() rejected setting variable "
|
||||||
"%s, skipping it!\n", item.key);
|
"%s, skipping it!\n", item.key);
|
||||||
__set_errno(EINVAL);
|
__set_errno(EINVAL);
|
||||||
|
@ -402,9 +410,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 &&
|
if (do_callback(&htab->table[idx].entry, item.key, item.data,
|
||||||
htab->table[idx].entry.callback(item.key, item.data,
|
env_op_create, flag)) {
|
||||||
env_op_create, flag)) {
|
|
||||||
debug("callback() rejected setting variable "
|
debug("callback() rejected setting variable "
|
||||||
"%s, skipping it!\n", item.key);
|
"%s, skipping it!\n", item.key);
|
||||||
_hdelete(item.key, htab, &htab->table[idx].entry, idx);
|
_hdelete(item.key, htab, &htab->table[idx].entry, idx);
|
||||||
|
@ -473,8 +480,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 &&
|
if (do_callback(&htab->table[idx].entry, key, NULL,
|
||||||
htab->table[idx].entry.callback(key, NULL, env_op_delete, flag)) {
|
env_op_delete, flag)) {
|
||||||
debug("callback() rejected deleting variable "
|
debug("callback() rejected deleting variable "
|
||||||
"%s, skipping it!\n", key);
|
"%s, skipping it!\n", key);
|
||||||
__set_errno(EINVAL);
|
__set_errno(EINVAL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue