File:  [ELWIX - Embedded LightWeight unIX -] / embedtools / src / ub_env.c
Revision 1.1.2.8: download - view: text, annotated - select for diffs - revision graph
Tue Jan 28 23:30:46 2014 UTC (10 years, 4 months ago) by misho
Branches: tools2_0
change

#include "global.h"
#include "ub_env.h"


env_t *env;


static int
ub_flash_io(const char *csSec, int mode)
{
	int f, l, rlen;
	const char *str;
	size_t siz;
	ait_val_t v;

	FTRACE(4);

	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;
	}

	cfg_loadAttribute(&cfg, "ube", "lock", &v, UBE_LOCK);
	l = open(AIT_GET_STR(&v), O_CREAT | O_EXCL | O_WRONLY, 0644);
	if (l == -1) {
		printf("Error:: Locked u-boot-env map %s\n", AIT_GET_STR(&v));
		AIT_FREE_VAL(&v);
		return -1;
	}

	f = open(str, mode);
	if (f == -1) {
		printf("Error:: Can't access u-boot-env device %s\n", str);
		close(l);
		unlink(AIT_GET_STR(&v));
		AIT_FREE_VAL(&v);
		return -1;
	}

	if (mode & O_RDWR) {
		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);
	close(l);
	unlink(AIT_GET_STR(&v));
	AIT_FREE_VAL(&v);
	return 0;
}

int
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)
		return -1;

	env = e_malloc(siz);
	if (!env) {
		ELIBERR(elwix);
		return -1;
	}

	return ub_flash_io(csSec, O_RDONLY);
}

void
ub_unload()
{
	FTRACE(4);

	if (env)
		e_free(env);
}

const char*
ub_getenv(const char *csSec, const char *csName)
{
	const char *str = NULL;

	FTRACE(3);

	return str;
}

int
ub_setenv(const char *csSec, const char *csName, const char *csValue)
{
	FTRACE(3);

	return 0;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>