public static void Init(string package, string localedir) { IntPtr intPtr; IntPtr intPtr1; IntPtr intPtr2; Catalog.MarshalStrings(package, out intPtr, localedir, out intPtr1, "UTF-8", out intPtr2); try { if (Catalog.bindtextdomain(intPtr, intPtr1) == IntPtr.Zero) { throw new UnixIOException(Errno.ENOMEM); } if (Catalog.bind_textdomain_codeset(intPtr, intPtr2) == IntPtr.Zero) { throw new UnixIOException(Errno.ENOMEM); } if (Catalog.textdomain(intPtr) == IntPtr.Zero) { throw new UnixIOException(Errno.ENOMEM); } } finally { UnixMarshal.FreeHeap(intPtr); UnixMarshal.FreeHeap(intPtr1); UnixMarshal.FreeHeap(intPtr2); } }
private static void MarshalStrings(string s1, out IntPtr p1, string s2, out IntPtr p2, string s3, out IntPtr p3) { IntPtr zero = IntPtr.Zero; IntPtr intPtr = zero; p3 = zero; IntPtr intPtr1 = intPtr; intPtr = intPtr1; p2 = intPtr1; p1 = intPtr; bool flag = true; try { p1 = UnixMarshal.StringToHeap(s1); p2 = UnixMarshal.StringToHeap(s2); if (s3 != null) { p3 = UnixMarshal.StringToHeap(s3); } flag = false; } finally { if (flag) { UnixMarshal.FreeHeap((void *)p1); UnixMarshal.FreeHeap((void *)p2); UnixMarshal.FreeHeap((void *)p3); } } }
public static string GetPluralString(string s, string p, int n) { IntPtr intPtr; IntPtr intPtr1; IntPtr intPtr2; string str; Catalog.MarshalStrings(s, out intPtr, p, out intPtr1, null, out intPtr2); try { IntPtr intPtr3 = Catalog.ngettext(intPtr, intPtr1, n); if (intPtr3 != intPtr) { str = (intPtr3 != intPtr1 ? UnixMarshal.PtrToStringUnix(intPtr3) : p); } else { str = s; } } finally { UnixMarshal.FreeHeap(intPtr); UnixMarshal.FreeHeap(intPtr1); } return(str); }
private static void MarshalStrings(string s1, out IntPtr p1, string s2, out IntPtr p2, string s3, out IntPtr p3) { p1 = p2 = p3 = IntPtr.Zero; bool cleanup = true; try { p1 = UnixMarshal.StringToHeap(s1); p2 = UnixMarshal.StringToHeap(s2); if (s3 != null) { p3 = UnixMarshal.StringToHeap(s3); } cleanup = false; } finally { if (cleanup) { UnixMarshal.FreeHeap(p1); UnixMarshal.FreeHeap(p2); UnixMarshal.FreeHeap(p3); } } }
public static void Init(String package, String localedir) { IntPtr ipackage, ilocaledir, iutf8; MarshalStrings(package, out ipackage, localedir, out ilocaledir, "UTF-8", out iutf8); try { if (bindtextdomain(ipackage, ilocaledir) == IntPtr.Zero) { throw new UnixIOException(Native.Errno.ENOMEM); } if (bind_textdomain_codeset(ipackage, iutf8) == IntPtr.Zero) { throw new UnixIOException(Native.Errno.ENOMEM); } if (textdomain(ipackage) == IntPtr.Zero) { throw new UnixIOException(Native.Errno.ENOMEM); } } finally { UnixMarshal.FreeHeap(ipackage); UnixMarshal.FreeHeap(ilocaledir); UnixMarshal.FreeHeap(iutf8); } }
public static String GetPluralString(String s, String p, Int32 n) { IntPtr ints, intp, _ignore; MarshalStrings(s, out ints, p, out intp, null, out _ignore); try { // ngettext(3) returns an input pointer if no translation is found IntPtr r = ngettext(ints, intp, n); if (r == ints) { return(s); } if (r == intp) { return(p); } return(UnixMarshal.PtrToStringUnix(r)); } finally { UnixMarshal.FreeHeap(ints); UnixMarshal.FreeHeap(intp); } }
public static string GetString(string s) { string str; IntPtr heap = UnixMarshal.StringToHeap(s); try { IntPtr intPtr = Catalog.gettext(heap); str = (intPtr == heap ? s : UnixMarshal.PtrToStringUnix(intPtr)); } finally { UnixMarshal.FreeHeap(heap); } return(str); }
public static String GetString(String 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(UnixMarshal.PtrToStringUnix(r)); } return(s); } finally { UnixMarshal.FreeHeap(ints); } }
public static IntPtr StringToHeap(string s, int index, int count, Encoding encoding) { if (s == null) { return(IntPtr.Zero); } if (encoding == null) { throw new ArgumentNullException("encoding"); } int maxByteCount = encoding.GetMaxByteCount(1); char[] charArray = s.ToCharArray(index, count); byte[] numArray = new byte[encoding.GetByteCount(charArray) + maxByteCount]; if (encoding.GetBytes(charArray, 0, (int)charArray.Length, numArray, 0) != (int)numArray.Length - maxByteCount) { throw new NotSupportedException("encoding.GetBytes() doesn't equal encoding.GetByteCount()!"); } IntPtr intPtr = UnixMarshal.AllocHeap((long)((int)numArray.Length)); if (intPtr == IntPtr.Zero) { throw new UnixIOException(Errno.ENOMEM); } bool flag = false; try { Marshal.Copy(numArray, 0, intPtr, (int)numArray.Length); flag = true; } finally { if (!flag) { UnixMarshal.FreeHeap(intPtr); } } return(intPtr); }