#include "global.h" #include "ub_env.h" cfg_root_t cfg; int Verbose; extern char compiled[], compiledby[], compilehost[]; static void Usage() { printf( " -= U-Boot-Env =- Tool for u-boot-env nand map management\n" "=== %s === %s@%s ===\n\n" " Syntax: ube [options] [set_value]\n" "\n" "\t-c \tConfig file [default: /etc/ube.conf]\n" "\t-d \tDrive description into config [default: 64K]\n" "\t-g \tSet parameter to value\n" "\t-s \tGet parameter value\n" "\t-q\t\tQuiet mode\n" "\t-v\t\tVerbose ...\n" "\n", compiled, compiledby, compilehost); } int main(int argc, char **argv) { char ch, mode = 0, szName[STRSIZ] = { 0 }, szVal[STRSIZ] = { 0 }, szCfgName[PATH_MAX], szSec[STRSIZ]; const char *str; int ret = 0; strlcpy(szCfgName, UBE_CFGNAME, sizeof szCfgName); strlcpy(szSec, UBE_SECTION, sizeof szSec); while ((ch = getopt(argc, argv, "hvqg:s:c:d:")) != -1) switch (ch) { case 'g': mode |= 1; strlcpy(szName, optarg, sizeof szName); break; case 's': mode |= 2; strlcpy(szName, optarg, sizeof szName); break; case 'c': strlcpy(szCfgName, optarg, sizeof szCfgName); break; case 'd': strlcpy(szSec, optarg, sizeof szSec); break; case 'v': Verbose++; break; case 'q': mode |= 0x80; break; case 'h': default: Usage(); return 1; } argc -= optind; argv += optind; if ((mode & 0x7f) == 2 && argc) strlcpy(szVal, *argv, sizeof szVal); VERB(1) printf("u-boot-env: mode=0x%hhx name=%s value=%s\n", mode, szName, szVal); if (cfgLoadConfig(szCfgName, &cfg)) { printf("Error:: cfgLoadConfig() #%d - %s\n", cfg_GetErrno(), cfg_GetError()); return 1; } if (ub_load(szSec)) { ret = 1; goto end; } if (!(mode & 0x7f)) { VERB(2) printf("u-boot-env: list variables\n"); ub_env(szSec); } if ((mode & 0x7f) & 1) { VERB(2) printf("u-boot-env: get variable %s\n", szName); str = ub_getenv(szSec, szName); if (!str) { printf("Error:: Variable %s not found!\n", szName); ret = 2; goto end; } else if (mode & 0x80) printf("%s\n", str); else printf("%s=%s\n", szName, str); } if ((mode & 0x7f) & 2) { VERB(2) printf("u-boot-env: set variable %s\n", szName); ret = ub_setenv(szSec, szName, argc ? szVal : NULL); if (ret) { printf("Error:: Writing variable %s!\n", szName); ret = 3; goto end; } if (!(mode & 0x80)) printf("Done\n"); } end: ub_unload(); cfgUnloadConfig(&cfg); return ret; }