Ejemplo n.º 1
0
/*
 * Class:     org_haggle_DataObject
 * Method:    getAttribute
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/haggle/Attribute;
 */
JNIEXPORT jobject JNICALL Java_org_haggle_DataObject_getAttribute__Ljava_lang_String_2Ljava_lang_String_2(JNIEnv *env, jobject obj, jstring name, jstring value)
{
        haggle_attr_t *attr;
	const char *namestr, *valuestr;

        namestr = (*env)->GetStringUTFChars(env, name, 0); 
        
        if (!namestr)
                return NULL;
	
        valuestr = (*env)->GetStringUTFChars(env, value, 0); 
        
        if (!valuestr) {
		(*env)->ReleaseStringUTFChars(env, name, namestr);
		return NULL;
	}
        attr = haggle_dataobject_get_attribute_by_name_value((haggle_dobj_t *)get_native_handle(env, JCLASS_DATAOBJECT, obj), namestr, valuestr);

	(*env)->ReleaseStringUTFChars(env, name, namestr);
	(*env)->ReleaseStringUTFChars(env, value, valuestr);

        if (!attr)
                return NULL;

        return java_object_new(env, JCLASS_ATTRIBUTE, haggle_attribute_copy(attr));
}
Ejemplo n.º 2
0
void java_context_run(java_context_t* j) {
    do {
        register u1 opcode = PC8;


        LOGF("[%d] (%2X) %s", PC, (int) opcode, j_opcodes[opcode].name);


        PB = PC;
        PC += 1;
        j_opcodes[opcode].handler (j);

    } while(j->flags == JAVACTX_FLAG_CONTINUE);


    if(unlikely(j->flags == JAVACTX_FLAG_EXCEPTION)) {

        register long i;
        for(i = 0; i < j->frame.method->code->code.exception_table_length; i++) {

            int spc = j->frame.method->code->code.exception_table[i].start_pc;
            int epc = j->frame.method->code->code.exception_table[i].end_pc;
            const char* exname = (const char*) j->assembly->java_this.jc_cp[j->assembly->java_this.jc_cp[j->frame.method->code->code.exception_table[i].catch_type].class_info.name_index].utf8_info.bytes;


            if(j->frame.regs.pb >= spc && j->frame.regs.pb <= epc) {
                if((strcmp(j->exception.name, exname) == 0) || (__check_exception(j->exception.name, exname) == J_OK)) {

                    java_object_t* exobj = NULL;
                    java_object_new(&exobj, j->exception.name);

                    JPUSH(ptr, (void*) exobj);



                    PC = PB = j->frame.method->code->code.exception_table[i].handler_pc;

                    j->exception.name = NULL;
                    j->exception.message = NULL;
                    j->exception.owner = NULL;
                    j->flags = JAVACTX_FLAG_CONTINUE;

                    
                    return java_context_run(j);
                }
            }
        }

        rethrow(j, j->parent);
        return;
    }

#if HAVE_GC_H
    //GC_gcollect();
#endif

    j->flags = JAVACTX_FLAG_SUCCESS;
}