/* INFO: toplevel udt_clr_method_call */ caddr_t dotnet_call (caddr_t * type_vec, int n_args, int _asm_type, caddr_t asm_name, caddr_t type, caddr_t method, void *udt, int sec_unrestricted) { MonoArray *v_args, *i_array = NULL, *o_array = NULL; MonoObject *mono_list; caddr_t ret = NULL; MonoDomain *domain = virtuoso_domain; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 7); if (param_to_mono_array (type_vec, n_args, &i_array, &o_array)) sqlr_new_error ("22023", "MN009", "Can't convert parameters"); SET_INT_ARG (domain, v_args, 0, _asm_type); SET_INT_ARG (domain, v_args, 1, sec_unrestricted); SET_STRING_ARG (domain, v_args, 2, asm_name); SET_STRING_ARG (domain, v_args, 3, type); SET_STRING_ARG (domain, v_args, 4, method); mono_array_set (v_args, gpointer, 5, i_array); mono_array_set (v_args, gpointer, 6, o_array); mono_list = call_mono (VIRTCLR_NAME, "VInvoke:call_method_asm", v_args, domain); ret = sa_to_dk ((MonoArray *) mono_list, 0, 0, NULL); return ret; }
/* INFO: topelevel udt_clr_instance_free */ void del_ref (int gc_in) { MonoDomain *domain = virtuoso_domain; MonoArray *v_args; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 1); SET_INT_ARG (domain, v_args, 0, gc_in); call_mono (VIRTCLR_NAME, "VInvoke:free_ins", v_args, domain); }
/* INFO: toplevel udt_clr_serialize */ int clr_serialize (int _gc_in, dk_session_t * ses) { MonoArray *v_args = NULL; MonoArray *mono_list; int len, inx; MonoDomain *domain = virtuoso_domain; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 1); SET_INT_ARG (domain, v_args, 0, _gc_in); QR_RESET_CTX { mono_list = (MonoArray *) call_mono (VIRTCLR_NAME, "VInvoke:obj_serialize_soap", v_args, domain); } QR_RESET_CODE { caddr_t err; POP_QR_RESET; err = thr_get_error_code (THREAD_CURRENT_THREAD); if (ARRAYP (err)) log_error ("Mono Serialization error : [%s] [%s]", ERR_STATE(err), ERR_MESSAGE (err)); else log_error ("Mono Serialization error : unknown"); dk_free_tree (err); goto no_obj; } END_QR_RESET; len = mono_array_length (mono_list); if (len - 1 < 256) { session_buffered_write_char (DV_BIN, ses); session_buffered_write_char (len - 1, ses); } else { session_buffered_write_char (DV_LONG_BIN, ses); print_long (len - 1, ses); } for (inx = 1; inx < len; inx++) { MonoObject *obj = (MonoObject *)mono_array_get (mono_list, gpointer, inx); guint8 b = *(guint8 *)((char *)obj + sizeof (MonoObject)); session_buffered_write_char (b, ses); } return len; no_obj: session_buffered_write_char (DV_DB_NULL, ses); return 1; }
caddr_t clr_deserialize (dk_session_t * ses, long mode, caddr_t asm_name, caddr_t type, void *udt) { MonoArray *v_args = NULL, *bin_data; MonoArray *mono_list; int len; caddr_t in_values, bin_data_ptr; MonoDomain *domain = virtuoso_domain; get_mono_thread (); in_values = (caddr_t) scan_session_boxing (ses); if (DV_TYPE_OF (in_values) != DV_BIN) return (caddr_t) box_num (0); len = box_length (in_values); bin_data = mono_array_new (domain, mono_get_byte_class(), len); bin_data_ptr = mono_array_addr (bin_data, char, 0); memcpy (bin_data_ptr, in_values, len); if (in_values) dk_free_tree (in_values); v_args = MAKE_PARAM_ARRAY (domain, 4); mono_array_set (v_args, gpointer, 0, bin_data); SET_INT_ARG (domain, v_args, 1, mode); SET_STRING_ARG (domain, v_args, 2, asm_name); SET_STRING_ARG (domain, v_args, 3, type); QR_RESET_CTX { mono_list = (MonoArray *) call_mono (VIRTCLR_NAME, "VInvoke:obj_deserialize", v_args, domain); } QR_RESET_CODE { caddr_t err; POP_QR_RESET; err = thr_get_error_code (THREAD_CURRENT_THREAD); if (ARRAYP (err)) log_error ("Mono Deserialization error : [%s] [%s]", ERR_STATE(err), ERR_MESSAGE (err)); else log_error ("Mono Deserialization error : unknown"); dk_free_tree (err); return 0; } END_QR_RESET; return sa_to_dk ((MonoArray *) mono_list, 0, 0, udt); }
caddr_t dotnet_get_property (long inst, caddr_t prop_name) { MonoDomain *domain = virtuoso_domain; MonoArray *v_args, *mono_list; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 2); SET_INT_ARG (domain, v_args, 0, inst); SET_STRING_ARG (domain, v_args, 1, prop_name); mono_list = (MonoArray *) call_mono (VIRTCLR_NAME, "VInvoke:get_prop", v_args, domain); return sa_to_dk (mono_list, 0, 0, NULL); }
/* INFO: toplevel udt_clr_member_observer */ caddr_t dotnet_get_stat_prop (int _asm_type, caddr_t asm_name, caddr_t type, caddr_t prop_name) { MonoDomain *domain = virtuoso_domain; MonoArray *v_args, *mono_list; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 4); SET_INT_ARG (domain, v_args, 0, _asm_type); SET_STRING_ARG (domain, v_args, 1, asm_name); SET_STRING_ARG (domain, v_args, 2, type); SET_STRING_ARG (domain, v_args, 3, prop_name); mono_list = (MonoArray *) call_mono (VIRTCLR_NAME, "VInvoke:get_stat_prop", v_args, domain); return sa_to_dk (mono_list, 0, 0, NULL); }
static bool wslist_menudata_init(WMenuData *data, WThing *context) { WMenuEnt *ents; int nents, l, i=0; char *entryname; nents=SCREEN->n_workspaces; /* Some extra space will be allocated depending on number of dockapps */ ents=ALLOC_N(WMenuEnt, nents); if(ents==NULL){ warn_err(); return FALSE; } l=sizeof(int)*3+4+1; /* should be enough */ for(i=0; i<nents; i++){ entryname=ALLOC_N(char, l); if(entryname==NULL){ warn_err(); do_free_winlist(ents, i); return FALSE; } snprintf(entryname, l, "ws %d", i+1); ents[i].name=entryname; ents[i].flags=0; ents[i].u.num=i; SET_INT_ARG(ents[i].u.f.arg, i); } data->entries=ents; data->nentries=nents; return TRUE; }
/* INFO: toplevel udt_clr_instance_copy */ int copy_ref (int gc_in, void* udt) { MonoDomain *domain = virtuoso_domain; MonoArray *v_args, *mono_list; caddr_t aret; int ret; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 1); SET_INT_ARG (domain, v_args, 0, gc_in); mono_list = (MonoArray *) call_mono (VIRTCLR_NAME, "VInvoke:get_copy", v_args, domain); aret = sa_to_dk (mono_list, 0, 1, udt); ret = unbox(aret); dk_free_box (aret); return ret; }
/* INFO: toplevel udt_clr_member_mutator */ caddr_t dotnet_set_property (caddr_t *type_vec, long inst, caddr_t prop_name) { MonoArray *v_args, *i_array = NULL, *o_array = NULL; MonoObject *mono_list; caddr_t ret = NULL; MonoDomain *domain = virtuoso_domain; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 4); if (param_to_mono_array (type_vec, 1, &i_array, &o_array)) sqlr_new_error ("22023", "MN008", "Can't convert parameters"); SET_INT_ARG (domain, v_args, 0, inst); SET_STRING_ARG (domain, v_args, 1, prop_name); mono_array_set (v_args, gpointer, 2, i_array); mono_array_set (v_args, gpointer, 3, o_array); mono_list = call_mono (VIRTCLR_NAME, "VInvoke:set_prop", v_args, domain); ret = sa_to_dk ((MonoArray *) mono_list, 0, 0, NULL); return ret; }
caddr_t dotnet_get_instance_name (int instance) { MonoArray *v_args; MonoObject *mono_ret; caddr_t ret = NULL; MonoDomain *domain = virtuoso_domain; char *utf8; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 1); SET_INT_ARG (domain, v_args, 0, instance); mono_ret = call_mono (VIRTCLR_NAME, "VInvoke:get_instance_name", v_args, domain); if (!mono_ret || !mono_object_isinst (mono_ret, mono_get_string_class ())) GPF_T1 ("not a string in dotnet_get_instance_name"); utf8 = mono_string_to_utf8 ((MonoString *)mono_ret); ret = box_dv_short_string (utf8); g_free (utf8); return ret; }
/* INFO: toplevel udt_clr_instantiate_class */ int create_instance (caddr_t *type_vec, int n_args, long _mode, caddr_t asm_name, caddr_t type, void * udt) { MonoArray *v_args, *i_array = NULL, *o_array = NULL; MonoObject *mono_list; int len, ret = 0; MonoDomain *domain = virtuoso_domain; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 5); if (param_to_mono_array (type_vec, n_args, &i_array, &o_array)) sqlr_new_error ("22023", "MN010", "Can't convert parameters"); SET_INT_ARG (domain, v_args, 0, _mode); SET_STRING_ARG (domain, v_args, 1, asm_name); SET_STRING_ARG (domain, v_args, 2, type); mono_array_set (v_args, gpointer, 3, i_array); mono_array_set (v_args, gpointer, 4, o_array); mono_list = call_mono (VIRTCLR_NAME, "VInvoke:create_ins_asm", v_args, domain); len = mono_array_length ((MonoArray*)mono_list); if (len == 2) { caddr_t aret = sa_to_dk ((MonoArray *) mono_list, 0, 1, udt); ret = unbox (aret); dk_free_box (aret); } else GPF_T1 ("create_instance"); return ret; }
int dotnet_is_instance_of (int _clr_ret, caddr_t class_name) { MonoDomain *domain = virtuoso_domain; MonoArray *v_args = NULL, *mono_list; MonoObject *arg = NULL; char *p1=NULL, *p2=NULL, *p3 = NULL; char t_class_name[200]; int fl = 1, ret = 0; if (!class_name) return 0; strcpy (t_class_name, class_name); p1 = p3 = t_class_name; for (;;) { p2 = strstr (p3, "/"); if (!p2) break; else p3 = p2 + 1; fl = fl - 1; } p1 [p3 - p1 - 1] = 0; get_mono_thread (); v_args = MAKE_PARAM_ARRAY (domain, 4); SET_INT_ARG (domain, v_args, 0, _clr_ret); SET_INT_ARG (domain, v_args, 1, fl); SET_STRING_ARG (domain, v_args, 2, p1); SET_STRING_ARG (domain, v_args, 3, p3); QR_RESET_CTX { mono_list = (MonoArray *) call_mono (VIRTCLR_NAME, "VInvoke:get_IsInstanceOf", v_args, domain); } QR_RESET_CODE { caddr_t err; err = thr_get_error_code (THREAD_CURRENT_THREAD); dk_free_tree (err); POP_QR_RESET; return 0; } END_QR_RESET; arg = (MonoObject *) mono_array_get (mono_list, gpointer, 0); #ifdef MONO_DEBUG fprintf (stderr, "VInvoke:get_IsInstanceOf CLR ret=%s data_sz=%d gboolean_sz=%d guint8_sz=%d\n", arg->vtable->klass->name, (int) (arg->vtable->klass->instance_size - sizeof (MonoObject)), sizeof (gboolean), sizeof (guint8)); #endif ret = *(((guint8 *)arg) + sizeof (MonoObject)); #ifdef MONO_DEBUG fprintf (stderr, "VInvoke:get_IsInstanceOf C ret=%d\n", ret); #endif return ret; }