add native ptql bindings
This commit is contained in:
		
							parent
							
								
									20d17f623e
								
							
						
					
					
						commit
						25994f6abd
					
				@ -21,6 +21,7 @@
 | 
			
		||||
#include "sigar_fileinfo.h"
 | 
			
		||||
#include "sigar_log.h"
 | 
			
		||||
#include "sigar_private.h"
 | 
			
		||||
#include "sigar_ptql.h"
 | 
			
		||||
#include "sigar_util.h"
 | 
			
		||||
#include "sigar_os.h"
 | 
			
		||||
 | 
			
		||||
@ -57,7 +58,7 @@ typedef struct {
 | 
			
		||||
} jni_sigar_t;
 | 
			
		||||
 | 
			
		||||
#define dSIGAR_GET \
 | 
			
		||||
    jni_sigar_t *jsigar = sigar_get_pointer(env, sigar_obj); \
 | 
			
		||||
    jni_sigar_t *jsigar = sigar_get_jpointer(env, sigar_obj); \
 | 
			
		||||
    sigar_t *sigar
 | 
			
		||||
 | 
			
		||||
#define dSIGAR_VOID \
 | 
			
		||||
@ -177,20 +178,22 @@ static void sigar_throw_error(JNIEnv *env, jni_sigar_t *jsigar, int err)
 | 
			
		||||
                   sigar_strerror(jsigar->sigar, err));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static jni_sigar_t *sigar_get_pointer(JNIEnv *env, jobject obj) {
 | 
			
		||||
static void *sigar_get_pointer(JNIEnv *env, jobject obj) {
 | 
			
		||||
    jfieldID pointer_field;
 | 
			
		||||
    jni_sigar_t *jsigar;
 | 
			
		||||
    jclass cls;
 | 
			
		||||
      
 | 
			
		||||
    cls = JENV->GetObjectClass(env, obj);
 | 
			
		||||
    jclass cls = JENV->GetObjectClass(env, obj);
 | 
			
		||||
 | 
			
		||||
#ifdef SIGAR_POINTER_LONG
 | 
			
		||||
    pointer_field = JENV->GetFieldID(env, cls, "longSigarWrapper", "J");
 | 
			
		||||
    jsigar = (jni_sigar_t *) JENV->GetLongField(env, obj, pointer_field);
 | 
			
		||||
    return (void *)JENV->GetLongField(env, obj, pointer_field);
 | 
			
		||||
#else
 | 
			
		||||
    pointer_field = JENV->GetFieldID(env, cls, "sigarWrapper", "I");
 | 
			
		||||
    jsigar = (jni_sigar_t *) JENV->GetIntField(env, obj, pointer_field);
 | 
			
		||||
    return (void *)JENV->GetIntField(env, obj, pointer_field);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static jni_sigar_t *sigar_get_jpointer(JNIEnv *env, jobject obj) {
 | 
			
		||||
    jni_sigar_t *jsigar =
 | 
			
		||||
        (jni_sigar_t *)sigar_get_pointer(env, obj);
 | 
			
		||||
 | 
			
		||||
    if (!jsigar) {
 | 
			
		||||
        sigar_throw_exception(env, "sigar has been closed");
 | 
			
		||||
@ -1069,6 +1072,58 @@ JNIEXPORT jstring SIGAR_JNIx(getFQDN)
 | 
			
		||||
    return JENV->NewStringUTF(env, fqdn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
JNIEXPORT jboolean SIGAR_JNI(ptql_SigarProcessQuery_match)
 | 
			
		||||
(JNIEnv *env, jobject obj, jobject sigar_obj, jlong pid)
 | 
			
		||||
{
 | 
			
		||||
    int status;
 | 
			
		||||
    sigar_ptql_query_t *query =
 | 
			
		||||
        (sigar_ptql_query_t *)sigar_get_pointer(env, obj);
 | 
			
		||||
    dSIGAR(JNI_FALSE);
 | 
			
		||||
 | 
			
		||||
    status = sigar_ptql_query_match(sigar, query, pid);
 | 
			
		||||
 | 
			
		||||
    if (status == SIGAR_OK) {
 | 
			
		||||
        return JNI_TRUE;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return JNI_FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
    ptql = JENV->GetStringUTFChars(env, jptql, &is_copy);
 | 
			
		||||
    status = sigar_ptql_query_create(&query, (char *)ptql);
 | 
			
		||||
    if (is_copy) {
 | 
			
		||||
        JENV->ReleaseStringUTFChars(env, jptql, ptql);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
        sigar_throw_exception(env, "Malformed query"); /*XXX*/
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        sigar_set_pointer(env, obj, query);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
JNIEXPORT void SIGAR_JNI(ptql_SigarProcessQuery_destroy)
 | 
			
		||||
(JNIEnv *env, jobject obj)
 | 
			
		||||
{
 | 
			
		||||
    sigar_ptql_query_t *query =
 | 
			
		||||
        (sigar_ptql_query_t *)sigar_get_pointer(env, obj);
 | 
			
		||||
 | 
			
		||||
    if (query) {
 | 
			
		||||
        sigar_ptql_query_destroy(query);
 | 
			
		||||
        sigar_set_pointer(env, obj, 0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "sigar_getline.h"
 | 
			
		||||
 | 
			
		||||
JNIEXPORT jboolean SIGAR_JNI(util_Getline_isatty)
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,47 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
 | 
			
		||||
 * This file is part of SIGAR.
 | 
			
		||||
 * 
 | 
			
		||||
 * SIGAR is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms version 2 of the GNU General Public License as
 | 
			
		||||
 * published by the Free Software Foundation. This program is distributed
 | 
			
		||||
 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
			
		||||
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
			
		||||
 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
			
		||||
 * details.
 | 
			
		||||
 * 
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
			
		||||
 * USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.hyperic.sigar.ptql;
 | 
			
		||||
 | 
			
		||||
import org.hyperic.sigar.Sigar;
 | 
			
		||||
import org.hyperic.sigar.SigarException;
 | 
			
		||||
import org.hyperic.sigar.SigarProxy;
 | 
			
		||||
import org.hyperic.sigar.SigarProxyCache;
 | 
			
		||||
 | 
			
		||||
public class SigarProcessQuery implements ProcessQuery {
 | 
			
		||||
    int sigarWrapper = 0; //holds the sigar_ptql_query_t *
 | 
			
		||||
    long longSigarWrapper = 0; //same, but where sizeof(void*) > sizeof(int)
 | 
			
		||||
 | 
			
		||||
    native void create(String ptql)
 | 
			
		||||
        throws SigarException;
 | 
			
		||||
 | 
			
		||||
    native void destroy();
 | 
			
		||||
 | 
			
		||||
    protected void finalize() {
 | 
			
		||||
        destroy();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private native boolean match(Sigar sigar, long pid) 
 | 
			
		||||
        throws SigarException;
 | 
			
		||||
 | 
			
		||||
    public boolean match(SigarProxy sigar, long pid) 
 | 
			
		||||
        throws SigarException {
 | 
			
		||||
 | 
			
		||||
        return match(SigarProxyCache.getSigar(sigar), pid);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user