Merge pull request #1514 from directhex/master
[mono.git] / mcs / class / corlib / System.Resources / ResourceReader.cs
index 3969b9ed1bf332ed8ef575bc6e61d69548e17b4e..87fffa9c6091bddab661f6354b8b32474b9ff170 100644 (file)
@@ -40,9 +40,7 @@ using System.Runtime.InteropServices;
 using System.Runtime.Serialization;
 using System.Runtime.Serialization.Formatters.Binary;
 using System.Security.Permissions;
-#if NET_2_0
 using System.Collections.Generic;
-#endif
 
 namespace System.Resources
 {
@@ -70,9 +68,7 @@ namespace System.Resources
                FistCustom      = 64
        }
 
-#if NET_2_0
        [System.Runtime.InteropServices.ComVisible (true)]
-#endif
        public sealed class ResourceReader : IResourceReader, IEnumerable, IDisposable
        {
                struct ResourceInfo
@@ -100,7 +96,7 @@ namespace System.Resources
                                ResourceValue = value;
                        }
                }
-               
+
                BinaryReader reader;
                object readerLock = new object ();
                IFormatter formatter;
@@ -173,11 +169,7 @@ namespace System.Resources
                                /* Now read the ResourceReader header */
                                resource_ver = reader.ReadInt32();
 
-                               if(resource_ver != 1
-#if NET_2_0
-                                       && resource_ver != 2
-#endif
-                                       ) {
+                               if(resource_ver != 1 && resource_ver != 2) {
                                        throw new NotSupportedException("This .resources file requires unsupported set class version: " + resource_ver.ToString());
                                }
 
@@ -426,11 +418,9 @@ namespace System.Resources
                                        }
 
                                        reader.BaseStream.Seek (ri.ValuePosition, SeekOrigin.Begin);
-#if NET_2_0
                                        if (resource_ver == 2)
                                                value = ReadValueVer2 (ri.TypeIndex);
                                        else
-#endif
                                                value = ReadValueVer1 (Type.GetType (typeNames [ri.TypeIndex], true));
 
                                        store [i] = new ResourceCacheItem (ri.ResourceName, value);
@@ -438,7 +428,6 @@ namespace System.Resources
                        }
                }
                
-#if NET_2_0
                internal UnmanagedMemoryStream ResourceValueAsStream (string name, int index)
                {
                        ResourceInfo ri = infos [index];
@@ -452,21 +441,14 @@ namespace System.Resources
                                // current position so that the returned
                                // Stream represents a single object stream.
                                long slen = reader.ReadInt32();
-                               IntPtrStream basePtrStream = reader.BaseStream as IntPtrStream;
+                               UnmanagedMemoryStream basePtrStream = reader.BaseStream as UnmanagedMemoryStream;
                                unsafe {
                                        if (basePtrStream != null) {
-                                               byte* addr = (byte*) basePtrStream.BaseAddress.ToPointer ();
-                                               addr += basePtrStream.Position;
-                                               return new UnmanagedMemoryStream ((byte*) (void*) addr, slen);
+                                               return new UnmanagedMemoryStream (basePtrStream.PositionPointer, slen);
                                        } else {
                                                IntPtr ptr = Marshal.AllocHGlobal ((int) slen);
                                                byte* addr = (byte*) ptr.ToPointer ();
-                                               UnmanagedMemoryStream ms = new UnmanagedMemoryStream (addr, slen, slen, FileAccess.ReadWrite);
-                                               // The memory resource must be freed
-                                               // when the stream is disposed.
-                                               ms.Closed += delegate (object o, EventArgs e) {
-                                                       Marshal.FreeHGlobal (ptr);
-                                               };
+                                               UnmanagedMemoryStream ms = new HGlobalUnmanagedMemoryStream (addr, slen, ptr);
 
                                                byte [] bytes = new byte [slen < 1024 ? slen : 1024];
                                                while (slen > 0 ) {
@@ -484,12 +466,16 @@ namespace System.Resources
                                }
                        }
                }
-#endif
 
                public void Close ()
                {
                        Dispose(true);
                }
+
+               public void Dispose ()
+               {
+                       Dispose(true);
+               }
                
                public IDictionaryEnumerator GetEnumerator () {
                        if (reader == null){
@@ -504,7 +490,7 @@ namespace System.Resources
                {
                        return ((IResourceReader) this).GetEnumerator();
                }
-#if NET_2_0
+
                public void GetResourceData (string resourceName, out string resourceType, out byte [] resourceData)
                {
                        if (resourceName == null)
@@ -553,11 +539,6 @@ namespace System.Resources
                                reader.BaseStream.Read (data, 0, datalen);
                        }
                }
-#endif
-               void IDisposable.Dispose ()
-               {
-                       Dispose(true);
-               }
 
                private void Dispose (bool disposing)
                {
@@ -625,7 +606,6 @@ namespace System.Resources
                                }
                        }
                        
-#if NET_2_0
                        public UnmanagedMemoryStream ValueAsStream
                        {
                                get {
@@ -636,7 +616,6 @@ namespace System.Resources
                                        return(reader.ResourceValueAsStream((string) Key, index));
                                }
                        }
-#endif
                        
                        public object Current
                        {