--- embedtools/src/ub_env.c 2014/01/28 22:22:34 1.1.2.4 +++ embedtools/src/ub_env.c 2014/01/28 22:50:37 1.1.2.6 @@ -6,22 +6,45 @@ env_t *env; static int -ub_flash_io(env_t * __restrict e, int mode) +ub_flash_io(const char *csSec, int mode) { - int f, ret = 0; + int f, rlen, ret = 0; + const char *str; + size_t siz; FTRACE(4); - f = open(DRV_UB_ENV_MAP, mode); + str = cfg_getAttribute(&cfg, csSec, "size"); + siz = strtol(str, NULL, 0); + if (!siz) + return -1; + str = cfg_getAttribute(&cfg, csSec, "drive"); + if (!str) { + printf("Error:: drive not found!\n"); + return -1; + } + + f = open(str, mode); if (f == -1) { - printf("Error:: Can't access u-boot-env device %s\n", DRV_UB_ENV_MAP); + printf("Error:: Can't access u-boot-env device %s\n", str); return -1; } if (mode & O_RDWR) { - } else { + rlen = write(f, env, siz); + if (rlen != siz) + printf("Error:: written %d bytes != %d\n", rlen, siz); + else + VERB(3) printf("Written %d bytes\n", rlen); + lseek(f, 0, SEEK_SET); } + rlen = read(f, env, siz); + if (rlen != siz) + printf("Error:: readed %d bytes != %d\n", rlen, siz); + else + VERB(3) printf("Readed %d bytes\n", rlen); + close(f); return ret; } @@ -32,6 +55,8 @@ ub_load(const char *csSec) const char *str; size_t siz; + FTRACE(4); + str = cfg_getAttribute(&cfg, csSec, "size"); siz = strtol(str, NULL, 0); if (!siz) @@ -49,12 +74,14 @@ ub_load(const char *csSec) void ub_unload() { + FTRACE(4); + if (env) e_free(env); } const char* -ub_getenv(const char *csName) +ub_getenv(const char *csSec, const char *csName) { const char *str = NULL; @@ -64,7 +91,7 @@ ub_getenv(const char *csName) } int -ub_setenv(const char *csName, const char *csValue) +ub_setenv(const char *csSec, const char *csName, const char *csValue) { FTRACE(3);