Exemplo n.º 1
0
static void
unpack_table(lua_State *L, struct read_block *rb, int array_size) {
	if (array_size == MAX_COOKIE-1) {
		uint8_t type;
		uint8_t *t = rb_read(rb, sizeof(type));
		if (t==NULL) {
			invalid_stream(L,rb);
		}
		type = *t;
		int cookie = type >> 3;
		if ((type & 7) != TYPE_NUMBER || cookie == TYPE_NUMBER_REAL) {
			invalid_stream(L,rb);
		}
		array_size = get_integer(L,rb,cookie);
	}
Exemplo n.º 2
0
static void
get_buffer(lua_State *L, struct read_block *rb, int len) {
	char * p = rb_read(rb,len);
	if (p == NULL) {
		invalid_stream(L,rb);
	}
	lua_pushlstring(L,p,len);
}
Exemplo n.º 3
0
static lua_Integer
get_integer(lua_State *L, struct read_block *rb, int cookie) {
	switch (cookie) {
	case TYPE_NUMBER_ZERO:
		return 0;
	case TYPE_NUMBER_BYTE:
	{
		uint8_t n;
		uint8_t * pn = rb_read(rb, &n, sizeof(n));
		if (pn == NULL)
			invalid_stream(L, rb);
		n = *pn;
		return n;
	}
	case TYPE_NUMBER_WORD:
	{
		uint16_t n;
		uint16_t * pn = rb_read(rb, &n, sizeof(n));
		if (pn == NULL)
			invalid_stream(L, rb);
		memcpy(&n, pn, sizeof(n));
		return n;
	}
	case TYPE_NUMBER_DWORD:
	{
		int32_t n;
		int32_t * pn = rb_read(rb, &n, sizeof(n));
		if (pn == NULL)
			invalid_stream(L, rb);
		memcpy(&n, pn, sizeof(n));
		return n;
	}
	case TYPE_NUMBER_QWORD:
	{
		int64_t n;
		int64_t * pn = rb_read(rb, &n, sizeof(n));
		if (pn == NULL)
			invalid_stream(L, rb);
		memcpy(&n, pn, sizeof(n));
		return n;
	}
	default:
		invalid_stream(L, rb);
		return 0;
	}
}
Exemplo n.º 4
0
static double
get_real(lua_State *L, struct read_block *rb) {
	double n;
	double * pn = rb_read(rb,sizeof(n));
	if (pn == NULL)
		invalid_stream(L,rb);
	memcpy(&n, pn, sizeof(n));
	return n;
}
Exemplo n.º 5
0
static void *
get_pointer(lua_State *L, struct read_block *rb) {
	void * userdata = 0;
	void ** v = (void **)rb_read(rb,&userdata,sizeof(userdata));
	if (v == NULL) {
		invalid_stream(L,rb);
	}
	return *v;
}