static int newcond(lua_State *L) { pthread_cond_t *cond = (pthread_cond_t *) lua_newuserdata(L, pthread_cond_sizeof()); aux_setclass(L, "cond", -1); if (pthread_cond_init(cond, NULL) != 0) luaL_error(L, "unable to create cond"); return 1; }
/*-------------------------------------------------------------------------*\ * Turns a master udp object into a client object. \*-------------------------------------------------------------------------*/ static int meth_setpeername(lua_State *L) { p_udp udp = (p_udp) aux_checkclass(L, "udp{unconnected}", 1); p_tm tm = &udp->tm; const char *address = luaL_checkstring(L, 2); int connecting = strcmp(address, "*"); unsigned short port = connecting ? (unsigned short) luaL_checknumber(L, 3) : (unsigned short) luaL_optnumber(L, 3, 0); const char *err = inet_tryconnect(&udp->sock, address, port, tm); if (err) { lua_pushnil(L); lua_pushstring(L, err); return 2; } /* change class to connected or unconnected depending on address */ if (connecting) aux_setclass(L, "udp{connected}", 1); else aux_setclass(L, "udp{unconnected}", 1); lua_pushnumber(L, 1); return 1; }
/*-------------------------------------------------------------------------*\ * Creates a master udp object \*-------------------------------------------------------------------------*/ static int global_create(lua_State *L) { t_sock sock; const char *err = inet_trycreate(&sock, SOCK_DGRAM); /* try to allocate a system socket */ if (!err) { /* allocate tcp object */ p_udp udp = (p_udp) lua_newuserdata(L, sizeof(t_udp)); aux_setclass(L, "udp{unconnected}", -1); /* initialize remaining structure fields */ sock_setnonblocking(&sock); udp->sock = sock; tm_init(&udp->tm, -1, -1); return 1; } else { lua_pushnil(L); lua_pushstring(L, err); return 2; } }
static int newmutex(lua_State *L) { srm_t *srm = (srm_t *) lua_newuserdata(L, sizeof(srm_t)); if (srm_init(srm) != 0) luaL_error(L, "unable to create mutex"); aux_setclass(L, "mutex", -1); return 1; }