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