Beispiel #1
0
        public static string GetString(string domain, string msgid, string msgidPlural, int n)
        {
            IntPtr msgid_ptr        = UnixMarshal.StringToHeap(msgid);
            IntPtr msgid_plural_ptr = UnixMarshal.StringToHeap(msgidPlural);
            IntPtr domain_ptr       = domain == null ? IntPtr.Zero : UnixMarshal.StringToHeap(domain);

            try {
                IntPtr ret_ptr = domain_ptr == IntPtr.Zero ?
                                 ngettext(msgid_ptr, msgid_plural_ptr, n) :
                                 dngettext(domain_ptr, msgid_ptr, msgid_plural_ptr, n);

                if (ret_ptr == msgid_ptr)
                {
                    return(msgid);
                }
                else if (ret_ptr == msgid_plural_ptr)
                {
                    return(msgidPlural);
                }

                return(UnixMarshal.PtrToStringUnix(ret_ptr));
            } finally {
                UnixMarshal.FreeHeap(msgid_ptr);
                UnixMarshal.FreeHeap(msgid_plural_ptr);
                if (domain_ptr != IntPtr.Zero)
                {
                    UnixMarshal.FreeHeap(domain_ptr);
                }
            }
        }
Beispiel #2
0
        public static void Init(string domain, string localeDir)
        {
            if (String.IsNullOrEmpty(domain))
            {
                throw new ArgumentException("No text domain specified");
            }

            IntPtr domain_ptr    = UnixMarshal.StringToHeap(domain);
            IntPtr localedir_ptr = IntPtr.Zero;

            try {
                BindTextDomainCodeset(domain_ptr);

                if (localeDir != null && localeDir.Length > 0)
                {
                    localedir_ptr = UnixMarshal.StringToHeap(localeDir);
                    BindTextDomain(domain_ptr, localedir_ptr);
                }
            } finally {
                UnixMarshal.FreeHeap(domain_ptr);
                if (localedir_ptr != IntPtr.Zero)
                {
                    UnixMarshal.FreeHeap(localedir_ptr);
                }
            }
        }
Beispiel #3
0
        public static string GetString(string domain, string msgid)
        {
            IntPtr msgid_ptr  = UnixMarshal.StringToHeap(msgid);
            IntPtr domain_ptr = domain == null ? IntPtr.Zero : UnixMarshal.StringToHeap(domain);

            if (domain == null)
            {
                // FIXME banshee-1?
                IntPtr ptr = UnixMarshal.StringToHeap("banshee");
                UnixMarshal.FreeHeap(ptr);
            }

            try {
                IntPtr ret_ptr = domain_ptr == IntPtr.Zero ?
                                 gettext(msgid_ptr) :
                                 dgettext(domain_ptr, msgid_ptr);

                if (msgid_ptr != ret_ptr)
                {
                    return(UnixMarshal.PtrToStringUnix(ret_ptr));
                }

                return(msgid);
            } finally {
                UnixMarshal.FreeHeap(msgid_ptr);
                if (domain_ptr != IntPtr.Zero)
                {
                    UnixMarshal.FreeHeap(domain_ptr);
                }
            }
        }
Beispiel #4
0
 public static IntPtr ToUnixWideCharacters(string text)
 {
     if (text == null)
     {
         return(IntPtr.Zero);
     }
     return(UnixMarshal.StringToHeap(text, Encoding.UTF32));
 }
Beispiel #5
0
 /// <summary>
 /// Constructor for creating a CVar in C#
 /// </summary>
 /// <param name="name">
 /// The name of the cvar <see cref="System.String"/>
 /// </param>
 /// <param name="val">
 /// An initial string value <see cref="System.String"/>
 /// </param>
 public CVar(string name, string val)
 {
     ptr        = UnixMarshal.AllocHeap(sizeof(CVarInfo));
     cvar->name = (sbyte *)UnixMarshal.StringToHeap(name).ToPointer();
     cvar->str  = (sbyte *)UnixMarshal.StringToHeap(val).ToPointer();
     cvar->next = (CVarInfo *)IntPtr.Zero.ToPointer();
     MetaMod.MetaModEngine.engineFunctions.CVarRegister(ptr);
 }
Beispiel #6
0
 public StringOnHeap(string str, Encoding encoding)
 {
     if (str == null)
     {
         Pointer = IntPtr.Zero;
         return;
     }
     Pointer = UnixMarshal.StringToHeap(str, encoding);
 }
Beispiel #7
0
        public IntPtr MarshalManagedToNative(object obj)
        {
            string s = obj as string;

            if (s == null)
            {
                return(IntPtr.Zero);
            }
            return(UnixMarshal.StringToHeap(s, Encoding.UTF32));
        }
Beispiel #8
0
        public IntPtr MarshalManagedToNative(object obj)
        {
            string str = obj as string;

            if (str == null)
            {
                return(IntPtr.Zero);
            }
            return(UnixMarshal.StringToHeap(str, UnixEncoding.Instance));
        }
Beispiel #9
0
        //maybe return iovec tree or array
        public static IOVector Do(ref string value)
        {
            IOVector vec = new IOVector();

            //FIXME: SECURITY: uncleared memory used for padding
            vec.Base   = UnixMarshal.StringToHeap(@value);
            vec.Length = Padded(value.Length);
            //TODO: use pad func and custom stringtoheap

            return(vec);
        }
Beispiel #10
0
        // возвращает указатель на структуру в куче
        // память по указателю должна быть очищена вручную
        public unsafe IntPtr CVarRegister(string name, string val)
        {
            cvar_t *cvar = (cvar_t *)UnixMarshal.AllocHeap(sizeof(cvar_t)).ToPointer();

            cvar->name = (sbyte *)UnixMarshal.StringToHeap(name).ToPointer();
            cvar->str  = (sbyte *)UnixMarshal.StringToHeap(val).ToPointer();
            cvar->next = (cvar_t *)IntPtr.Zero.ToPointer();

            ef.CVarRegister(cvar);

            return(new IntPtr(cvar));
        }
Beispiel #11
0
        private static void BindTextDomainCodeset(IntPtr domain)
        {
            IntPtr codeset = UnixMarshal.StringToHeap("UTF-8");

            try {
                if (bind_textdomain_codeset(domain, codeset) == IntPtr.Zero)
                {
                    throw new UnixIOException(Mono.Unix.Native.Errno.ENOMEM);
                }
            } finally {
                UnixMarshal.FreeHeap(codeset);
            }
        }
Beispiel #12
0
        public IntPtr MarshalManagedToNative(object obj)
        {
            string s = obj as string;

            if (s == null)
            {
                return(IntPtr.Zero);
            }
            IntPtr p = UnixMarshal.StringToHeap(s, UnixEncoding.Instance);

            // Console.WriteLine ("# FileNameMarshaler.MarshalNativeToManaged for `{0}'={1:x}", s, p);
            return(p);
        }
Beispiel #13
0
 internal static IntPtr CmdArgv(int i)
 {
     if (Command.overrideArguments && Command.instance != null)
     {
         SetResult(MetaResult.Supercede);
         return(UnixMarshal.StringToHeap(Command.instance.Arguments[i]));
     }
     else
     {
         SetResult(MetaResult.Ignore);
         return(IntPtr.Zero);
     }
 }
Beispiel #14
0
        private static void StringToHeap(string s, Encoding e, bool mustBeEqual)
        {
            IntPtr p = UnixMarshal.StringToHeap(s, e);

            try {
                string _s = UnixMarshal.PtrToString(p, e);
                if (mustBeEqual)
                {
                    Assert.AreEqual(s, _s, "#TSTA (" + e.GetType() + ")");
                }
            }
            finally {
                UnixMarshal.FreeHeap(p);
            }
        }
Beispiel #15
0
        public static IntPtr AllocPluginInfo(string ifvers, string name, string version, string date, string author, string url, string logtag, PluginLoadTime load, PluginLoadTime unload)
        {
            PluginInfo *pl = (PluginInfo *)UnixMarshal.AllocHeap(sizeof(PluginInfo)).ToPointer();

            pl->ifvers     = (sbyte *)UnixMarshal.StringToHeap(ifvers).ToPointer();
            pl->name       = (sbyte *)UnixMarshal.StringToHeap(name).ToPointer();
            pl->version    = (sbyte *)UnixMarshal.StringToHeap(version).ToPointer();
            pl->date       = (sbyte *)UnixMarshal.StringToHeap(date).ToPointer();
            pl->author     = (sbyte *)UnixMarshal.StringToHeap(author).ToPointer();
            pl->url        = (sbyte *)UnixMarshal.StringToHeap(url).ToPointer();
            pl->logtag     = (sbyte *)UnixMarshal.StringToHeap(logtag).ToPointer();
            pl->loadable   = load;
            pl->unloadable = unload;

            return(new IntPtr((void *)pl));
        }
Beispiel #16
0
        public static IntPtr Allocate(string[] args)
        {
            IntPtr argv =
                UnixMarshal.AllocHeap((args.Length + 1) * IntPtr.Size);

            for (int i = 0; i < args.Length; ++i)
            {
                Marshal.WriteIntPtr(
                    argv,
                    i * IntPtr.Size,
                    UnixMarshal.StringToHeap(args[i]));
            }

            Marshal.WriteIntPtr(argv, args.Length * IntPtr.Size, IntPtr.Zero);
            return(argv);
        }
Beispiel #17
0
        // Verifies if a string is present (true) in the Catalog file
        static public bool StringExists(string s)
        {
            IntPtr ints = UnixMarshal.StringToHeap(s);

            try {
                // gettext returns the input pointer if no translation is found
                IntPtr r = gettext(ints);
                return(r != ints);
            }
            catch (Exception) {
                return(true);
            }

            finally {
                UnixMarshal.FreeHeap(ints);
            }
        }
Beispiel #18
0
 IntPtr ICustomMarshaler.MarshalManagedToNative(object ManagedObj)
 {
     return((!(ManagedObj is string))
         ? IntPtr.Zero
         : UnixMarshal.StringToHeap((string)ManagedObj, UnixEncoding.Instance));
 }
Beispiel #19
0
        public void BXC10074()
        {
            var result = UnixMarshal.StringToHeap(null, Encoding.ASCII);

            Assert.AreEqual(IntPtr.Zero, result, "This used to crash due to a NullReferenceException");
        }