コード例 #1
0
ファイル: l_event_dispatcher.c プロジェクト: qioixiy/xboot
static int l_event_dispatcher_del_event_listener(lua_State * L)
{
	struct event_listener_t * el = (struct event_listener_t *)luaL_checkudata(L, 1, MT_NAME_EVENT_LISTENER);

	event_base_del_event_listener(runtime_get()->__event_base, el);
	return 0;
}
コード例 #2
0
ファイル: getenv.c プロジェクト: IngenicC/xboot
char * getenv(const char * name)
{
	struct environ_t * environ = &(runtime_get()->__environ);
	struct environ_t * p;
	int len;

	if(!environ)
		return NULL;

	len = strlen(name);
	for(p = environ->next; p != environ; p = p->next)
	{
		if(!strncmp(name, p->content, len) && (p->content[len] == '='))
		{
			return p->content + (len + 1);
		}
	}

	return NULL;
}
コード例 #3
0
ファイル: environ.c プロジェクト: adeelmunir/x210_ics_rtm_v13
bool_t saveenv(char * file)
{
	struct environ_t * environ = &(runtime_get()->__environ);
	struct environ_t * p;
	struct xml * root, * env;
	char * str;
	int fd;

	root = xml_new("environment");
	if(!root)
		return FALSE;

	for(p = environ->next; p != environ; p = p->next)
	{
		env = xml_add_child(root, "env", 0);
		xml_set_txt(env, p->content);
	}

	str = xml_toxml(root);
	if(!str)
	{
		xml_free(root);
		return FALSE;
	}

	fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH));
	if(fd < 0)
	{
		free(str);
		xml_free(root);
		return FALSE;
	}

	write(fd, str, strlen(str));
	close(fd);

	free(str);
	xml_free(root);

	return TRUE;
}
コード例 #4
0
ファイル: putenv.c プロジェクト: IngenicC/xboot
int __put_env(char * str, size_t len, int overwrite)
{
	struct environ_t * environ = &(runtime_get()->__environ);
	struct environ_t * env;
	struct environ_t * p;

	if(!environ)
		return -1;

	for(p = environ->next; p != environ; p = p->next)
	{
		if (!strncmp(p->content, str, len))
		{
			if (!overwrite)
			{
				free(str);
			}
			else
			{
				free(p->content);
				p->content = str;
			}
			return 0;
		}
	}

	env = malloc(sizeof(struct environ_t));
	if(!env)
		return -1;

	env->content = str;
	env->prev = environ->prev;
	env->next = environ;
	environ->prev->next = env;
	environ->prev = env;

	return 0;
}
コード例 #5
0
ファイル: console-input.c プロジェクト: philippe-nuaa/xboot
static ssize_t console_input_read(struct console_t * console, unsigned char * buf, size_t count)
{
	struct console_input_data_t * dat = (struct console_input_data_t *)console->priv;
	struct event_t event;
	u32_t key;
	u8_t sym[16];
	size_t len;

	if(pump_event(runtime_get()->__event_base, &event) && (event.type == EVENT_TYPE_KEY_DOWN) && (event.device == dat->input))
	{
		key = event.e.key_down.key;
		switch(key)
		{
		case KEY_BACKSPACE:
			sym[0] = 0x7f;
			len = 1;
			break;

		case KEY_TAB:
			sym[0] = 0x9;
			len = 1;
			break;

		case KEY_ENTER:
			sym[0] = 0xd;
			len = 1;
			break;

		case KEY_UP:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = 'A';
			len = 3;
			break;

		case KEY_DOWN:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = 'B';
			len = 3;
			break;

		case KEY_LEFT:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = 'D';
			len = 3;
			break;

		case KEY_RIGHT:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = 'C';
			len = 3;
			break;

		case KEY_PAGE_UP:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = '5';
			sym[3] = '~';
			len = 4;
			break;

		case KEY_PAGE_DOWN:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = '6';
			sym[3] = '~';
			len = 4;
			break;

		case KEY_HOME:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = '1';
			sym[3] = '~';
			len = 4;
			break;

		case KEY_END:
			sym[0] = '\e';
			sym[1] = '[';
			sym[2] = '4';
			sym[3] = '~';
			len = 4;
			break;

		case KEY_VOLUME_UP:
		case KEY_VOLUME_DOWN:
		case KEY_MENU:
		case KEY_BACK:
		case KEY_POWER:
			len = 0;
			break;

		default:
			ucs4_to_utf8(&key, 1, (char *)sym, sizeof(sym));
			len = strlen((const char *)sym);
			break;
		}
		fifo_put(dat->fifo, sym, len);
	}

	return fifo_get(dat->fifo, buf, count);
}
コード例 #6
0
ファイル: l_event_dispatcher.c プロジェクト: qioixiy/xboot
static int l_event_dispatcher_run(lua_State * L)
{
	event_base_dispatcher(runtime_get()->__event_base);
	return 0;
}
コード例 #7
0
ファイル: errno.c プロジェクト: adeelmunir/x210_ics_rtm_v13
/*
 * Internal function returning the address of the thread-specific errno
 */
volatile int * __runtime_errno_location(void)
{
	return &(runtime_get()->__errno);
}