ArrayUInt8* Reader::openZip(JnjvmBootstrapLoader* loader, ZipArchive* archive, const char* filename) { ArrayUInt8* res = 0; llvm_gcroot(res, 0); ZipFile* file = archive->getFile(filename); if (file != 0) { UserClassArray* array = loader->upcalls->ArrayOfByte; res = (ArrayUInt8*)array->doNew((sint32)file->ucsize, JavaThread::get()->getJVM()); if (archive->readFile(res, file) != 0) { return res; } } return NULL; }
extern "C" JavaObject* Java_java_lang_reflect_AccessibleObject_getDeclaredAnnotations__() { JavaObject* res = 0; llvm_gcroot(res, 0); BEGIN_NATIVE_EXCEPTION(0) Jnjvm* vm = JavaThread::get()->getJVM(); UserClassArray* array = vm->upcalls->constructorArrayAnnotation; res = array->doNew(0, vm); END_NATIVE_EXCEPTION return res; }
ArrayUInt8* Reader::openFile(JnjvmBootstrapLoader* loader, const char* path) { ArrayUInt8* res = NULL; llvm_gcroot(res, 0); FILE* fp = fopen(path, "r"); if (fp != 0) { fseek(fp, 0, SeekEnd); long nbb = ftell(fp); fseek(fp, 0, SeekSet); UserClassArray* array = loader->upcalls->ArrayOfByte; res = (ArrayUInt8*)array->doNew((sint32)nbb, JavaThread::get()->getJVM()); if (fread(ArrayUInt8::getElements(res), nbb, 1, fp) == 0) { fprintf(stderr, "fread error\n"); abort(); } fclose(fp); } return res; }