env: Allow returning errors from hdelete_r()

At present this function returns 1 on success and 0 on failure. But in
the latter case it provides no indication of what went wrong.

If an attempt is made to delete a non-existent variable, the caller may
want to ignore this error. This happens when setting a non-existent
variable to "", for example.

Update the function to return 0 on success and a useful error code on
failure. Add a function comment too.

Make sure that env_set() does not return an error if it is deleting a
variable that doesn't exist. We could update env_set() to return useful
error numbers also, but that is beyond the scope of this change.

Signed-off-by: Simon Glass <sjg@chromium.org>

wip
This commit is contained in:
Simon Glass
2020-11-05 10:33:37 -07:00
committed by Tom Rini
parent 4c450daf7d
commit 96434a76fd
4 changed files with 21 additions and 10 deletions

View File

@@ -80,7 +80,16 @@ int hsearch_r(struct env_entry item, enum env_action action,
int hmatch_r(const char *match, int last_idx, struct env_entry **retval,
struct hsearch_data *htab);
/* Search and delete entry matching "key" in internal hash table. */
/**
* hdelete_r() - Search and delete entry in internal hash table
*
* @key: Name of entry to delete
* @htab: Hash table
* @flag: Flags to use (H_...)
* @return 0 on success, -ENOENT if not found, -EPERM if the hash table callback
* rejected changing the variable, -EINVAL if the hash table refused to
* delete the variable
*/
int hdelete_r(const char *key, struct hsearch_data *htab, int flag);
ssize_t hexport_r(struct hsearch_data *htab, const char sep, int flag,