[runtime] Convert Environment icalls to handles.
authorZoltan Varga <vargaz@gmail.com>
Sun, 21 Jul 2019 21:11:31 +0000 (17:11 -0400)
committerLarry Ewing <lewing@microsoft.com>
Tue, 23 Jul 2019 17:55:55 +0000 (12:55 -0500)
Commit migrated from https://github.com/mono/mono/commit/7b384f710c647617d757b4571332ec3359554f0f

src/mono/mono/metadata/icall-decl.h
src/mono/mono/metadata/icall-def-netcore.h
src/mono/mono/metadata/icall-def.h
src/mono/mono/metadata/icall-internals.h
src/mono/mono/metadata/icall-windows-uwp.c
src/mono/mono/metadata/icall-windows.c
src/mono/mono/metadata/icall.c

index 260f6b9..1e29b87 100644 (file)
@@ -73,8 +73,6 @@ typedef enum {
 
 // This is sorted.
 // grep ICALL_EXPORT | sort | uniq
-ICALL_EXPORT MonoArray* ves_icall_System_Environment_GetEnvironmentVariableNames (void);
-ICALL_EXPORT MonoArray* ves_icall_System_Environment_GetLogicalDrives (void);
 ICALL_EXPORT MonoAssemblyName* ves_icall_System_Reflection_AssemblyName_GetNativeName (MonoAssembly*);
 ICALL_EXPORT MonoBoolean ves_icall_RuntimeTypeHandle_is_subclass_of (MonoType*, MonoType*);
 ICALL_EXPORT MonoBoolean ves_icall_System_Buffer_BlockCopyInternal (MonoArray*, gint32, MonoArray*, gint32, gint32);
index 91d77b7..0c4cf02 100644 (file)
@@ -82,7 +82,7 @@ ICALL_TYPE(ENV, "System.Environment", ENV_1)
 NOHANDLES(ICALL(ENV_1, "Exit", ves_icall_System_Environment_Exit))
 HANDLES(ENV_1a, "FailFast", ves_icall_System_Environment_FailFast, void, 3, (MonoString, MonoException, MonoString))
 HANDLES(ENV_2, "GetCommandLineArgs", ves_icall_System_Environment_GetCommandLineArgs, MonoArray, 0, ())
-ICALL(ENV_3, "GetEnvironmentVariableNames", ves_icall_System_Environment_GetEnvironmentVariableNames)
+HANDLES(ENV_3, "GetEnvironmentVariableNames", ves_icall_System_Environment_GetEnvironmentVariableNames, MonoArray, 0, ())
 HANDLES(ENV_8, "InternalSetEnvironmentVariable", ves_icall_System_Environment_InternalSetEnvironmentVariable, void, 4, (const_gunichar2_ptr, gint32, const_gunichar2_ptr, gint32))
 NOHANDLES(ICALL(ENV_9, "get_ExitCode", mono_environment_exitcode_get))
 NOHANDLES(ICALL(ENV_10, "get_HasShutdownStarted", ves_icall_System_Environment_get_HasShutdownStarted))
index b640b8b..e679a1e 100644 (file)
@@ -314,9 +314,9 @@ ICALL_TYPE(ENV, "System.Environment", ENV_1)
 NOHANDLES(ICALL(ENV_1, "Exit", ves_icall_System_Environment_Exit))
 HANDLES(ENV_1a, "FailFast", ves_icall_System_Environment_FailFast, void, 3, (MonoString, MonoException, MonoString))
 HANDLES(ENV_2, "GetCommandLineArgs", ves_icall_System_Environment_GetCommandLineArgs, MonoArray, 0, ())
-ICALL(ENV_3, "GetEnvironmentVariableNames", ves_icall_System_Environment_GetEnvironmentVariableNames)
+HANDLES(ENV_3, "GetEnvironmentVariableNames", ves_icall_System_Environment_GetEnvironmentVariableNames, MonoArray, 0, ())
 NOHANDLES(ICALL(ENV_31, "GetIs64BitOperatingSystem", ves_icall_System_Environment_GetIs64BitOperatingSystem))
-ICALL(ENV_4, "GetLogicalDrivesInternal", ves_icall_System_Environment_GetLogicalDrives )
+HANDLES(ENV_4, "GetLogicalDrivesInternal", ves_icall_System_Environment_GetLogicalDrivesInternal, MonoArray, 0, ())
 HANDLES_REUSE_WRAPPER(ENV_5, "GetMachineConfigPath", ves_icall_System_Configuration_DefaultConfig_get_machine_config_path, MonoString, 0, ())
 HANDLES(ENV_51, "GetNewLine", ves_icall_System_Environment_get_NewLine, MonoString, 0, ())
 HANDLES(ENV_6, "GetOSVersionString", ves_icall_System_Environment_GetOSVersionString, MonoString, 0, ())
index 058b141..16d01a0 100644 (file)
@@ -35,7 +35,7 @@ mono_icall_get_new_line (MonoError *error);
 MonoBoolean
 mono_icall_is_64bit_os (void);
 
-MonoArray *
+MonoArrayHandle
 mono_icall_get_environment_variable_names (MonoError *error);
 
 void
index d12f4df..694335e 100644 (file)
@@ -32,19 +32,16 @@ mono_icall_get_windows_folder_path (int folder, MonoError *error)
 #endif
 
 #if !HAVE_API_SUPPORT_WIN32_GET_LOGICAL_DRIVE_STRINGS
-MonoArray *
-mono_icall_get_logical_drives (void)
+MonoArrayHandle
+mono_icall_get_logical_drives (MonoError *error)
 {
-       ERROR_DECL (error);
-
        g_unsupported_api ("GetLogicalDriveStrings");
 
        mono_error_set_not_supported (error, G_UNSUPPORTED_API, "GetLogicalDriveStrings");
-       mono_error_set_pending_exception (error);
 
        SetLastError (ERROR_NOT_SUPPORTED);
 
-       return NULL;
+       return NULL_HANDLE_ARRAY;
 }
 #endif
 
index 91fcaa3..fec39fa 100644 (file)
@@ -94,18 +94,17 @@ mono_icall_is_64bit_os (void)
 #endif
 }
 
-MonoArray *
+MonoArrayHandle
 mono_icall_get_environment_variable_names (MonoError *error)
 {
-       MonoArray *names;
+       MonoArrayHandle names;
        MonoDomain *domain;
-       MonoString *str;
+       MonoStringHandle str;
        WCHAR* env_strings;
        WCHAR* env_string;
        WCHAR* equal_str;
        int n = 0;
 
-       error_init (error);
        env_strings = GetEnvironmentStrings();
 
        if (env_strings) {
@@ -121,21 +120,23 @@ mono_icall_get_environment_variable_names (MonoError *error)
        }
 
        domain = mono_domain_get ();
-       names = mono_array_new_checked (domain, mono_defaults.string_class, n, error);
-       return_val_if_nok (error, NULL);
+       names = mono_array_new_handle (domain, mono_defaults.string_class, n, error);
+       return_val_if_nok (error, NULL_HANDLE_ARRAY);
 
        if (env_strings) {
                n = 0;
+               str = MONO_HANDLE_NEW (MonoString, NULL);
                env_string = env_strings;
                while (*env_string != '\0') {
                        /* weird case that MS seems to skip */
                        if (*env_string != '=') {
                                equal_str = wcschr(env_string, '=');
                                g_assert(equal_str);
-                               str = mono_string_new_utf16_checked (domain, env_string, (gint32)(equal_str - env_string), error);
+                               MonoString *s = mono_string_new_utf16_checked (domain, env_string, (gint32)(equal_str - env_string), error);
                                goto_if_nok (error, cleanup);
+                               MONO_HANDLE_ASSIGN_RAW (str, s);
 
-                               mono_array_setref_internal (names, n, str);
+                               mono_array_handle_setref (names, n, str);
                                n++;
                        }
                        while (*env_string != '\0')
@@ -149,7 +150,7 @@ cleanup:
        if (env_strings)
                FreeEnvironmentStrings (env_strings);
        if (!is_ok (error))
-               return NULL;
+               return NULL_HANDLE_ARRAY;
        return names;
 }
 
index 47ee642..e846d3d 100644 (file)
@@ -7412,34 +7412,35 @@ ves_icall_System_Environment_GetCommandLineArgs (MonoError *error)
 }
 
 #ifndef HOST_WIN32
-static MonoArray *
+static MonoArrayHandle
 mono_icall_get_environment_variable_names (MonoError *error)
 {
-       MonoArray *names;
+       MonoArrayHandle names;
        MonoDomain *domain;
-       MonoString *str;
+       MonoStringHandle str;
        gchar **e, **parts;
        int n;
 
-       error_init (error);
        n = 0;
        for (e = environ; *e != 0; ++ e)
                ++ n;
 
        domain = mono_domain_get ();
-       names = mono_array_new_checked (domain, mono_defaults.string_class, n, error);
-       return_val_if_nok (error, NULL);
+       names = mono_array_new_handle (domain, mono_defaults.string_class, n, error);
+       return_val_if_nok (error, NULL_HANDLE_ARRAY);
 
+       str = MONO_HANDLE_NEW (MonoString, NULL);
        n = 0;
        for (e = environ; *e != 0; ++ e) {
                parts = g_strsplit (*e, "=", 2);
                if (*parts != 0) {
-                       str = mono_string_new_checked (domain, *parts, error);
+                       MonoString *s = mono_string_new_checked (domain, *parts, error);
+                       MONO_HANDLE_ASSIGN_RAW (str, s);
                        if (!is_ok (error)) {
                                g_strfreev (parts);
-                               return NULL;
+                               return NULL_HANDLE_ARRAY;
                        }
-                       mono_array_setref_internal (names, n, str);
+                       mono_array_handle_setref (names, n, str);
                }
 
                g_strfreev (parts);
@@ -7451,13 +7452,10 @@ mono_icall_get_environment_variable_names (MonoError *error)
 }
 #endif /* !HOST_WIN32 */
 
-MonoArray *
-ves_icall_System_Environment_GetEnvironmentVariableNames (void)
+MonoArrayHandle
+ves_icall_System_Environment_GetEnvironmentVariableNames (MonoError *error)
 {
-       ERROR_DECL (error);
-       MonoArray *result = mono_icall_get_environment_variable_names (error);
-       mono_error_set_pending_exception (error);
-       return result;
+       return mono_icall_get_environment_variable_names (error);
 }
 
 void
@@ -7554,16 +7552,15 @@ ves_icall_System_Environment_GetWindowsFolderPath (int folder, MonoError *error)
 }
 
 #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT)
-static MonoArray *
-mono_icall_get_logical_drives (void)
+static MonoArrayHandle
+mono_icall_get_logical_drives (MonoError *error)
 {
-       ERROR_DECL (error);
        gunichar2 buf [256], *ptr, *dname;
        gunichar2 *u16;
        guint initial_size = 127, size = 128;
        gint ndrives;
-       MonoArray *result;
-       MonoString *drivestr;
+       MonoArrayHandle result;
+       MonoStringHandle drivestr;
        MonoDomain *domain = mono_domain_get ();
        gint len;
 
@@ -7590,20 +7587,23 @@ mono_icall_get_logical_drives (void)
        } while (*dname);
 
        dname = ptr;
-       result = mono_array_new_checked (domain, mono_defaults.string_class, ndrives, error);
-       if (mono_error_set_pending_exception (error))
-               goto leave;
+       result = mono_array_new_handle (domain, mono_defaults.string_class, ndrives, error);
+       goto_if_nok (error, leave);
 
+       drivestr = MONO_HANDLE_NEW (MonoString, NULL);
        ndrives = 0;
        do {
                len = 0;
                u16 = dname;
-               while (*u16) { u16++; len ++; }
-               drivestr = mono_string_new_utf16_checked (domain, dname, len, error);
-               if (mono_error_set_pending_exception (error))
-                       goto leave;
+               while (*u16) {
+                       u16++; len ++;
+               }
+               MonoString *s = mono_string_new_utf16_checked (domain, dname, len, error);
+               goto_if_nok (error, leave);
+               MONO_HANDLE_ASSIGN_RAW (drivestr, s);
 
-               mono_array_setref_internal (result, ndrives++, drivestr);
+               mono_array_handle_setref (result, ndrives, drivestr);
+               ndrives ++;
                while (*dname++);
        } while (*dname);
 
@@ -7615,10 +7615,10 @@ leave:
 }
 #endif /* G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT) */
 
-MonoArray *
-ves_icall_System_Environment_GetLogicalDrives (void)
+MonoArrayHandle
+ves_icall_System_Environment_GetLogicalDrivesInternal (MonoError *error)
 {
-       return mono_icall_get_logical_drives ();
+       return mono_icall_get_logical_drives (error);
 }
 
 MonoStringHandle