xref: /onnv-gate/usr/src/lib/libdtrace_jni/common/dtj_probe.c (revision 1449:5ac202d7f3a7)
1*1449Stomee /*
2*1449Stomee  * CDDL HEADER START
3*1449Stomee  *
4*1449Stomee  * The contents of this file are subject to the terms of the
5*1449Stomee  * Common Development and Distribution License (the "License").
6*1449Stomee  * You may not use this file except in compliance with the License.
7*1449Stomee  *
8*1449Stomee  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*1449Stomee  * or http://www.opensolaris.org/os/licensing.
10*1449Stomee  * See the License for the specific language governing permissions
11*1449Stomee  * and limitations under the License.
12*1449Stomee  *
13*1449Stomee  * When distributing Covered Code, include this CDDL HEADER in each
14*1449Stomee  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*1449Stomee  * If applicable, add the following below this CDDL HEADER, with the
16*1449Stomee  * fields enclosed by brackets "[]" replaced with your own identifying
17*1449Stomee  * information: Portions Copyright [yyyy] [name of copyright owner]
18*1449Stomee  *
19*1449Stomee  * CDDL HEADER END
20*1449Stomee  */
21*1449Stomee 
22*1449Stomee /*
23*1449Stomee  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24*1449Stomee  * Use is subject to license terms.
25*1449Stomee  */
26*1449Stomee 
27*1449Stomee #pragma ident	"%Z%%M%	%I%	%E% SMI"
28*1449Stomee 
29*1449Stomee #include <string.h>
30*1449Stomee #include <dtrace_jni.h>
31*1449Stomee 
32*1449Stomee /*
33*1449Stomee  * This file creates instances of the following Java classes:
34*1449Stomee  *	- org.opensolaris.os.dtrace.ProbeDescription
35*1449Stomee  *	- org.opensolaris.os.dtrace.ProbeInfo
36*1449Stomee  */
37*1449Stomee 
38*1449Stomee jobject
dtj_new_probedesc(dtj_java_consumer_t * jc,const dtrace_probedesc_t * probedesc)39*1449Stomee dtj_new_probedesc(dtj_java_consumer_t *jc, const dtrace_probedesc_t *probedesc)
40*1449Stomee {
41*1449Stomee 	JNIEnv *jenv = jc->dtjj_jenv;
42*1449Stomee 
43*1449Stomee 	jstring jprov = NULL;
44*1449Stomee 	jstring jmod = NULL;
45*1449Stomee 	jstring jfunc = NULL;
46*1449Stomee 	jstring jname = NULL;
47*1449Stomee 	jobject jprobedesc = NULL;
48*1449Stomee 
49*1449Stomee 	jprov = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_provider);
50*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
51*1449Stomee 		goto cleanup;
52*1449Stomee 	}
53*1449Stomee 	jmod = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_mod);
54*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
55*1449Stomee 		goto cleanup;
56*1449Stomee 	}
57*1449Stomee 	jfunc = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_func);
58*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
59*1449Stomee 		goto cleanup;
60*1449Stomee 	}
61*1449Stomee 	jname = (*jenv)->NewStringUTF(jenv, probedesc->dtpd_name);
62*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
63*1449Stomee 		goto cleanup;
64*1449Stomee 	}
65*1449Stomee 	jprobedesc = (*jenv)->NewObject(jenv, g_probedesc_jc,
66*1449Stomee 	    g_probedescinit_jm, jprov, jmod, jfunc, jname);
67*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
68*1449Stomee 		goto cleanup;
69*1449Stomee 	}
70*1449Stomee 	/* Does not throw exceptions */
71*1449Stomee 	(*jenv)->SetIntField(jenv, jprobedesc, g_probedesc_id_jf,
72*1449Stomee 	    probedesc->dtpd_id);
73*1449Stomee 
74*1449Stomee cleanup:
75*1449Stomee 
76*1449Stomee 	(*jenv)->DeleteLocalRef(jenv, jprov);
77*1449Stomee 	(*jenv)->DeleteLocalRef(jenv, jmod);
78*1449Stomee 	(*jenv)->DeleteLocalRef(jenv, jfunc);
79*1449Stomee 	(*jenv)->DeleteLocalRef(jenv, jname);
80*1449Stomee 	return (jprobedesc);
81*1449Stomee }
82*1449Stomee 
83*1449Stomee jobject
dtj_new_probeinfo(dtj_java_consumer_t * jc,const dtrace_probeinfo_t * probeinfo)84*1449Stomee dtj_new_probeinfo(dtj_java_consumer_t *jc, const dtrace_probeinfo_t *probeinfo)
85*1449Stomee {
86*1449Stomee 	JNIEnv *jenv = jc->dtjj_jenv;
87*1449Stomee 
88*1449Stomee 	jobject jprobeattr = NULL;
89*1449Stomee 	jobject jargattr = NULL;
90*1449Stomee 	jobject jprobeinfo = NULL; /* return value */
91*1449Stomee 
92*1449Stomee 	jprobeattr = dtj_new_attribute(jc, &probeinfo->dtp_attr);
93*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
94*1449Stomee 		return (NULL);
95*1449Stomee 	}
96*1449Stomee 	jargattr = dtj_new_attribute(jc, &probeinfo->dtp_arga);
97*1449Stomee 	if ((*jenv)->ExceptionCheck(jenv)) {
98*1449Stomee 		(*jenv)->DeleteLocalRef(jenv, jprobeattr);
99*1449Stomee 		return (NULL);
100*1449Stomee 	}
101*1449Stomee 
102*1449Stomee 	jprobeinfo = (*jenv)->NewObject(jenv, g_probeinfo_jc,
103*1449Stomee 	    g_probeinfoinit_jm, jprobeattr, jargattr);
104*1449Stomee 
105*1449Stomee 	(*jenv)->DeleteLocalRef(jenv, jprobeattr);
106*1449Stomee 	(*jenv)->DeleteLocalRef(jenv, jargattr);
107*1449Stomee 	return (jprobeinfo);
108*1449Stomee }
109