
Hi Patrick,
Split the function dfu_config_entities with 2 new functions
- dfu_alt_init
- dfu_alt_add
Ok.
Signed-off-by: Patrick Delaunay patrick.delaunay@st.com
drivers/dfu/dfu.c | 51 +++++++++++++++++++++++++++++++++++++++------------ include/dfu.h | 2 ++ 2 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index eb3a3c6..79a652e 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -438,13 +438,12 @@ void dfu_free_entities(void) alt_num_cnt = 0; }
-int dfu_config_entities(char *env, char *interface, char *devstr) +int dfu_alt_init(int num, struct dfu_entity **dfu) {
- struct dfu_entity *dfu;
- int i, ret; char *s;
- int ret;
- dfu_alt_num = dfu_find_alt_num(env);
dfu_alt_num = num; debug("%s: dfu_alt_num=%d\n", __func__, dfu_alt_num);
dfu_hash_algo = NULL;
@@ -455,21 +454,49 @@ int dfu_config_entities(char *env, char *interface, char *devstr) pr_err("Hash algorithm %s not supported\n", s); }
- dfu = calloc(sizeof(*dfu), dfu_alt_num);
- if (!dfu)
- *dfu = calloc(sizeof(struct dfu_entity), dfu_alt_num);
- if (!*dfu)
return -1;
I'm aware that the dfu.c file in some places uses -1 or -<errno> as return value.
I would prefer that with new code we shall add -<errno>. In this particular case it would be -ENOMEM
- return 0;
+}
+int dfu_alt_add(struct dfu_entity *dfu, char *interface, char *devstr, char *s) +{
- struct dfu_entity *p_dfu;
- int ret;
- if (alt_num_cnt >= dfu_alt_num)
return -1;
- p_dfu = &dfu[alt_num_cnt];
- ret = dfu_fill_entity(p_dfu, s, alt_num_cnt, interface,
devstr);
- if (ret) return -1;
- for (i = 0; i < dfu_alt_num; i++) {
- list_add_tail(&p_dfu->list, &dfu_list);
- alt_num_cnt++;
- return 0;
+}
+int dfu_config_entities(char *env, char *interface, char *devstr) +{
- struct dfu_entity *dfu;
- int i, ret;
- char *s;
- ret = dfu_alt_init(dfu_find_alt_num(env), &dfu);
- if (ret)
return -1;
- for (i = 0; i < dfu_alt_num; i++) { s = strsep(&env, ";");
ret = dfu_fill_entity(&dfu[i], s, alt_num_cnt,
interface,
devstr);
if (ret) { /* We will free "dfu" in dfu_free_entities()ret = dfu_alt_add(dfu, interface, devstr, s);
*/ return -1; }
list_add_tail(&dfu[i].list, &dfu_list);
alt_num_cnt++;
}
return 0;
diff --git a/include/dfu.h b/include/dfu.h index bf51ab7..7d60ffc 100644 --- a/include/dfu.h +++ b/include/dfu.h @@ -143,6 +143,8 @@ struct dfu_entity { #ifdef CONFIG_SET_DFU_ALT_INFO void set_dfu_alt_info(char *interface, char *devstr); #endif +int dfu_alt_init(int num, struct dfu_entity **dfu); +int dfu_alt_add(struct dfu_entity *dfu, char *interface, char *devstr, char *s); int dfu_config_entities(char *s, char *interface, char *devstr); void dfu_free_entities(void); void dfu_show_entities(void);
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de