--- embedtools/src/ube.c 2014/01/28 08:28:18 1.1.2.2 +++ embedtools/src/ube.c 2014/01/29 01:26:28 1.1.2.9 @@ -2,6 +2,7 @@ #include "ub_env.h" +cfg_root_t cfg; int Verbose; extern char compiled[], compiledby[], compilehost[]; @@ -13,8 +14,11 @@ Usage() "=== %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); } @@ -22,21 +26,35 @@ Usage() int main(int argc, char **argv) { - char ch, mode = 0, szName[STRSIZ], szVal[STRSIZ] = { 0 }; + char ch, mode = 0, szName[STRSIZ] = { 0 }, szVal[STRSIZ] = { 0 }, + szCfgName[PATH_MAX], szSec[STRSIZ]; + const char *str; + int ret = 0; - while ((ch = getopt(argc, argv, "hvg:s:")) != -1) + 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; + mode |= 1; strlcpy(szName, optarg, sizeof szName); break; case 's': - mode = 2; + 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(); @@ -44,15 +62,53 @@ main(int argc, char **argv) } argc -= optind; argv += optind; - if (mode == 2) { - if (!argc) { - Usage(); - return 1; - } else - strlcpy(szVal, *argv, sizeof szVal); + 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; } - VERB(1) printf("u-boot-env: name=%s value=%s\n", szName, szVal); + if (ub_load(szSec)) { + ret = 1; + goto end; + } - return 0; + 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; }