We are about to introduce a generic function names pr_setenv(), so rename the existent bootchooser specific function to bc_setenv(). For consistency, rename pr_getenv() accordingly. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- common/bootchooser.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/common/bootchooser.c b/common/bootchooser.c index 75dfbc6166..eb3dda52ab 100644 --- a/common/bootchooser.c +++ b/common/bootchooser.c @@ -128,7 +128,7 @@ static void pr_target(struct bootchooser_target *target) printf(" disabled due to %s\n", reason); } -static int pr_setenv(struct bootchooser *bc, const char *fmt, ...) +static int bc_setenv(struct bootchooser *bc, const char *fmt, ...) { va_list ap; int ret = 0; @@ -162,7 +162,7 @@ err: return ret; } -static const char *pr_getenv(const char *fmt, ...) +static const char *bc_getenv(const char *fmt, ...) { va_list ap; char *str; @@ -258,7 +258,7 @@ static struct bootchooser_target *bootchooser_target_new(struct bootchooser *bc, target->remaining_attempts = 0; } - val = pr_getenv("%s.boot", target->prefix); + val = bc_getenv("%s.boot", target->prefix); if (!val) val = target->name; target->boot = xstrdup(val); @@ -497,17 +497,17 @@ int bootchooser_save(struct bootchooser *bc) int ret; if (bc->last_chosen) - pr_setenv(bc, "%s.last_chosen=%d", bc->state_prefix, + bc_setenv(bc, "%s.last_chosen=%d", bc->state_prefix, bc->last_chosen->id); list_for_each_entry(target, &bc->targets, list) { - ret = pr_setenv(bc, "%s.remaining_attempts=%d", + ret = bc_setenv(bc, "%s.remaining_attempts=%d", target->state_prefix, target->remaining_attempts); if (ret) return ret; - ret = pr_setenv(bc, "%s.priority=%d", + ret = bc_setenv(bc, "%s.priority=%d", target->state_prefix, target->priority); if (ret) return ret; -- 2.30.2
It's a common pattern to (ba)sprintf to a string and then call setenv() with this string. Introduce pr_setenv() as a shortcut to simplify this pattern. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- common/env.c | 32 ++++++++++++++++++++++++++++++-- include/environment.h | 7 +++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/common/env.c b/common/env.c index 05add63f62..141cd66046 100644 --- a/common/env.c +++ b/common/env.c @@ -244,13 +244,12 @@ static int dev_setenv(const char *name, const char *val) /** * setenv - set environment variables - * @_name - Variable name + * @name - Variable name * @value - the value to set, empty string not handled specially * * Returns 0 for success and a negative error code otherwise * Use unsetenv() to unset. */ - int setenv(const char *_name, const char *value) { char *name = strdup(_name); @@ -277,6 +276,35 @@ out: } EXPORT_SYMBOL(setenv); +/** + * pr_setenv - set environment variables + * @name - Variable name + * @fmt - the format string to use + * + * Returns 0 for success and a negative error code otherwise + * Use unsetenv() to unset. + */ +int pr_setenv(const char *name, const char *fmt, ...) +{ + va_list ap; + int ret = 0; + char *value; + int len; + + va_start(ap, fmt); + len = vasprintf(&value, fmt, ap); + va_end(ap); + + if (len < 0) + return -ENOMEM; + + ret = setenv(name, value); + free(value); + + return ret; +} +EXPORT_SYMBOL(setenv); + int export(const char *varname) { const char *val = getenv_raw(&context->local, varname); diff --git a/include/environment.h b/include/environment.h index 19e522cfb6..1557c3a1d7 100644 --- a/include/environment.h +++ b/include/environment.h @@ -32,6 +32,7 @@ char *var_name(struct variable_d *); #ifdef CONFIG_ENVIRONMENT_VARIABLES const char *getenv(const char *); int setenv(const char *, const char *); +int pr_setenv(const char *, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3))); void export_env_ull(const char *name, unsigned long long val); int getenv_ull(const char *name, unsigned long long *val); int getenv_ul(const char *name, unsigned long *val); @@ -49,6 +50,12 @@ static inline int setenv(const char *var, const char *val) return 0; } +static inline __attribute__ ((format(__printf__, 2, 3))) int pr_setenv( + const char *var, const char *fmt, ...) +{ + return 0; +} + static inline void export_env_ull(const char *name, unsigned long long val) {} static inline int getenv_ull(const char *name, unsigned long long *val) -- 2.30.2
We now have pr_setenv() which is a setenv() variant that takes a format string. Use it where appropriate. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- commands/clk.c | 10 +++------- commands/crc.c | 14 ++++---------- commands/hwclock.c | 4 +--- commands/loadb.c | 4 +--- commands/loads.c | 4 +--- common/bootsource.c | 8 ++------ common/menutree.c | 9 +-------- 7 files changed, 13 insertions(+), 40 deletions(-) diff --git a/commands/clk.c b/commands/clk.c index dfbc7c988f..b1741b9da4 100644 --- a/commands/clk.c +++ b/commands/clk.c @@ -139,13 +139,9 @@ static int do_clk_get_rate(int argc, char *argv[]) rate = clk_get_rate(clk); - if (variable_name) { - char *t; - - t = basprintf("%lu", rate); - setenv(variable_name, t); - free(t); - } else + if (variable_name) + pr_setenv(variable_name, "%lu", rate); + else printf("%lu\n", rate); return COMMAND_SUCCESS; diff --git a/commands/crc.c b/commands/crc.c index 80ecf7fe29..23ffd4360b 100644 --- a/commands/crc.c +++ b/commands/crc.c @@ -83,17 +83,11 @@ static int do_crc(int argc, char *argv[]) printf("CRC32 for %s 0x%08lx ... 0x%08lx ==> 0x%08lx", filename, (ulong)start, (ulong)start + total - 1, crc); - if (crcvarname) { - char *crcstr = basprintf("0x%lx", crc); - setenv(crcvarname, crcstr); - kfree(crcstr); - } + if (crcvarname) + pr_setenv(crcvarname, "0x%lx", crc); - if (sizevarname) { - char *sizestr = basprintf("0x%lx", total); - setenv(sizevarname, sizestr); - kfree(sizestr); - } + if (sizevarname) + pr_setenv(sizevarname, "0x%lx", total); #ifdef CONFIG_CMD_CRC_CMP if (vfilename) { diff --git a/commands/hwclock.c b/commands/hwclock.c index abb0500e6a..c594e070ac 100644 --- a/commands/hwclock.c +++ b/commands/hwclock.c @@ -153,11 +153,9 @@ static int do_hwclock(int argc, char *argv[]) if (env_name) { unsigned long time; - char t[12]; rtc_tm_to_time(&tm, &time); - snprintf(t, 12, "%lu", time); - setenv(env_name, t); + pr_setenv(env_name, "%lu", time); } else { printf("%s\n", time_str(&tm)); } diff --git a/commands/loadb.c b/commands/loadb.c index 17d3af84b5..7ab989f459 100644 --- a/commands/loadb.c +++ b/commands/loadb.c @@ -542,7 +542,6 @@ packet_error: static ulong load_serial_bin(void) { int size, i; - char buf[32]; /* Try to allocate the buffer we shall write to files */ write_buffer = malloc(MAX_WRITE_BUFFER); @@ -576,8 +575,7 @@ static ulong load_serial_bin(void) write_idx = 0; } printf("## Total Size = 0x%08x = %d Bytes\n", size, size); - sprintf(buf, "%X", size); - setenv("filesize", buf); + pr_setenv("filesize", "%X", size); err_quit: free(write_buffer); diff --git a/commands/loads.c b/commands/loads.c index 8260673c51..7c5df31251 100644 --- a/commands/loads.c +++ b/commands/loads.c @@ -65,7 +65,6 @@ static ulong load_serial(ulong offset) int type; /* return code for record type */ ulong addr; /* load address from S-Record */ ulong size; /* number of bytes transferred */ - char buf[32]; ulong store_addr; ulong start_addr = ~0; ulong end_addr = 0; @@ -100,8 +99,7 @@ static ulong load_serial(ulong offset) "## Total Size = 0x%08lX = %ld Bytes\n", start_addr, end_addr, size, size ); - sprintf(buf, "%lX", size); - setenv("filesize", buf); + pr_setenv("filesize", "%lX", size); return addr; case SREC_START: break; diff --git a/common/bootsource.c b/common/bootsource.c index 1f8d053a81..79dacfd1d0 100644 --- a/common/bootsource.c +++ b/common/bootsource.c @@ -113,16 +113,12 @@ void bootsource_set(enum bootsource src) void bootsource_set_instance(int instance) { - char buf[32]; - bootsource_instance = instance; if (instance < 0) - sprintf(buf, "unknown"); + setenv("bootsource_instance","unknown"); else - snprintf(buf, sizeof(buf), "%d", instance); - - setenv("bootsource_instance", buf); + pr_setenv("bootsource_instance", "%d", instance); } enum bootsource bootsource_get(void) diff --git a/common/menutree.c b/common/menutree.c index 7fa835a7fe..751350d754 100644 --- a/common/menutree.c +++ b/common/menutree.c @@ -34,14 +34,7 @@ static void menutree_action(struct menu *m, struct menu_entry *me) static void setenv_bool(const char *var, bool val) { - const char *str; - - if (val) - str = "1"; - else - str = "0"; - - setenv(var, str); + pr_setenv(var, "%d", val); } static void menutree_box(struct menu *m, struct menu_entry *me) -- 2.30.2