Skip to content
Snippets Groups Projects
cmd_nvedit.c 29.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • 					goto sep_err;
    				sep = '\0';
    				chk = 1;
    				break;
    			case 't':		/* text format */
    				if (fmt++)
    					goto sep_err;
    				sep = '\n';
    				break;
    			case 'd':
    				del = 1;
    				break;
    			default:
    
    	if (argc < 1)
    
    
    	if (!fmt)
    		printf("## Warning: defaulting to text format\n");
    
    	addr = (char *)simple_strtoul(argv[0], NULL, 16);
    
    	if (argc == 2) {
    		size = simple_strtoul(argv[1], NULL, 16);
    	} else {
    		char *s = addr;
    
    		size = 0;
    
    		while (size < MAX_ENV_SIZE) {
    			if ((*s == sep) && (*(s+1) == '\0'))
    				break;
    			++s;
    			++size;
    		}
    		if (size == MAX_ENV_SIZE) {
    			printf("## Warning: Input data exceeds %d bytes"
    				" - truncated\n", MAX_ENV_SIZE);
    		}
    
    		printf("## Info: input data size = %zu = 0x%zX\n", size, size);
    
    	}
    
    	if (chk) {
    		uint32_t crc;
    		env_t *ep = (env_t *)addr;
    
    		size -= offsetof(env_t, data);
    		memcpy(&crc, &ep->crc, sizeof(crc));
    
    		if (crc32(0, ep->data, size) != crc) {
    			puts("## Error: bad CRC, import failed\n");
    			return 1;
    		}
    		addr = (char *)ep->data;
    	}
    
    
    	if (himport_r(&env_htab, addr, size, sep, del ? 0 : H_NOCLEAR,
    
    			0, NULL) == 0) {
    
    		error("Environment import failed: errno = %d\n", errno);
    		return 1;
    	}
    	gd->flags |= GD_FLG_ENV_READY;
    
    	return 0;
    
    sep_err:
    	printf("## %s: only one of \"-b\", \"-c\" or \"-t\" allowed\n",
    		cmd);
    	return 1;
    }
    
    
    /*
     * New command line interface: "env" command with subcommands
     */
    static cmd_tbl_t cmd_env_sub[] = {
    #if defined(CONFIG_CMD_ASKENV)
    	U_BOOT_CMD_MKENT(ask, CONFIG_SYS_MAXARGS, 1, do_env_ask, "", ""),
    #endif
    	U_BOOT_CMD_MKENT(default, 1, 0, do_env_default, "", ""),
    
    	U_BOOT_CMD_MKENT(delete, CONFIG_SYS_MAXARGS, 0, do_env_delete, "", ""),
    
    #if defined(CONFIG_CMD_EDITENV)
    	U_BOOT_CMD_MKENT(edit, 2, 0, do_env_edit, "", ""),
    #endif
    
    #if defined(CONFIG_CMD_ENV_CALLBACK)
    	U_BOOT_CMD_MKENT(callbacks, 1, 0, do_env_callback, "", ""),
    #endif
    
    #if defined(CONFIG_CMD_ENV_FLAGS)
    	U_BOOT_CMD_MKENT(flags, 1, 0, do_env_flags, "", ""),
    #endif
    
    #if defined(CONFIG_CMD_EXPORTENV)
    
    	U_BOOT_CMD_MKENT(export, 4, 0, do_env_export, "", ""),
    
    #if defined(CONFIG_CMD_GREPENV)
    	U_BOOT_CMD_MKENT(grep, CONFIG_SYS_MAXARGS, 1, do_env_grep, "", ""),
    #endif
    
    #if defined(CONFIG_CMD_IMPORTENV)
    
    	U_BOOT_CMD_MKENT(import, 5, 0, do_env_import, "", ""),
    
    	U_BOOT_CMD_MKENT(print, CONFIG_SYS_MAXARGS, 1, do_env_print, "", ""),
    #if defined(CONFIG_CMD_RUN)
    	U_BOOT_CMD_MKENT(run, CONFIG_SYS_MAXARGS, 1, do_run, "", ""),
    #endif
    #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
    	U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""),
    #endif
    	U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""),
    };
    
    
    #if defined(CONFIG_NEEDS_MANUAL_RELOC)
    
    void env_reloc(void)
    {
    	fixup_cmdtable(cmd_env_sub, ARRAY_SIZE(cmd_env_sub));
    }
    #endif
    
    
    static int do_env(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
    
    	/* drop initial "env" arg */
    	argc--;
    	argv++;
    
    	cp = find_cmd_tbl(argv[0], cmd_env_sub, ARRAY_SIZE(cmd_env_sub));
    
    	if (cp)
    		return cp->cmd(cmdtp, flag, argc, argv);
    
    
    #ifdef CONFIG_SYS_LONGHELP
    static char env_help_text[] =
    
    #if defined(CONFIG_CMD_ASKENV)
    	"ask name [message] [size] - ask for environment variable\nenv "
    
    #endif
    #if defined(CONFIG_CMD_ENV_CALLBACK)
    	"callbacks - print callbacks and their associated variables\nenv "
    
    	"default [-f] -a - [forcibly] reset default environment\n"
    	"env default [-f] var [...] - [forcibly] reset variable(s) to their default values\n"
    
    	"env delete [-f] var [...] - [forcibly] delete variable(s)\n"
    
    #if defined(CONFIG_CMD_EDITENV)
    	"env edit name - edit environment variable\n"
    #endif
    
    #if defined(CONFIG_CMD_EXPORTENV)
    
    	"env export [-t | -b | -c] [-s size] addr [var ...] - export environment\n"
    
    #if defined(CONFIG_CMD_ENV_FLAGS)
    	"env flags - print variables that have non-default flags\n"
    #endif
    
    #if defined(CONFIG_CMD_GREPENV)
    
    #ifdef CONFIG_REGEX
    	"env grep [-e] [-n | -v | -b] string [...] - search environment\n"
    #else
    
    	"env grep [-n | -v | -b] string [...] - search environment\n"
    
    #endif
    
    #if defined(CONFIG_CMD_IMPORTENV)
    
    	"env import [-d] [-t | -b | -c] addr [size] - import environment\n"
    
    	"env print [-a | name ...] - print environment\n"
    
    #if defined(CONFIG_CMD_RUN)
    	"env run var [...] - run commands in an environment variable\n"
    #endif
    
    #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
    
    	"env save - save environment\n"
    
    	"env set [-f] name [arg ...]\n";
    #endif
    
    U_BOOT_CMD(
    	env, CONFIG_SYS_MAXARGS, 1, do_env,
    	"environment handling commands", env_help_text
    
    );
    
    /*
     * Old command line interface, kept for compatibility
     */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    Peter Tyser's avatar
    Peter Tyser committed
    #if defined(CONFIG_CMD_EDITENV)
    
    U_BOOT_CMD_COMPLETE(
    
    Peter Tyser's avatar
    Peter Tyser committed
    	"edit environment variable",
    	"name\n"
    
    	"    - edit environment variable 'name'",
    	var_complete
    
    U_BOOT_CMD_COMPLETE(
    
    	printenv, CONFIG_SYS_MAXARGS, 1,	do_env_print,
    
    Peter Tyser's avatar
    Peter Tyser committed
    	"print environment variables",
    
    	"[-a]\n    - print [all] values of all environment variables\n"
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"printenv name ...\n"
    
    	"    - print value of environment variable 'name'",
    	var_complete
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    );
    
    
    #ifdef CONFIG_CMD_GREPENV
    U_BOOT_CMD_COMPLETE(
    	grepenv, CONFIG_SYS_MAXARGS, 0,  do_env_grep,
    	"search environment variables",
    
    #ifdef CONFIG_REGEX
    	"[-e] [-n | -v | -b] string ...\n"
    #else
    
    	"[-n | -v | -b] string ...\n"
    
    	"    - list environment name=value pairs matching 'string'\n"
    
    #ifdef CONFIG_REGEX
    	"      \"-e\": enable regular expressions;\n"
    #endif
    
    	"      \"-n\": search variable names; \"-v\": search values;\n"
    	"      \"-b\": search both names and values (default)",
    
    	var_complete
    );
    #endif
    
    
    U_BOOT_CMD_COMPLETE(
    
    	setenv, CONFIG_SYS_MAXARGS, 0,	do_env_set,
    
    Peter Tyser's avatar
    Peter Tyser committed
    	"set environment variables",
    
    	"[-f] name value ...\n"
    	"    - [forcibly] set environment variable 'name' to 'value ...'\n"
    	"setenv [-f] name\n"
    	"    - [forcibly] delete environment variable 'name'",
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    );
    
    
    #if defined(CONFIG_CMD_ASKENV)
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    	askenv,	CONFIG_SYS_MAXARGS,	1,	do_env_ask,
    
    Peter Tyser's avatar
    Peter Tyser committed
    	"get environment variables from stdin",
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"name [message] [size]\n"
    
    	"    - get environment variable 'name' from stdin (max 'size' chars)"
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    );
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    U_BOOT_CMD_COMPLETE(
    
    	run,	CONFIG_SYS_MAXARGS,	1,	do_run,
    
    Peter Tyser's avatar
    Peter Tyser committed
    	"run commands in an environment variable",
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    	"var [...]\n"
    
    	"    - run the commands in the environment variable(s) 'var'",
    	var_complete
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    );
    
    #endif /* CONFIG_SPL_BUILD */