lua-users home
lua-l archive

Re: binary data as string snag

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi,
John Belmonte wrote:
> I started implementing Perl-style pack/unpack functions using Lua strings for
> binary data but ran into a snag. Using strings is fine if you're just looking
> to write data out to a file.
> However if you want to pass the strings to C to be used directly then there are
> alignment issues.
You could try to stuff padding bytes at the head of the string (number of bytes
detected during libsetup). But I would simply copy it like that:
struct bar {...};
extern void foo(struct bar *);
static int
call_foo(lua_State *L)
{
	struct bar tmp;
	foo(arg_check_struct(L, 1, &tmp, sizeof(tmp)));
	return 0;
}
static void *
arg_check_struct(lua_State *L, int argno, void *buf, size_t len)
{
	size_t l;
	char *str = luaL_check_lstr(L, argno, &l);
	luaL_arg_check(L, l == len, argno, "invalid structure size");
	memcpy(buf, str, l);
	return buf;
}
Compared to the creation of the packed strings the time to copy it once more
should be negligible. Only 'P' will not work that way. The last resort
would be a userdata...
Ciao, ET.

AltStyle によって変換されたページ (->オリジナル) /