1 |
/* jcl.c |
/* jcl.c |
2 |
Copyright (C) 1998 Free Software Foundation, Inc. |
Copyright (C) 1998, 2005 Free Software Foundation, Inc. |
3 |
|
|
4 |
This file is part of GNU Classpath. |
This file is part of GNU Classpath. |
5 |
|
|
193 |
{ |
{ |
194 |
if (rawDataClass == NULL) |
if (rawDataClass == NULL) |
195 |
{ |
{ |
196 |
#ifdef POINTERS_ARE_64BIT |
jclass tmp; |
197 |
|
#if SIZEOF_VOID_P == 8 |
198 |
rawDataClass = (*env)->FindClass (env, "gnu/classpath/Pointer64"); |
rawDataClass = (*env)->FindClass (env, "gnu/classpath/Pointer64"); |
199 |
if (rawDataClass == NULL) |
if (rawDataClass == NULL) |
200 |
{ |
{ |
244 |
} |
} |
245 |
|
|
246 |
#endif |
#endif |
247 |
(*env)->DeleteLocalRef(env, rawDataClass); |
tmp = (*env)->NewGlobalRef (env, rawDataClass); |
248 |
rawDataClass = (*env)->NewGlobalRef (env, rawDataClass); |
if (tmp == NULL) |
|
if (rawDataClass == NULL) |
|
249 |
{ |
{ |
250 |
JCL_ThrowException (env, "java/lang/InternalError", |
JCL_ThrowException (env, "java/lang/InternalError", |
251 |
"unable to create an internal global ref"); |
"unable to create an internal global ref"); |
252 |
return NULL; |
return NULL; |
253 |
} |
} |
254 |
|
(*env)->DeleteLocalRef(env, rawDataClass); |
255 |
|
rawDataClass = tmp; |
256 |
} |
} |
257 |
|
|
258 |
#ifdef POINTERS_ARE_64BIT |
#if SIZEOF_VOID_P == 8 |
259 |
return (*env)->NewObject (env, rawDataClass, rawData_mid, (jlong) data); |
return (*env)->NewObject (env, rawDataClass, rawData_mid, (jlong) data); |
260 |
#else |
#else |
261 |
return (*env)->NewObject (env, rawDataClass, rawData_mid, (jint) data); |
return (*env)->NewObject (env, rawDataClass, rawData_mid, (jint) data); |
265 |
JNIEXPORT void * JNICALL |
JNIEXPORT void * JNICALL |
266 |
JCL_GetRawData (JNIEnv * env, jobject rawdata) |
JCL_GetRawData (JNIEnv * env, jobject rawdata) |
267 |
{ |
{ |
268 |
#ifdef POINTERS_ARE_64BIT |
#if SIZEOF_VOID_P == 8 |
269 |
return (void *) (*env)->GetLongField (env, rawdata, rawData_fid); |
return (void *) (*env)->GetLongField (env, rawdata, rawData_fid); |
270 |
#else |
#else |
271 |
return (void *) (*env)->GetIntField (env, rawdata, rawData_fid); |
return (void *) (*env)->GetIntField (env, rawdata, rawData_fid); |