From 11b861713cf124701d471da97f5a6bfb72b85c81 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 5 Jun 2007 10:07:19 +0000 Subject: [PATCH] 2007-06-03 Kamil Skalski * SQLiteConvert.cs: Port function for converting native UTF8 string into managed string from the old SqliteClient implementation. Use it instead of PtrToStrAuto, which fails on Windows. svn path=/trunk/mcs/; revision=78615 --- .../Mono.Data.Sqlite_2.0/ChangeLog | 6 ++++++ .../Mono.Data.Sqlite_2.0/SQLiteConvert.cs | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/ChangeLog b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/ChangeLog index 4b275d3755b..2474055fa53 100644 --- a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/ChangeLog +++ b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/ChangeLog @@ -1,3 +1,9 @@ +2007-06-03 Kamil Skalski + + * SQLiteConvert.cs: Port function for converting native UTF8 string + into managed string from the old SqliteClient implementation. + Use it instead of PtrToStrAuto, which fails on Windows. + 2007-02-20 Marek Habersack * SQLite3.cs: handle sqlite3_prepare_v2 absent from the library, diff --git a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs index 2488166c17f..92d2fee1707 100644 --- a/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs +++ b/mcs/class/Mono.Data.Sqlite/Mono.Data.Sqlite_2.0/SQLiteConvert.cs @@ -235,7 +235,24 @@ namespace Mono.Data.Sqlite /// A string containing the translated character(s) public virtual string UTF8ToString(IntPtr nativestring) { - return Marshal.PtrToStringAuto (nativestring); + if (nativestring == IntPtr.Zero) + return null; + + // This assumes a single byte terminates the string. + + int len = 0; + while (Marshal.ReadByte (nativestring, len) != 0) + checked {++len;} + + unsafe { + string s = new string ((sbyte*) nativestring, 0, len, _utf8); + len = s.Length; + while (len > 0 && s [len-1] == 0) + --len; + if (len == s.Length) + return s; + return s.Substring (0, len); + } } -- 2.25.1