JNIEXPORT jobjectArray SIGAR_JNIx(getWhoList) (JNIEnv *env, jobject sigar_obj) { int status; unsigned int i; sigar_who_list_t wholist; jobjectArray whoarray; jclass cls = SIGAR_FIND_CLASS("Who"); dSIGAR(NULL); if ((status = sigar_who_list_get(sigar, &wholist)) != SIGAR_OK) { sigar_throw_error(env, jsigar, status); return NULL; } JAVA_SIGAR_INIT_FIELDS_WHO(cls); whoarray = JENV->NewObjectArray(env, wholist.number, cls, 0); SIGAR_CHEX; for (i=0; i<wholist.number; i++) { jobject info_obj = JENV->AllocObject(env, cls); SIGAR_CHEX; JAVA_SIGAR_SET_FIELDS_WHO(cls, info_obj, wholist.data[i]); JENV->SetObjectArrayElement(env, whoarray, i, info_obj); SIGAR_CHEX; } sigar_who_list_destroy(sigar, &wholist); return whoarray; }
int lua_sigar_who_get(lua_State *L) { sigar_t *s = *(sigar_t **)luaL_checkudata(L, 1, "sigar"); lua_sigar_who_t *who; who = lua_newuserdata(L, sizeof(lua_sigar_who_t)); who->sigar = s; sigar_who_list_get(s, &(who->who)); if (0 != luaL_newmetatable(L, "sigar_who")) { lua_pushcfunction(L, lua_sigar_who_len); lua_setfield(L, -2, "__len"); lua_pushcfunction(L, lua_sigar_who_get_who); lua_setfield(L, -2, "__index"); lua_pushcfunction(L, lua_sigar_who_gc); lua_setfield(L, -2, "__gc"); } lua_setmetatable(L, -2); return 1; }
static VALUE rb_sigar_who_list(VALUE obj) { int status; sigar_t *sigar = rb_sigar_get(obj); sigar_who_list_t list; VALUE RETVAL; status = sigar_who_list_get(sigar, &list); if (status != SIGAR_OK) { RB_SIGAR_CROAK; } RETVAL = rb_sigar_new_list((char *)&list.data[0], list.number, sizeof(*list.data), rb_cSigarWho); sigar_who_list_destroy(sigar, &list); return RETVAL; }