[runtime] Convert String.InternalSetLength to an icall. Needed for canary support.
[mono.git] / mcs / class / corlib / System / String.cs
index 2a408933eacf42bb4dfa82e80fdcf142481997d1..65e460647ca4955aecd1a8c4b97cccae46d9f582 100644 (file)
@@ -2688,24 +2688,8 @@ namespace System
                        }
                }
 
-               internal unsafe void InternalSetLength (int newLength)
-               {
-                       if (newLength > length)
-                               throw new ArgumentOutOfRangeException ("newLength", "newLength as to be <= length");
-
-                       // zero terminate, we can pass string objects directly via pinvoke
-                       // we also zero the rest of the string, since the new GC needs to be
-                       // able to handle the changing size (it will skip the 0 bytes).
-                       fixed (char * pStr = &start_char) {
-                               char *p = pStr + newLength;
-                               char *end = pStr + length;
-                               while (p < end) {
-                                       p [0] = '\0';
-                                       p++;
-                               }
-                       }
-                       length = newLength;
-               }
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               internal extern void InternalSetLength (int newLength);
 
                [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.MayFail)]
                // When modifying it, GetCaseInsensitiveHashCode() should be modified as well.