MVMObject * MVM_platform_uname(MVMThreadContext *tc) { int error; uv_utsname_t uname; MVMObject *result; if ((error = uv_os_uname(&uname)) != 0) MVM_exception_throw_adhoc(tc, "Unable to uname: %s", uv_strerror(error)); MVMROOT(tc, result, { MVMString *sysname = MVM_string_utf8_decode(tc, tc->instance->VMString, uname.sysname, strlen((char *)uname.sysname)); MVMString *release = MVM_string_utf8_decode(tc, tc->instance->VMString, uname.release, strlen((char *)uname.release)); MVMString *version = MVM_string_utf8_decode(tc, tc->instance->VMString, uname.version, strlen((char *)uname.version)); MVMString *machine = MVM_string_utf8_decode(tc, tc->instance->VMString, uname.machine, strlen((char *)uname.machine)); result = MVM_repr_alloc_init(tc, tc->instance->boot_types.BOOTStrArray); MVM_repr_bind_pos_s(tc, result, 0, sysname); MVM_repr_bind_pos_s(tc, result, 1, release); MVM_repr_bind_pos_s(tc, result, 2, version); MVM_repr_bind_pos_s(tc, result, 3, machine); });
static int luv_os_uname(lua_State* L) { uv_utsname_t uname; int ret = uv_os_uname(&uname); if (ret == 0) { lua_newtable(L); lua_pushstring(L, uname.sysname); lua_setfield(L, -2, "sysname"); lua_pushstring(L, uname.release); lua_setfield(L, -2, "release"); lua_pushstring(L, uname.version); lua_setfield(L, -2, "version"); lua_pushstring(L, uname.machine); lua_setfield(L, -2, "machine"); ret = 1; } else ret = luv_error(L, ret); return ret; }