env: Allow env_attr_walk to pass a priv * to callback
authorJoe Hershberger <joe.hershberger@ni.com>
Wed, 20 May 2015 19:27:19 +0000 (14:27 -0500)
committerTom Rini <trini@konsulko.com>
Thu, 21 May 2015 13:13:19 +0000 (09:13 -0400)
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>
common/cmd_nvedit.c
common/env_attr.c
common/env_callback.c
common/env_flags.c
include/env_attr.h

index be792ae746163d32048c27b6af22e1ff2ae98b2a..6ca5a2e5a90f700ae9e0e31f8b96edd683c54465 100644 (file)
@@ -427,7 +427,8 @@ int do_env_ask(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #endif
 
 #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);
 
@@ -489,7 +490,7 @@ int do_env_callback(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        puts("Static callback bindings:\n");
        printf("\t%-20s %-20s\n", "Variable Name", "Callback Name");
        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");
 
        /* 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
 
 #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_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");
        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");
 
        /* walk through each variable and print the flags if non-default */
index 6e13184d7e8cd095ffe5a98714bc256e8013a8ac..b9de16f73e75187b6b909eecdf7f4d9367ece057 100644 (file)
@@ -26,7 +26,8 @@
  *     list = entry[,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;
        char *name, *attributes;
@@ -93,7 +94,7 @@ int env_attr_walk(const char *attr_list,
                        if (strlen(name) != 0) {
                                int retval = 0;
 
-                               retval = callback(name, attributes);
+                               retval = callback(name, attributes, priv);
                                if (retval) {
                                        free(entry_cpy);
                                        return retval;
index d03fa03a436219a6d7a52f67eeb494a07393199a..f4d3dbd77fa6c311d16927dc517960d26c533a2c 100644 (file)
@@ -90,7 +90,7 @@ static int clear_callback(ENTRY *entry)
 /*
  * 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;
        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);
 
        /* 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 */
-       env_attr_walk(value, set_callback);
+       env_attr_walk(value, set_callback, NULL);
 
        return 0;
 }
index 985f92e50e91dda81ad36fec5447ed4cffe30907..5189f5b2ddd54e0245a4455035a220383c1e3052 100644 (file)
@@ -435,7 +435,7 @@ static int clear_flags(ENTRY *entry)
 /*
  * 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;
 
@@ -463,9 +463,9 @@ static int on_flags(const char *name, const char *value, enum env_op op,
        hwalk_r(&env_htab, clear_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 */
-       env_attr_walk(value, set_flags);
+       env_attr_walk(value, set_flags, NULL);
 
        return 0;
 }
index b82fec91be107854104ebea6242455108256c8f3..7bfb7f30d1ba71bb8e011443e9d7f151ea3f0b65 100644 (file)
  *     attributes = [^,:\s]*
  *     entry = name[:attributes]
  *     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.
  * This return value will be passed through to the caller.
  * 0 is returned on success.
  */
-extern int env_attr_walk(const char *attr_list,
-       int (*callback)(const char *name, const char *value));
+int env_attr_walk(const char *attr_list,
+       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.
@@ -33,7 +34,6 @@ extern int env_attr_walk(const char *attr_list,
  * "attr_list" is NULL.
  * Returns 0 on success.
  */
-extern int env_attr_lookup(const char *attr_list, const char *name,
-       char *attributes);
+int env_attr_lookup(const char *attr_list, const char *name, char *attributes);
 
 #endif /* __ENV_ATTR_H__ */