static int lnewwriter(lua_State *L) { void * msg = lua_touserdata(L, 1); uint32_t sz = luaL_checkunsigned(L, 2); struct boxstm * box = lua_newuserdata(L, sizeof(*box)); box->obj = stm_new(msg,sz); lua_pushvalue(L, lua_upvalueindex(1)); lua_setmetatable(L, -2); return 1; }
static int lnewwriter(lua_State *L) { void * msg; size_t sz; if (lua_isuserdata(L,1)) { msg = lua_touserdata(L, 1); sz = (size_t)luaL_checkinteger(L, 2); } else { const char * tmp = luaL_checklstring(L,1,&sz); msg = skynet_malloc(sz); memcpy(msg, tmp, sz); } struct boxstm * box = lua_newuserdata(L, sizeof(*box)); box->obj = stm_new(msg,sz); lua_pushvalue(L, lua_upvalueindex(1)); lua_setmetatable(L, -2); return 1; }