+Mon Oct 13 16:35:26 CEST 2008 Paolo Molaro <lupus@ximian.com>
+
+ * domain-internals.h, domain.c, icall.c, image.c, marshal.c,
+ object.c, reflection.c, socket-io.c, threads.c: introduced
+ mono_framework_version () to return the major framewrok version,
+ changed the code that was using more complex patterns to use it.
+ Return the correct value for PlatformID for OSX.
+
Mon Oct 13 14:38:01 CEST 2008 Paolo Molaro <lupus@ximian.com>
* icall-def.h, process.h, process.c: added an icall to get info about
MonoImageOpenStatus *status,
gboolean refonly) MONO_INTERNAL;
+int mono_framework_version (void) MONO_INTERNAL;
+
#endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */
}
/* Now that we have a runtime, set the policy for unhandled exceptions */
- if (mono_get_runtime_info ()->framework_version [0] < '2') {
+ if (mono_framework_version () < 2) {
mono_runtime_unhandled_exception_policy_set (MONO_UNHANLED_POLICY_LEGACY);
}
return NULL;
}
+
+/**
+ * mono_framework_version:
+ *
+ * Return the major version of the framework curently executing.
+ */
+int
+mono_framework_version (void)
+{
+ return current_runtime->framework_version [0] - '0';
+}
+
if (g_path_is_absolute (mass->image->name)) {
fill_reflection_assembly_name (mono_object_domain (assembly),
aname, &mass->aname, mass->image->name, TRUE,
- TRUE, mono_get_runtime_info ()->framework_version [0] >= '2');
+ TRUE, mono_framework_version () >= 2);
return;
}
absolute = g_build_filename (mass->basedir, mass->image->name, NULL);
fill_reflection_assembly_name (mono_object_domain (assembly),
aname, &mass->aname, absolute, TRUE, TRUE,
- mono_get_runtime_info ()->framework_version [0] >= '2');
+ mono_framework_version () >= 2);
g_free (absolute);
}
}
fill_reflection_assembly_name (mono_domain_get (), aname, &name, filename,
- TRUE, mono_get_runtime_info ()->framework_version [0] == '1',
- mono_get_runtime_info ()->framework_version [0] >= '2');
+ TRUE, mono_framework_version () == 1,
+ mono_framework_version () >= 2);
g_free (filename);
mono_image_close (image);
static int
ves_icall_System_Environment_get_Platform (void)
{
- MONO_ARCH_SAVE_REGS;
-
#if defined (PLATFORM_WIN32)
/* Win32NT */
return 2;
+#elif defined(__MACH__)
+ /* OSX */
+ if (mono_framework_version () < 2)
+ return 128;
+ return 6;
#else
/* Unix */
- return 128;
+ if (mono_framework_version () < 2)
+ return 128;
+ return 4;
#endif
}
MonoTableInfo *t, *mt;
t = &image->tables [MONO_TABLE_TYPEDEF];
mt = &image->tables [MONO_TABLE_METHOD];
- if (mono_get_runtime_info ()->framework_version [0] == '1') {
+ if (mono_framework_version () == 1) {
image->checked_module_cctor = TRUE;
return;
}
if (ares == NULL)
mono_raise_exception (mono_exception_from_name_msg (mono_defaults.corlib, "System.Runtime.Remoting", "RemotingException", "The async result object is null or of an unexpected type."));
- if (ares->async_delegate != (MonoObject*)delegate && mono_get_runtime_info ()->framework_version [0] >= '2') {
+ if (ares->async_delegate != (MonoObject*)delegate && mono_framework_version () >= 2) {
mono_raise_exception (mono_get_exception_invalid_operation (
"The IAsyncResult object provided does not match this delegate."));
return NULL;
gboolean abort_process = (mono_thread_current () == main_thread) ||
(mono_runtime_unhandled_exception_policy_get () == MONO_UNHANLED_POLICY_CURRENT);
root_appdomain_delegate = *(MonoObject **)(((char *)root_domain->domain) + field->offset);
- if (current_domain != root_domain && (mono_get_runtime_info ()->framework_version [0] >= '2')) {
+ if (current_domain != root_domain && (mono_framework_version () >= 2)) {
current_appdomain_delegate = *(MonoObject **)(((char *)current_domain->domain) + field->offset);
} else {
current_appdomain_delegate = NULL;
}
if (has_stathread_attribute) {
thread->apartment_state = ThreadApartmentState_STA;
- } else if (mono_get_runtime_info ()->framework_version [0] == '1') {
+ } else if (mono_framework_version () == 1) {
thread->apartment_state = ThreadApartmentState_Unknown;
} else {
thread->apartment_state = ThreadApartmentState_MTA;
*int32val = GUINT32_TO_LE (0); /* reserved */
p += 4;
- if (mono_get_runtime_info ()->framework_version [0] > '1') {
+ if (mono_framework_version () > 1) {
*p++ = 2; /* version */
*p++ = 0;
} else {
cli_header = (MonoCLIHeader*)(assembly->code.data + assembly->cli_header_offset);
cli_header->ch_size = GUINT32_FROM_LE (72);
cli_header->ch_runtime_major = GUINT16_FROM_LE (2);
- if (mono_get_runtime_info ()->framework_version [0] > '1')
+ if (mono_framework_version () > 1)
cli_header->ch_runtime_minor = GUINT16_FROM_LE (5);
else
cli_header->ch_runtime_minor = GUINT16_FROM_LE (0);
extern MonoBoolean ves_icall_System_Net_Dns_GetHostByAddr_internal(MonoString *addr, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list)
{
char *address;
- const char *version;
gboolean v1;
#ifdef AF_INET6
gboolean ret;
#endif
- MONO_ARCH_SAVE_REGS;
-
- version = mono_get_runtime_info ()->framework_version;
- v1 = (version[0] == '1');
+ v1 = mono_framework_version () == 1;
address = mono_string_to_utf8 (addr);
/* On 2.0 profile (and higher), set explicitly since state might have been
Unknown */
- if (mono_get_runtime_info ()->framework_version [0] != '1') {
+ if (mono_framework_version () != 1) {
if (thread->apartment_state == ThreadApartmentState_Unknown)
thread->apartment_state = ThreadApartmentState_MTA;
}