// 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.
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)
"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);
}
}
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)
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);
}
}
}