Allocate MAX_PATH to start, but it usually wastes memory.
authorJay Krell <jaykrell@microsoft.com>
Tue, 3 Sep 2019 18:26:06 +0000 (11:26 -0700)
committerLarry Ewing <lewing@microsoft.com>
Wed, 4 Sep 2019 17:31:13 +0000 (12:31 -0500)
Double later for clarity.

Commit migrated from https://github.com/mono/mono/commit/595b66c0ebe530054895f2c74bcd4212e77536b9

src/mono/mono/eglib/gmodule-win32.c

index 644c497..5556641 100644 (file)
@@ -205,14 +205,13 @@ gboolean
 mono_get_module_filename (gpointer mod, gunichar2** pstr, guint32* plength)
 {
        gunichar2* str = NULL;
-       guint32 capacity = 32; // tunable
+       guint32 capacity = MAX_PATH; // tunable
        guint32 length = 0;
        gboolean success = FALSE;
 
        while (TRUE)
        {
                length = 0;
-               capacity *= 2;
                if (capacity > (1 << 24))
                        break;
                str = g_new (gunichar2, capacity);
@@ -226,6 +225,7 @@ mono_get_module_filename (gpointer mod, gunichar2** pstr, guint32* plength)
                str = NULL;
                if (!length) // error
                        break;
+               capacity *= 2;
        }
        *pstr = str;
        *plength = length;
@@ -244,14 +244,13 @@ gboolean
 mono_get_module_filename_ex (gpointer process, gpointer mod, gunichar2** pstr, guint32* plength)
 {
        gunichar2* str = NULL;
-       guint32 capacity = 32; // tunable
+       guint32 capacity = MAX_PATH; // tunable
        guint32 length = 0;
        gboolean success = FALSE;
 
        while (TRUE)
        {
                length = 0;
-               capacity *= 2;
                if (capacity > (1 << 24))
                        break;
                str = g_new (gunichar2, capacity);
@@ -265,6 +264,7 @@ mono_get_module_filename_ex (gpointer process, gpointer mod, gunichar2** pstr, g
                str = NULL;
                if (!length) // error
                        break;
+               capacity *= 2;
        }
        *pstr = str;
        *plength = length;
@@ -283,14 +283,13 @@ gboolean
 mono_get_module_basename (gpointer process, gpointer mod, gunichar2** pstr, guint32* plength)
 {
        gunichar2* str = NULL;
-       guint32 capacity = 32; // tunable
+       guint32 capacity = MAX_PATH; // tunable
        guint32 length = 0;
        gboolean success = FALSE;
 
        while (TRUE)
        {
                length = 0;
-               capacity *= 2;
                if (capacity > (1 << 24))
                        break;
                str = g_new (gunichar2, capacity);
@@ -304,6 +303,7 @@ mono_get_module_basename (gpointer process, gpointer mod, gunichar2** pstr, guin
                str = NULL;
                if (!length) // error
                        break;
+               capacity *= 2;
        }
        *pstr = str;
        *plength = length;
@@ -316,14 +316,13 @@ gboolean
 mono_get_current_directory (gunichar2** pstr, guint32* plength)
 {
        gunichar2* str = NULL;
-       guint32 capacity = 32; // tunable
+       guint32 capacity = MAX_PATH; // tunable
        guint32 length = 0;
        gboolean success = FALSE;
 
        while (TRUE)
        {
                length = 0;
-               capacity *= 2;
                if (capacity > (1 << 24))
                        break;
                str = g_new (gunichar2, capacity);
@@ -339,6 +338,7 @@ mono_get_current_directory (gunichar2** pstr, guint32* plength)
                str = NULL;
                if (!length) // error
                        break;
+               capacity *= 2;
        }
        *pstr = str;
        *plength = length;