static int lketama_roll(lua_State *L){ size_t fsiz; char *filename = (char *)luaL_checklstring(L, 1, &fsiz); if( fsiz > 255 ) return luaL_argerror(L, 1, "filename must not be longer than 255 bytes"); contdata *data = lua_newuserdata(L, sizeof(*data)); if(!data) return default_error(L); if(ketama_roll((ketama_continuum*)&data->cont, filename) == 0) return nil_error(L, 0, "continuum fail"); luaL_getmetatable(L, MT_NAME); lua_setmetatable(L, -2); return 1; }
static int default_error(lua_State *L){ return nil_error(L, errno, strerror(errno)); }