JNIEXPORT void SIGAR_JNI(ptql_SigarProcessQuery_create) (JNIEnv *env, jobject obj, jstring jptql) { int status; jboolean is_copy; sigar_ptql_query_t *query; sigar_ptql_error_t error; #ifdef WIN32 LPCTSTR ptql; char ptql_ch[3000]; ptql = (LPCTSTR)JENV->GetStringChars(env, jptql, &is_copy); SIGAR_W2A((LPCWSTR)ptql, ptql_ch, sizeof(ptql_ch)); status = sigar_ptql_query_create(&query, ptql_ch, &error); if (is_copy) { JENV->ReleaseStringChars(env, jptql, (const jchar *)ptql); } #else const char *ptql; ptql = JENV->GetStringUTFChars(env, jptql, &is_copy); status = sigar_ptql_query_create(&query, (char *)ptql, &error); if (is_copy) { JENV->ReleaseStringUTFChars(env, jptql, ptql); } #endif if (status != SIGAR_OK) { sigar_throw_ptql_malformed(env, error.message); } else { sigar_set_pointer(env, obj, query); } }
static sigar_pid_t rb_sigar_pid_get(rb_sigar_t *rbsigar, VALUE obj) { SIGAR; if (TYPE(obj) == T_STRING) { char *pid = StringValuePtr(obj); if (sigar_isdigit(*pid)) { obj = rb_str2inum(obj, 10); /* fallthru */ } else if ((RSTRING_LEN(obj) == 2) && (*pid == '$') && (*(pid + 1) == '$')) { return sigar_pid_get(sigar); } else { /* XXX cache queries */ sigar_ptql_query_t *query; sigar_ptql_error_t error; int status = sigar_ptql_query_create(&query, (char *)pid, &error); if (status == SIGAR_OK) { sigar_pid_t qpid; sigar_ptql_re_impl_set(sigar, NULL, rbsigar_ptql_re_impl); status = sigar_ptql_query_find_process(sigar, query, &qpid); sigar_ptql_re_impl_set(sigar, NULL, NULL); sigar_ptql_query_destroy(query); if (status == SIGAR_OK) { return qpid; } else { RB_SIGAR_RAISE(sigar_strerror(sigar, status)); } } else { RB_SIGAR_RAISE(error.message); } } } return NUM2UINT(obj); }
static VALUE rb_sigar_proc_list(int argc, VALUE *argv, VALUE obj) { SIGAR_GET; int status; sigar_proc_list_t list; VALUE RETVAL; VALUE vptql; rb_scan_args(argc, argv, "01", &vptql); if (NIL_P(vptql)) { status = sigar_proc_list_get(sigar, &list); if (status != SIGAR_OK) { RB_SIGAR_CROAK; } } else { sigar_ptql_query_t *query; sigar_ptql_error_t error; char *ptql = StringValuePtr(vptql); status = sigar_ptql_query_create(&query, ptql, &error); if (status != SIGAR_OK) { RB_SIGAR_RAISE(error.message); } sigar_ptql_re_impl_set(sigar, NULL, rbsigar_ptql_re_impl); status = sigar_ptql_query_find(sigar, query, &list); sigar_ptql_re_impl_set(sigar, NULL, NULL); sigar_ptql_query_destroy(query); if (status != SIGAR_OK) { RB_SIGAR_RAISE(sigar_strerror(sigar, status)); } } RETVAL = rb_sigar_new_intlist(&list.data[0], list.number); sigar_proc_list_destroy(sigar, &list); return RETVAL; }
JNIEXPORT void SIGAR_JNI(ptql_SigarProcessQuery_create) (JNIEnv *env, jobject obj, jstring jptql) { int status; jboolean is_copy; const char *ptql; sigar_ptql_query_t *query; sigar_ptql_error_t error; ptql = JENV->GetStringUTFChars(env, jptql, &is_copy); status = sigar_ptql_query_create(&query, (char *)ptql, &error); if (is_copy) { JENV->ReleaseStringUTFChars(env, jptql, ptql); } if (status != SIGAR_OK) { sigar_throw_ptql_malformed(env, error.message); } else { sigar_set_pointer(env, obj, query); } }