8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libdtrace_jni / common / dtj_attr.c
blob83edf12843d415a7875826267ec18ba3b9447d1c
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #pragma ident "%Z%%M% %I% %E% SMI"
29 #include <dtrace_jni.h>
32 * This file creates instances of the Java class
33 * org.opensolaris.os.dtrace.InterfaceAttributes.
36 static const char *
37 dtj_stability_name(dtrace_stability_t stability)
39 const char *name;
40 switch (stability) {
41 case DTRACE_STABILITY_INTERNAL:
42 name = "INTERNAL";
43 break;
44 case DTRACE_STABILITY_PRIVATE:
45 name = "PRIVATE";
46 break;
47 case DTRACE_STABILITY_OBSOLETE:
48 name = "OBSOLETE";
49 break;
50 case DTRACE_STABILITY_EXTERNAL:
51 name = "EXTERNAL";
52 break;
53 case DTRACE_STABILITY_UNSTABLE:
54 name = "UNSTABLE";
55 break;
56 case DTRACE_STABILITY_EVOLVING:
57 name = "EVOLVING";
58 break;
59 case DTRACE_STABILITY_STABLE:
60 name = "STABLE";
61 break;
62 case DTRACE_STABILITY_STANDARD:
63 name = "STANDARD";
64 break;
65 default:
66 name = NULL;
69 return (name);
72 static const char *
73 dtj_dependency_class_name(dtrace_class_t class)
75 const char *name;
76 switch (class) {
77 case DTRACE_CLASS_UNKNOWN:
78 name = "UNKNOWN";
79 break;
80 case DTRACE_CLASS_CPU:
81 name = "CPU";
82 break;
83 case DTRACE_CLASS_PLATFORM:
84 name = "PLATFORM";
85 break;
86 case DTRACE_CLASS_GROUP:
87 name = "GROUP";
88 break;
89 case DTRACE_CLASS_ISA:
90 name = "ISA";
91 break;
92 case DTRACE_CLASS_COMMON:
93 name = "COMMON";
94 break;
95 default:
96 name = NULL;
99 return (name);
102 jobject
103 dtj_new_attribute(dtj_java_consumer_t *jc, const dtrace_attribute_t *attr)
105 JNIEnv *jenv = jc->dtjj_jenv;
107 const char *name;
109 jstring jname = NULL;
110 jobject jattr = NULL; /* return value */
112 jattr = (*jenv)->NewObject(jenv, g_attr_jc, g_attrinit_jm);
113 if ((*jenv)->ExceptionCheck(jenv)) {
114 return (NULL);
117 /* name stability */
118 name = dtj_stability_name(attr->dtat_name);
119 if (!name) {
120 dtj_throw_illegal_argument(jenv,
121 "unexpected name stability value: %d",
122 attr->dtat_name);
123 (*jenv)->DeleteLocalRef(jenv, jattr);
124 return (NULL);
126 jname = (*jenv)->NewStringUTF(jenv, name);
127 if ((*jenv)->ExceptionCheck(jenv)) {
128 (*jenv)->DeleteLocalRef(jenv, jattr);
129 return (NULL);
131 (*jenv)->CallVoidMethod(jenv, jattr, g_attrset_name_jm, jname);
132 (*jenv)->DeleteLocalRef(jenv, jname);
133 if ((*jenv)->ExceptionCheck(jenv)) {
134 (*jenv)->DeleteLocalRef(jenv, jattr);
135 return (NULL);
138 /* data stability */
139 name = dtj_stability_name(attr->dtat_data);
140 if (!name) {
141 dtj_throw_illegal_argument(jenv,
142 "unexpected data stability value: %d",
143 attr->dtat_data);
144 (*jenv)->DeleteLocalRef(jenv, jattr);
145 return (NULL);
147 jname = (*jenv)->NewStringUTF(jenv, name);
148 if ((*jenv)->ExceptionCheck(jenv)) {
149 (*jenv)->DeleteLocalRef(jenv, jattr);
150 return (NULL);
152 (*jenv)->CallVoidMethod(jenv, jattr, g_attrset_data_jm, jname);
153 (*jenv)->DeleteLocalRef(jenv, jname);
154 if ((*jenv)->ExceptionCheck(jenv)) {
155 (*jenv)->DeleteLocalRef(jenv, jattr);
156 return (NULL);
159 /* dependency class */
160 name = dtj_dependency_class_name(attr->dtat_class);
161 if (!name) {
162 dtj_throw_illegal_argument(jenv,
163 "unexpected dependency class value: %d",
164 attr->dtat_class);
165 (*jenv)->DeleteLocalRef(jenv, jattr);
166 return (NULL);
168 jname = (*jenv)->NewStringUTF(jenv, name);
169 if ((*jenv)->ExceptionCheck(jenv)) {
170 (*jenv)->DeleteLocalRef(jenv, jattr);
171 return (NULL);
173 (*jenv)->CallVoidMethod(jenv, jattr, g_attrset_class_jm, jname);
174 (*jenv)->DeleteLocalRef(jenv, jname);
175 if ((*jenv)->ExceptionCheck(jenv)) {
176 (*jenv)->DeleteLocalRef(jenv, jattr);
177 return (NULL);
180 return (jattr);