1
0
Fork 0
Aegisub/vendor/luabins/src/write.c

76 lines
1.6 KiB
C

/*
* write.c
* Luabins Lua-less write API
* See copyright notice in luabins.h
*/
#include "luaheaders.h"
#include "write.h"
int lbs_writeTableHeaderAt(
luabins_SaveBuffer * sb,
size_t offset, /* Pass LUABINS_APPEND to append to the end of buffer */
int array_size,
int hash_size
)
{
int result = lbsSB_grow(sb, 1 + LUABINS_LINT + LUABINS_LINT);
if (result == LUABINS_ESUCCESS)
{
/*
* We have to reset offset here in case it was beyond the buffer.
* Otherwise sequental overwrites may break.
*/
size_t length = lbsSB_length(sb);
if (offset > length)
{
offset = length;
}
lbsSB_overwritechar(sb, offset, LUABINS_CTABLE);
lbsSB_overwrite(
sb,
offset + 1,
(const unsigned char *)&array_size,
LUABINS_LINT
);
lbsSB_overwrite(
sb,
offset + 1 + LUABINS_LINT,
(const unsigned char *)&hash_size,
LUABINS_LINT
);
}
return result;
}
int lbs_writeNumber(luabins_SaveBuffer * sb, lua_Number value)
{
int result = lbsSB_grow(sb, 1 + LUABINS_LNUMBER);
if (result == LUABINS_ESUCCESS)
{
lbsSB_writechar(sb, LUABINS_CNUMBER);
lbsSB_write(sb, (const unsigned char *)&value, LUABINS_LNUMBER);
}
return result;
}
int lbs_writeString(
luabins_SaveBuffer * sb,
const char * value,
size_t length
)
{
int result = lbsSB_grow(sb, 1 + LUABINS_LSIZET + length);
if (result == LUABINS_ESUCCESS)
{
lbsSB_writechar(sb, LUABINS_CSTRING);
lbsSB_write(sb, (const unsigned char *)&length, LUABINS_LSIZET);
lbsSB_write(sb, (const unsigned char *)value, length);
}
return result;
}