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);
    }
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}
Exemple #4
0
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);
    }
}