New test.
[mono.git] / mcs / class / Mono.Posix / Mono.Unix / Catalog.cs
index 98e0631c2305ada14ef3e1ed3e0294b60737adfe..d835fec46245715b7fe3e8feaae6ab08d4e6cef0 100644 (file)
@@ -6,7 +6,7 @@
 //   Jonathan Pryor (jonpryor@vt.edu)
 //
 // (C) 2004 Edd Dumbill
-// (C) 2005 Jonathan Pryor
+// (C) 2005-2006 Jonathan Pryor
 //
 // This file implements the low-level syscall interface to the POSIX
 // subsystem.
@@ -38,15 +38,14 @@ using System.Runtime.InteropServices;
 namespace Mono.Unix {
 
        public class Catalog {
-               [Obsolete ("Don't create Catalog instances.")]
-               public Catalog () {}
+               private Catalog () {}
 
-               [DllImport("libintl")]
+               [DllImport("intl")]
                static extern IntPtr bindtextdomain (IntPtr domainname, IntPtr dirname);
-               [DllImport("libintl")]
+               [DllImport("intl")]
                static extern IntPtr bind_textdomain_codeset (IntPtr domainname,
                        IntPtr codeset);
-               [DllImport("libintl")]
+               [DllImport("intl")]
                static extern IntPtr textdomain (IntPtr domainname);
                
                public static void Init (String package, String localedir)
@@ -56,16 +55,16 @@ namespace Mono.Unix {
                                        "UTF-8", out iutf8);
                        try {
                                if (bindtextdomain (ipackage, ilocaledir) == IntPtr.Zero)
-                                       throw new OutOfMemoryException ("bindtextdomain");
+                                       throw new UnixIOException (Native.Errno.ENOMEM);
                                if (bind_textdomain_codeset (ipackage, iutf8) == IntPtr.Zero)
-                                       throw new OutOfMemoryException ("bind_textdomain_codeset");
+                                       throw new UnixIOException (Native.Errno.ENOMEM);
                                if (textdomain (ipackage) == IntPtr.Zero)
-                                       throw new OutOfMemoryException ("textdomain");
+                                       throw new UnixIOException (Native.Errno.ENOMEM);
                        }
                        finally {
-                               Marshal.FreeHGlobal (ipackage);
-                               Marshal.FreeHGlobal (ilocaledir);
-                               Marshal.FreeHGlobal (iutf8);
+                               UnixMarshal.FreeHeap (ipackage);
+                               UnixMarshal.FreeHeap (ilocaledir);
+                               UnixMarshal.FreeHeap (iutf8);
                        }
                }
 
@@ -77,40 +76,40 @@ namespace Mono.Unix {
                        bool cleanup = true;
 
                        try {
-                               p1 = Marshal.StringToHGlobalAuto (s1);
-                               p2 = Marshal.StringToHGlobalAuto (s2);
+                               p1 = UnixMarshal.StringToHeap (s1);
+                               p2 = UnixMarshal.StringToHeap (s2);
                                if (s3 != null)
-                                       p3 = Marshal.StringToHGlobalAuto (s3);
+                                       p3 = UnixMarshal.StringToHeap (s3);
                                cleanup = false;
                        }
                        finally {
                                if (cleanup) {
-                                       Marshal.FreeHGlobal (p1);
-                                       Marshal.FreeHGlobal (p2);
-                                       Marshal.FreeHGlobal (p3);
+                                       UnixMarshal.FreeHeap (p1);
+                                       UnixMarshal.FreeHeap (p2);
+                                       UnixMarshal.FreeHeap (p3);
                                }
                        }
                }
        
-               [DllImport("libintl")]
+               [DllImport("intl")]
                static extern IntPtr gettext (IntPtr instring);
                
                public static String GetString (String s)
                {
-                       IntPtr ints = Marshal.StringToHGlobalAuto (s);
+                       IntPtr ints = UnixMarshal.StringToHeap (s);
                        try {
                                // gettext(3) returns the input pointer if no translation is found
                                IntPtr r = gettext (ints);
                                if (r != ints)
-                                       return Marshal.PtrToStringAuto (r);
+                                       return UnixMarshal.PtrToStringUnix (r);
                                return s;
                        }
                        finally {
-                               Marshal.FreeHGlobal (ints);
+                               UnixMarshal.FreeHeap (ints);
                        }
                }
        
-               [DllImport("libintl")]
+               [DllImport("intl")]
                static extern IntPtr ngettext (IntPtr singular, IntPtr plural, Int32 n);
                
                public static String GetPluralString (String s, String p, Int32 n)
@@ -125,11 +124,11 @@ namespace Mono.Unix {
                                        return s;
                                if (r == intp)
                                        return p;
-                               return Marshal.PtrToStringAnsi (r); 
+                               return UnixMarshal.PtrToStringUnix (r); 
                        }
                        finally {
-                               Marshal.FreeHGlobal (ints);
-                               Marshal.FreeHGlobal (intp);
+                               UnixMarshal.FreeHeap (ints);
+                               UnixMarshal.FreeHeap (intp);
                        }
                }
        }