From: adam Date: Fri, 16 Aug 2013 08:18:50 +0000 (+0700) Subject: #92 removed MonoPosix dependency X-Git-Tag: v1.2.12~193 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa030237e64d9d725533b731f3a66f08b4bc5fdc;p=platform%2Fupstream%2Fejdb.git #92 removed MonoPosix dependency --- diff --git a/nejdb/Ejdb.DB/EJDB.cs b/nejdb/Ejdb.DB/EJDB.cs index 01b1253..99c5a5d 100644 --- a/nejdb/Ejdb.DB/EJDB.cs +++ b/nejdb/Ejdb.DB/EJDB.cs @@ -15,9 +15,9 @@ // ============================================================================================ using System; using System.Runtime.InteropServices; -using Mono.Unix; using System.Text; using Ejdb.BSON; +using Ejdb.Utils; namespace Ejdb.DB { @@ -163,11 +163,11 @@ namespace Ejdb.DB { internal static extern bool _ejdbopen([In] IntPtr db, [In] IntPtr path, int mode); internal static bool _ejdbopen(IntPtr db, string path, int mode) { - IntPtr pptr = UnixMarshal.StringToHeap(path, Encoding.UTF8); + IntPtr pptr = Native.NativeUtf8FromString(path); //UnixMarshal.StringToHeap(path, Encoding.UTF8); try { return _ejdbopen(db, pptr, mode); } finally { - UnixMarshal.FreeHeap(pptr); + Marshal.FreeHGlobal(pptr); //UnixMarshal.FreeHeap(pptr); } } @@ -187,11 +187,11 @@ namespace Ejdb.DB { internal static extern IntPtr _ejdbgetcoll([In] IntPtr db, [In] IntPtr cname); internal static IntPtr _ejdbgetcoll(IntPtr db, string cname) { - IntPtr cptr = UnixMarshal.StringToHeap(cname, Encoding.UTF8); + IntPtr cptr = Native.NativeUtf8FromString(cname); //UnixMarshal.StringToHeap(cname, Encoding.UTF8); try { return _ejdbgetcoll(db, cptr); } finally { - UnixMarshal.FreeHeap(cptr); + Marshal.FreeHGlobal(cptr); //UnixMarshal.FreeHeap(cptr); } } @@ -202,7 +202,7 @@ namespace Ejdb.DB { internal static extern IntPtr _ejdbcreatecoll([In] IntPtr db, [In] IntPtr cname, ref EJDBCollectionOptionsN opts); internal static IntPtr _ejdbcreatecoll(IntPtr db, String cname, EJDBCollectionOptionsN? opts) { - IntPtr cptr = UnixMarshal.StringToHeap(cname, Encoding.UTF8); + IntPtr cptr = Native.NativeUtf8FromString(cname);//UnixMarshal.StringToHeap(cname, Encoding.UTF8); try { if (opts == null) { return _ejdbcreatecoll(db, cptr, IntPtr.Zero); @@ -211,7 +211,7 @@ namespace Ejdb.DB { return _ejdbcreatecoll(db, cptr, ref nopts); } } finally { - UnixMarshal.FreeHeap(cptr); + Marshal.FreeHGlobal(cptr); //UnixMarshal.FreeHeap(cptr); } } //EJDB_EXPORT bool ejdbrmcoll(EJDB *jb, const char *colname, bool unlinkfile); @@ -219,11 +219,11 @@ namespace Ejdb.DB { internal static extern bool _ejdbrmcoll([In] IntPtr db, [In] IntPtr cname, bool unlink); internal static bool _ejdbrmcoll(IntPtr db, string cname, bool unlink) { - IntPtr cptr = UnixMarshal.StringToHeap(cname, Encoding.UTF8); + IntPtr cptr = Native.NativeUtf8FromString(cname);//UnixMarshal.StringToHeap(cname, Encoding.UTF8); try { return _ejdbrmcoll(db, cptr, unlink); } finally { - UnixMarshal.FreeHeap(cptr); + Marshal.FreeHGlobal(cptr); //UnixMarshal.FreeHeap(cptr); } } //EJDB_EXPORT bson* ejdbcommand(EJDB *jb, bson *cmd); @@ -273,11 +273,11 @@ namespace Ejdb.DB { internal static extern IntPtr _ejdbversion(); internal static bool _ejdbsetindex(IntPtr coll, string ipath, int flags) { - IntPtr ipathptr = UnixMarshal.StringToHeap(ipath, Encoding.UTF8); + IntPtr ipathptr = Native.NativeUtf8FromString(ipath); //UnixMarshal.StringToHeap(ipath, Encoding.UTF8); try { return _ejdbsetindex(coll, ipathptr, flags); } finally { - UnixMarshal.FreeHeap(ipathptr); + Marshal.FreeHGlobal(ipathptr); //UnixMarshal.FreeHeap(ipathptr); } } #endregion @@ -314,7 +314,7 @@ namespace Ejdb.DB { if (ecode == null) { return null; } - return UnixMarshal.PtrToString(_ejdberrmsg((int) ecode), Encoding.UTF8); + return Native.StringFromNativeUtf8(_ejdberrmsg((int) ecode)); //UnixMarshal.PtrToString(_ejdberrmsg((int) ecode), Encoding.UTF8); } } @@ -369,7 +369,7 @@ namespace Ejdb.DB { if (vres == IntPtr.Zero) { throw new Exception("Unable to get ejdb library version"); } - _LIBVERSION = UnixMarshal.PtrToString(vres, Encoding.UTF8); + _LIBVERSION = Native.StringFromNativeUtf8(vres); //UnixMarshal.PtrToString(vres, Encoding.UTF8); } return _LIBVERSION; } @@ -402,7 +402,7 @@ namespace Ejdb.DB { /// /// The main database file path. /// Open mode. - public EJDB(string path, int omode=DEFAULT_OPEN_MODE) { + public EJDB(string path, int omode=DEFAULT_OPEN_MODE) { if (EJDB.LibHexVersion < 0x1113) { throw new EJDBException("EJDB library version must be at least '1.1.13' or greater"); } diff --git a/nejdb/Ejdb.DB/EJDBQuery.cs b/nejdb/Ejdb.DB/EJDBQuery.cs index 6a948f8..2c20178 100644 --- a/nejdb/Ejdb.DB/EJDBQuery.cs +++ b/nejdb/Ejdb.DB/EJDBQuery.cs @@ -16,8 +16,8 @@ using System; using Ejdb.BSON; using System.Runtime.InteropServices; -using Mono.Unix; using System.Text; +using Ejdb.Utils; namespace Ejdb.DB { @@ -188,7 +188,7 @@ namespace Ejdb.DB { if (cur != null) { //static extern IntPtr _tcxstrptr([In] IntPtr strptr); IntPtr sbptr = _tcxstrptr(logsptr); - cur.Log = UnixMarshal.PtrToString(sbptr, Encoding.UTF8); + cur.Log = Native.StringFromNativeUtf8(sbptr); //UnixMarshal.PtrToString(sbptr, Encoding.UTF8); } } finally { //static extern IntPtr _tcxstrdel([In] IntPtr strptr); diff --git a/nejdb/Ejdb.Utils/Native.cs b/nejdb/Ejdb.Utils/Native.cs new file mode 100644 index 0000000..c263443 --- /dev/null +++ b/nejdb/Ejdb.Utils/Native.cs @@ -0,0 +1,48 @@ +// ============================================================================================ +// .NET API for EJDB database library http://ejdb.org +// Copyright (C) 2012-2013 Softmotions Ltd +// +// This file is part of EJDB. +// EJDB is free software; you can redistribute it and/or modify it under the terms of +// the GNU Lesser General Public License as published by the Free Software Foundation; either +// version 2.1 of the License or any later version. EJDB is distributed in the hope +// that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +// License for more details. +// You should have received a copy of the GNU Lesser General Public License along with EJDB; +// if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, +// Boston, MA 02111-1307 USA. +// ============================================================================================ +using System; +using System.Text; +using System.Runtime.InteropServices; + +namespace Ejdb.Utils { + + public class Native { + static Native() { + } + + public static IntPtr NativeUtf8FromString(string managedString) { + int len = Encoding.UTF8.GetByteCount(managedString); + byte[] buffer = new byte[len + 1]; + Encoding.UTF8.GetBytes(managedString, 0, managedString.Length, buffer, 0); + IntPtr nativeUtf8 = Marshal.AllocHGlobal(buffer.Length); + Marshal.Copy(buffer, 0, nativeUtf8, buffer.Length); + return nativeUtf8; + } + + public static string StringFromNativeUtf8(IntPtr nativeUtf8) { + int len = 0; + for (; Marshal.ReadByte(nativeUtf8, len) != 0; ++len) { + } + if (len == 0) { + return string.Empty; + } + byte[] buffer = new byte[len]; + Marshal.Copy(nativeUtf8, buffer, 0, buffer.Length); + return Encoding.UTF8.GetString(buffer); + } + } +} + diff --git a/nejdb/nejdb.csproj b/nejdb/nejdb.csproj index 01b6cb0..b6b82b2 100644 --- a/nejdb/nejdb.csproj +++ b/nejdb/nejdb.csproj @@ -52,7 +52,6 @@ - False @@ -84,6 +83,7 @@ + diff --git a/nejdb/nejdb.sln b/nejdb/nejdb.sln index ff96e43..bf8330a 100644 --- a/nejdb/nejdb.sln +++ b/nejdb/nejdb.sln @@ -38,7 +38,7 @@ Global GlobalSection(NestedProjects) = preSolution EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = sample\sample.csproj + StartupItem = nejdb.csproj Policies = $0 $0.StandardHeader = $1 $1.Text = @============================================================================================\n .NET API for EJDB database library http://ejdb.org\n Copyright (C) 2012-2013 Softmotions Ltd \n\n This file is part of EJDB.\n EJDB is free software; you can redistribute it and/or modify it under the terms of\n the GNU Lesser General Public License as published by the Free Software Foundation; either\n version 2.1 of the License or any later version. EJDB is distributed in the hope\n that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public\n License for more details.\n You should have received a copy of the GNU Lesser General Public License along with EJDB;\n if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,\n Boston, MA 02111-1307 USA.\n============================================================================================ diff --git a/nejdb/nejdb.userprefs b/nejdb/nejdb.userprefs index 9da185b..b667d54 100644 --- a/nejdb/nejdb.userprefs +++ b/nejdb/nejdb.userprefs @@ -1,25 +1,9 @@  - - - - - - - - - - + + - - - - - - - - - + @@ -31,24 +15,14 @@ - - - - - - - - + + - - - - - + \ No newline at end of file