--- embedtools/src/ube.c 2014/01/28 08:04:21 1.1 +++ embedtools/src/ube.c 2014/02/05 15:44:06 1.2 @@ -0,0 +1,159 @@ +/************************************************************************* + * (C) 2014 AITNET - Sofia/Bulgaria - + * by Michael Pounov + * + * $Author: misho $ + * $Id: ube.c,v 1.2 2014/02/05 15:44:06 misho Exp $ + * + ************************************************************************* +The ELWIX and AITNET software is distributed under the following +terms: + +All of the documentation and software included in the ELWIX and AITNET +Releases is copyrighted by ELWIX - Sofia/Bulgaria + +Copyright 2004 - 2014 + by Michael Pounov . All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: +This product includes software developed by Michael Pounov +ELWIX - Embedded LightWeight unIX and its contributors. +4. Neither the name of AITNET nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY AITNET AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +*/ +#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; +}