]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/env_callback.c
karo: tx6: rename CONFIG_SYS_BOOT_CMD_NAND to FDTSAVE_CMD_STR
[karo-tx-uboot.git] / common / env_callback.c
index 34bb58e4a984e1a8fc2009e29e83cc041df4c4d9..f4d3dbd77fa6c311d16927dc517960d26c533a2c 100644 (file)
@@ -35,6 +35,9 @@ static struct env_clbk_tbl *find_env_callback(const char *name)
        return NULL;
 }
 
+static int first_call = 1;
+static const char *callback_list;
+
 /*
  * Look for a possible callback for a newly added variable
  * This is called specifically when the variable did not exist in the hash
@@ -43,11 +46,15 @@ static struct env_clbk_tbl *find_env_callback(const char *name)
 void env_callback_init(ENTRY *var_entry)
 {
        const char *var_name = var_entry->key;
-       const char *callback_list = getenv(ENV_CALLBACK_VAR);
        char callback_name[256] = "";
        struct env_clbk_tbl *clbkp;
        int ret = 1;
 
+       if (first_call) {
+               callback_list = getenv(ENV_CALLBACK_VAR);
+               first_call = 0;
+       }
+
        /* look in the ".callbacks" var for a reference to this variable */
        if (callback_list != NULL)
                ret = env_attr_lookup(callback_list, var_name, callback_name);
@@ -83,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;
@@ -119,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;
 }