@@ -94,7 +94,7 @@ extern int hmatch_ext(const char *__match, int __last_idx, ENTRY ** __retval,
extern int hdelete_r(const char *__key, struct hsearch_data *__htab,
int __flag);
extern int hdelete_ext(const char *__key, struct hsearch_data *__htab,
- unsigned int ctx, int __flag);
+ unsigned int ctx, uint32_t *flags, int __flag);
extern ssize_t hexport_r(struct hsearch_data *__htab,
const char __sep, int __flag, char **__resp, size_t __size,
@@ -485,7 +485,7 @@ static void _hdelete(const char *key, struct hsearch_data *htab, ENTRY *ep,
}
int hdelete_ext(const char *key, struct hsearch_data *htab, unsigned int ctx,
- int flag)
+ uint32_t *flags, int flag)
{
ENTRY e, *ep;
int idx;
@@ -519,6 +519,8 @@ int hdelete_ext(const char *key, struct hsearch_data *htab, unsigned int ctx,
return 0;
}
+ if (flags)
+ *flags = ep->flags;
_hdelete(key, htab, ep, idx);
return 1;
@@ -526,7 +528,7 @@ int hdelete_ext(const char *key, struct hsearch_data *htab, unsigned int ctx,
int hdelete_r(const char *key, struct hsearch_data *htab, int flag)
{
- return hdelete_ext(key, htab, 0, flag);
+ return hdelete_ext(key, htab, 0, NULL, flag);
}
#if !(defined(CONFIG_SPL_BUILD) && !defined(CONFIG_SPL_SAVEENV))
@@ -985,7 +987,7 @@ int himport_ext(struct hsearch_data *htab, unsigned int ctx,
if (!drop_var_from_set(name, nvars, localvars))
continue;
- if (hdelete_ext(name, htab, ctx, flag) == 0)
+ if (hdelete_ext(name, htab, ctx, NULL, flag) == 0)
debug("DELETE ERROR ##############################\n");
continue;
With this patch, an extended interface of hdelete_ext() will return variable's attribute. The feature will be used in a successive patch to determine if the context should be 'autosaved' or not even in case of deletion. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> --- include/search.h | 2 +- lib/hashtable.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-)