JNIEXPORT jobject SIGAR_JNI(win32_Service_getServiceNames) (JNIEnv *env, jclass, jobject sigar_obj, jstring jptql) { DWORD status; jsigar_list_t obj; sigar_t *sigar = NULL; char *ptql = NULL; sigar_ptql_error_t error; sigar_services_walker_t walker; jboolean is_copy; if (sigar_obj) { if (!(sigar = jsigar_get_sigar(env, sigar_obj))) { return NULL; } } if (jptql) { ptql = (char *)env->GetStringUTFChars(jptql, &is_copy); } walker.sigar = sigar; walker.flags = SERVICE_STATE_ALL; walker.data = &obj; walker.add_service = jsigar_add_service; jsigar_list_init(env, &obj); status = sigar_services_query(ptql, &error, &walker); if (ptql && is_copy) { env->ReleaseStringUTFChars(jptql, ptql); } if (status != SIGAR_OK) { env->DeleteLocalRef(obj.obj); if (status == SIGAR_PTQL_MALFORMED_QUERY) { win32_throw_exception(env, error.message); } else { win32_throw_error(env, status); } return NULL; } return obj.obj; }
JNIEXPORT jobject SIGAR_JNIx(getProcModulesNative) (JNIEnv *env, jobject sigar_obj, jlong pid) { int status; sigar_proc_modules_t procmods; jsigar_list_t obj; dSIGAR(NULL); jsigar_list_init(env, &obj); procmods.module_getter = jsigar_list_add; procmods.data = &obj; if ((status = sigar_proc_modules_get(sigar, pid, &procmods)) != SIGAR_OK) { JENV->DeleteLocalRef(env, obj.obj); sigar_throw_error(env, jsigar, status); return NULL; } return obj.obj; }