summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2018-06-27 23:46:18 +0200
committerLeo C2018-06-27 23:46:18 +0200
commit8eb73d1751705942b4f0891a90a669ce63b98866 (patch)
treea06b6ca85ef553469532a1cd79ce880f931eca49
parent447a805f04115a0e32a1b9ad6be7c0177c3f8977 (diff)
downloadz180-stamp-8eb73d1751705942b4f0891a90a669ce63b98866.zip
command printenv: new option -s: Print env variables in setenv commands.
-rw-r--r--avr/command_tbl.c8
-rw-r--r--avr/env.c47
2 files changed, 38 insertions, 17 deletions
diff --git a/avr/command_tbl.c b/avr/command_tbl.c
index ed14db9..592858a 100644
--- a/avr/command_tbl.c
+++ b/avr/command_tbl.c
@@ -126,10 +126,10 @@ CMD_TBL_ITEM_COMPLETE(
CMD_TBL_ITEM_COMPLETE(
printenv, CONFIG_SYS_MAXARGS, 1, do_env_print,
"print environment variables",
- "\n"
- " - print values of all environment variables\n"
- "printenv name ...\n"
- " - print value of environment variable 'name'",
+ "[-s] [name ...]\n"
+ " Print value of environment variable(s) 'name'\n"
+ " If no names are given, print values of all environment variables\n"
+ " -s Print in setenv form",
var_complete
),
CMD_TBL_ITEM_COMPLETE(
diff --git a/avr/env.c b/avr/env.c
index 952c88a..b45f0af 100644
--- a/avr/env.c
+++ b/avr/env.c
@@ -398,14 +398,18 @@ int saveenv(void)
static
-int env_item_print(env_item_t *ep)
+int env_item_print(env_item_t *ep, bool mode)
{
int len;
char *ev = ep->envvar;
+ if (mode) {
+ len = printf_P(PSTR("setenv %s "), ev) - 7;
+ len += printf_P(PSTR("'%s'\n"), ev + len) - 2;
+ } else {
len = printf_P(PSTR("%s="), ev);
len += printf_P(PSTR("%s\n"), ev + len);
-
+ }
return len;
}
@@ -416,7 +420,7 @@ int env_item_print(env_item_t *ep)
* Returns -1 in case of error, or length of printed string
*/
static
-int env_print(const MEMX char *name)
+int env_print(const MEMX char *name, bool mode)
{
int len = -1;
@@ -424,12 +428,12 @@ int env_print(const MEMX char *name)
env_item_t *ep = envlist_search(name);
if (ep != NULL)
- len = env_item_print(ep);
+ len = env_item_print(ep, mode);
} else { /* print whole list */
len = 0;
for (int i = 0 ; i < entrycount; i++) {
- len += env_item_print(&env_list[i]);
+ len += env_item_print(&env_list[i], mode);
}
}
return len;
@@ -646,27 +650,44 @@ bool getenv_yesno(const MEMX char *name)
command_ret_t do_env_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
+ (void) cmdtp; (void) flag;
+
+ bool mode = 0;
command_ret_t rc = CMD_RET_SUCCESS;
- (void) cmdtp; (void) flag;
+ /* reset getopt() */
+ optind = 0;
+
+ int opt;
+ while ((opt = getopt(argc, argv, PSTR("s"))) != -1) {
+ switch (opt) {
+ case 's':
+ mode = 1;
+ break;
+ default: /* '?' */
+ return CMD_RET_USAGE;
+ }
+ }
- if (argc == 1) {
+ if (optind == argc) {
/* print all env vars */
- int size = env_print(NULL);
+ int size = env_print(NULL, mode);
if (size < 0)
return CMD_RET_FAILURE;
- printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"),
- size, ENV_SIZE);
+ if (mode == 0)
+ printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"),
+ size, ENV_SIZE);
return CMD_RET_SUCCESS;
}
/* print selected env vars */
- for (int i = 1; i < argc; ++i) {
- int rc = env_print(argv[i]);
+ while (optind < argc) {
+ int rc = env_print(argv[optind], mode);
if (rc < 0) {
- printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[i]);
+ printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[optind]);
rc = CMD_RET_FAILURE;
}
+ optind++;
}
return rc;