mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
env: Allow env_attr_walk to pass a priv * to callback
In some cases it can be helpful to have context in the callback about the calling situation. This is needed for following patches. Signed-off-by: Joe Hershberger <joe.hershberger@ni.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
032ea185d6
commit
cca98fd6aa
5 changed files with 20 additions and 17 deletions
|
@ -427,7 +427,8 @@ int do_env_ask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_ENV_CALLBACK)
|
#if defined(CONFIG_CMD_ENV_CALLBACK)
|
||||||
static int print_static_binding(const char *var_name, const char *callback_name)
|
static int print_static_binding(const char *var_name, const char *callback_name,
|
||||||
|
void *priv)
|
||||||
{
|
{
|
||||||
printf("\t%-20s %-20s\n", var_name, callback_name);
|
printf("\t%-20s %-20s\n", var_name, callback_name);
|
||||||
|
|
||||||
|
@ -489,7 +490,7 @@ int do_env_callback(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
puts("Static callback bindings:\n");
|
puts("Static callback bindings:\n");
|
||||||
printf("\t%-20s %-20s\n", "Variable Name", "Callback Name");
|
printf("\t%-20s %-20s\n", "Variable Name", "Callback Name");
|
||||||
printf("\t%-20s %-20s\n", "-------------", "-------------");
|
printf("\t%-20s %-20s\n", "-------------", "-------------");
|
||||||
env_attr_walk(ENV_CALLBACK_LIST_STATIC, print_static_binding);
|
env_attr_walk(ENV_CALLBACK_LIST_STATIC, print_static_binding, NULL);
|
||||||
puts("\n");
|
puts("\n");
|
||||||
|
|
||||||
/* walk through each variable and print the callback if it has one */
|
/* walk through each variable and print the callback if it has one */
|
||||||
|
@ -502,7 +503,8 @@ int do_env_callback(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_ENV_FLAGS)
|
#if defined(CONFIG_CMD_ENV_FLAGS)
|
||||||
static int print_static_flags(const char *var_name, const char *flags)
|
static int print_static_flags(const char *var_name, const char *flags,
|
||||||
|
void *priv)
|
||||||
{
|
{
|
||||||
enum env_flags_vartype type = env_flags_parse_vartype(flags);
|
enum env_flags_vartype type = env_flags_parse_vartype(flags);
|
||||||
enum env_flags_varaccess access = env_flags_parse_varaccess(flags);
|
enum env_flags_varaccess access = env_flags_parse_varaccess(flags);
|
||||||
|
@ -559,7 +561,7 @@ int do_env_flags(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
"Variable Access");
|
"Variable Access");
|
||||||
printf("\t%-20s %-20s %-20s\n", "-------------", "-------------",
|
printf("\t%-20s %-20s %-20s\n", "-------------", "-------------",
|
||||||
"---------------");
|
"---------------");
|
||||||
env_attr_walk(ENV_FLAGS_LIST_STATIC, print_static_flags);
|
env_attr_walk(ENV_FLAGS_LIST_STATIC, print_static_flags, NULL);
|
||||||
puts("\n");
|
puts("\n");
|
||||||
|
|
||||||
/* walk through each variable and print the flags if non-default */
|
/* walk through each variable and print the flags if non-default */
|
||||||
|
|
|
@ -26,7 +26,8 @@
|
||||||
* list = entry[,list]
|
* list = entry[,list]
|
||||||
*/
|
*/
|
||||||
int env_attr_walk(const char *attr_list,
|
int env_attr_walk(const char *attr_list,
|
||||||
int (*callback)(const char *name, const char *attributes))
|
int (*callback)(const char *name, const char *attributes, void *priv),
|
||||||
|
void *priv)
|
||||||
{
|
{
|
||||||
const char *entry, *entry_end;
|
const char *entry, *entry_end;
|
||||||
char *name, *attributes;
|
char *name, *attributes;
|
||||||
|
@ -93,7 +94,7 @@ int env_attr_walk(const char *attr_list,
|
||||||
if (strlen(name) != 0) {
|
if (strlen(name) != 0) {
|
||||||
int retval = 0;
|
int retval = 0;
|
||||||
|
|
||||||
retval = callback(name, attributes);
|
retval = callback(name, attributes, priv);
|
||||||
if (retval) {
|
if (retval) {
|
||||||
free(entry_cpy);
|
free(entry_cpy);
|
||||||
return retval;
|
return retval;
|
||||||
|
|
|
@ -90,7 +90,7 @@ static int clear_callback(ENTRY *entry)
|
||||||
/*
|
/*
|
||||||
* Call for each element in the list that associates variables to callbacks
|
* Call for each element in the list that associates variables to callbacks
|
||||||
*/
|
*/
|
||||||
static int set_callback(const char *name, const char *value)
|
static int set_callback(const char *name, const char *value, void *priv)
|
||||||
{
|
{
|
||||||
ENTRY e, *ep;
|
ENTRY e, *ep;
|
||||||
struct env_clbk_tbl *clbkp;
|
struct env_clbk_tbl *clbkp;
|
||||||
|
@ -126,9 +126,9 @@ static int on_callbacks(const char *name, const char *value, enum env_op op,
|
||||||
hwalk_r(&env_htab, clear_callback);
|
hwalk_r(&env_htab, clear_callback);
|
||||||
|
|
||||||
/* configure any static callback bindings */
|
/* configure any static callback bindings */
|
||||||
env_attr_walk(ENV_CALLBACK_LIST_STATIC, set_callback);
|
env_attr_walk(ENV_CALLBACK_LIST_STATIC, set_callback, NULL);
|
||||||
/* configure any dynamic callback bindings */
|
/* configure any dynamic callback bindings */
|
||||||
env_attr_walk(value, set_callback);
|
env_attr_walk(value, set_callback, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -435,7 +435,7 @@ static int clear_flags(ENTRY *entry)
|
||||||
/*
|
/*
|
||||||
* Call for each element in the list that defines flags for a variable
|
* Call for each element in the list that defines flags for a variable
|
||||||
*/
|
*/
|
||||||
static int set_flags(const char *name, const char *value)
|
static int set_flags(const char *name, const char *value, void *priv)
|
||||||
{
|
{
|
||||||
ENTRY e, *ep;
|
ENTRY e, *ep;
|
||||||
|
|
||||||
|
@ -463,9 +463,9 @@ static int on_flags(const char *name, const char *value, enum env_op op,
|
||||||
hwalk_r(&env_htab, clear_flags);
|
hwalk_r(&env_htab, clear_flags);
|
||||||
|
|
||||||
/* configure any static flags */
|
/* configure any static flags */
|
||||||
env_attr_walk(ENV_FLAGS_LIST_STATIC, set_flags);
|
env_attr_walk(ENV_FLAGS_LIST_STATIC, set_flags, NULL);
|
||||||
/* configure any dynamic flags */
|
/* configure any dynamic flags */
|
||||||
env_attr_walk(value, set_flags);
|
env_attr_walk(value, set_flags, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,13 +16,14 @@
|
||||||
* attributes = [^,:\s]*
|
* attributes = [^,:\s]*
|
||||||
* entry = name[:attributes]
|
* entry = name[:attributes]
|
||||||
* list = entry[,list]
|
* list = entry[,list]
|
||||||
* It will call the "callback" function with the "name" and attribute as "value"
|
* It will call the "callback" function with the "name" and "attributes"
|
||||||
* The callback may return a non-0 to abort the list walk.
|
* The callback may return a non-0 to abort the list walk.
|
||||||
* This return value will be passed through to the caller.
|
* This return value will be passed through to the caller.
|
||||||
* 0 is returned on success.
|
* 0 is returned on success.
|
||||||
*/
|
*/
|
||||||
extern int env_attr_walk(const char *attr_list,
|
int env_attr_walk(const char *attr_list,
|
||||||
int (*callback)(const char *name, const char *value));
|
int (*callback)(const char *name, const char *attributes, void *priv),
|
||||||
|
void *priv);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* env_attr_lookup takes as input an "attr_list" with the same form as above.
|
* env_attr_lookup takes as input an "attr_list" with the same form as above.
|
||||||
|
@ -33,7 +34,6 @@ extern int env_attr_walk(const char *attr_list,
|
||||||
* "attr_list" is NULL.
|
* "attr_list" is NULL.
|
||||||
* Returns 0 on success.
|
* Returns 0 on success.
|
||||||
*/
|
*/
|
||||||
extern int env_attr_lookup(const char *attr_list, const char *name,
|
int env_attr_lookup(const char *attr_list, const char *name, char *attributes);
|
||||||
char *attributes);
|
|
||||||
|
|
||||||
#endif /* __ENV_ATTR_H__ */
|
#endif /* __ENV_ATTR_H__ */
|
||||||
|
|
Loading…
Reference in a new issue