37 #if defined(ENABLE_JNI_HEADERS)
38 # include "native/vm/include/java_lang_VMClassLoader.h"
45 #if defined(ENABLE_ASSERTION)
70 #if defined(ENABLE_JVMTI)
90 #if defined(ENABLE_JVMTI)
106 if ((offset < 0) || (len < 0) || ((offset + len) > ba.
get_length())) {
124 #if defined(ENABLE_JVMTI)
132 &new_class_data_len, &new_class_data);
137 #if defined(ENABLE_JVMTI)
140 if (new_class_data == NULL)
141 c =
class_define(utfname, loader, new_class_data_len, new_class_data, pd);
252 const char *namestart;
274 buffer.
write(utfname);
276 namelen = utfname.
size();
278 bufsize = namelen + strlen(
"0");
279 namestart = buffer.
c_str();
283 if (namestart[0] ==
'/') {
291 if (namelen >= 6 && strcmp(namestart + (namelen - 6),
".class") == 0) {
297 if (searchlen != bufsize-1) {
323 for (SuckClasspath::iterator it = suckclasspath.begin(); it != suckclasspath.end(); it++) {
329 #if defined(ENABLE_ZLIB)
331 pathlen = strlen(
"jar:file://") + lce->
pathlen + strlen(
"!/") + namelen + strlen(
"0");
333 tmppath =
MNEW(
char, pathlen);
335 sprintf(tmppath,
"jar:file://%s!/%s", lce->
path, namestart);
338 MFREE(tmppath,
char, pathlen);
341 pathlen = strlen(
"file://") + lce->
pathlen + namelen + strlen(
"0");
343 tmppath =
MNEW(
char, pathlen);
345 sprintf(tmppath,
"file://%s%s", lce->
path, namestart);
349 if (stat(tmppath + strlen(
"file://") - 1, &buf) == 0)
350 if (!S_ISDIR(buf.st_mode))
353 MFREE(tmppath,
char, pathlen);
354 #if defined(ENABLE_ZLIB)
385 #if defined(ENABLE_ASSERTION)
399 #if defined(ENABLE_ASSERTION)
414 #if defined(ENABLE_ASSERTION)
426 #if defined(ENABLE_ASSERTION)
451 if (strcmp(item->
name,
"") == 0) {
482 #if defined(ENABLE_ASSERTION)
494 #if defined(ENABLE_ASSERTION)
606 int num = packages.size();
612 std::set<Utf8String>::const_iterator it = packages.begin();
613 for (
int i=0; it != packages.end(); ++it,
i++) {
632 { (
char*)
"defineClass", (
char*)
"(Ljava/lang/ClassLoader;Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class;", (
void*) (uintptr_t) &
Java_java_lang_VMClassLoader_defineClass },
JNIEXPORT jboolean JNICALL Java_java_lang_VMClassLoader_defaultAssertionStatus(JNIEnv *env, jclass clazz)
methodinfo * class_resolveclassmethod(classinfo *c, Utf8String name, Utf8String desc, classinfo *referer, bool throwexception)
virtual java_handle_t * get_handle() const
Table containing all native methods registered with the VM.
NativeMethods & get_nativemethods()
classinfo * classcache_lookup(classloader_t *initloader, Utf8String classname)
void register_methods(Utf8String classname, const JNINativeMethod *methods, size_t count)
Register native methods with the VM.
Utf8String to_utf8() const
JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_nativeGetResources(JNIEnv *env, jclass clazz, jstring name)
void exceptions_throw_classnotfoundexception(Utf8String name)
virtual java_handle_array_t * get_handle() const
#define NATIVE_METHODS_COUNT
static JavaString from_utf8(Utf8String)
int8_t * get_raw_data_ptr()
const char * c_str()
get contents of buffer as zero-terminated c-style-string This strings lifetime is tied to it's buffer...
Actual implementation of access class for Java Object arrays.
JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_packageAssertionStatus0(JNIEnv *env, jclass clazz, jobject jtrue, jobject jfalse)
List< assertion_name_t * > * list_assertion_names
typedef void(JNICALL *jvmtiEventSingleStep)(jvmtiEnv *jvmti_env
void jvmti_ClassFileLoadHook(utf *name, int class_data_len, unsigned char *class_data, java_objectheader *loader, java_objectheader *protection_domain, jint *new_class_data_len, unsigned char **new_class_data)
void set_pd(java_handle_t *value)
JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_loadClass(JNIEnv *env, jclass clazz, jstring name, jboolean resolve)
classinfo * load_class_bootstrap(Utf8String name)
JNIEXPORT jboolean JNICALL Java_java_lang_VMClassLoader_getSystemAssertionStatus(JNIEnv *env, jclass clazz)
java_handle_t * vm_call_method(methodinfo *m, java_handle_t *o,...)
JNIEnv jclass jobject const char * name
void set_element(int32_t index, T value)
int32_t vm_call_method_int(methodinfo *m, java_handle_t *o,...)
static std::set< Utf8String > & packages()
JNIEXPORT void JNICALL Java_java_lang_VMClassLoader_resolveClass(JNIEnv *env, jclass clazz, jclass c)
classloader_t * loader_hashtable_classloader_add(java_handle_t *cl)
bool assertion_user_enabled
#define LLNI_classinfo_wrap(classinfo)
int32_t get_length() const
JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_defineClass(JNIEnv *env, jclass clazz, jobject cl, jstring name, jbyteArray data, jint offset, jint len, jobject pd)
This file contains the statistics framework.
JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_classAssertionStatus0(JNIEnv *env, jclass clazz, jobject jtrue, jobject jfalse)
void exceptions_throw_nullpointerexception(void)
JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_findLoadedClass(JNIEnv *env, jclass clazz, jobject loader, jstring name)
static Utf8String find(Utf8String packagename)
Find a package in the list.
static Utf8String from_utf8(const char *, size_t)
int32_t assertion_class_count
JNIEnv jclass jobject loader
JNIEnv jclass jobject const char jobject jint const unsigned char jint unsigned char ** new_class_data
EntryRef find(Utf8String filename)
Find file in zip archive.
static const std::set< Utf8String > & packages()
java_handle_t * native_new_and_init(classinfo *c)
Registers a new native agent by specified by it's library name and with an optional options string...
void exceptions_throw_arrayindexoutofboundsexception(void)
bool assertion_system_enabled
classinfo * link_class(classinfo *c)
JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_getBootPackage(JNIEnv *env, jclass clazz, jstring name)
SuckClasspath & get_suckclasspath()
java_handle_t * exceptions_get_exception(void)
JNIEXPORT jobject JNICALL Java_java_lang_VMClassLoader_getBootPackages(JNIEnv *env, jclass clazz)
#define LLNI_classinfo_unwrap(clazz)
static classinfo * get_class_by_char(char ch)
Returns the primitive class of the given type.
JNIEnv jclass jobject const char jobject jint const unsigned char jint * new_class_data_len
classinfo * class_java_util_HashMap
GNU Classpath java/lang/Class.
classinfo * class_java_util_Vector
classinfo * classcache_lookup_defined(classloader_t *defloader, Utf8String classname)
#define MFREE(ptr, type, num)
int32_t assertion_package_count
classinfo * class_define(Utf8String name, classloader_t *cl, int32_t length, uint8_t *data, java_handle_t *pd)
static JNINativeMethod methods[]
JNIEXPORT jclass JNICALL Java_java_lang_VMClassLoader_getPrimitiveClass(JNIEnv *env, jclass clazz, jchar type)
void _Jv_java_lang_VMClassLoader_init(void)
static VM * get_current()
Utf8String to_utf8_dot_to_slash() const