public static IntPtr ToIntPtr(byte[] value, ref int length) { if (value == null) { return(IntPtr.Zero); } length = (int)value.Length; if (length == 0) { return(IntPtr.Zero); } IntPtr intPtr = SQLiteMemory.Allocate(length); if (intPtr == IntPtr.Zero) { return(IntPtr.Zero); } Marshal.Copy(value, 0, intPtr, length); return(intPtr); }
public static IntPtr Utf8IntPtrFromString(string value, ref int length) { if (value == null) { return(IntPtr.Zero); } IntPtr zero = IntPtr.Zero; byte[] utf8BytesFromString = SQLiteString.GetUtf8BytesFromString(value); if (utf8BytesFromString == null) { return(IntPtr.Zero); } length = (int)utf8BytesFromString.Length; zero = SQLiteMemory.Allocate(length + 1); if (zero == IntPtr.Zero) { return(IntPtr.Zero); } Marshal.Copy(utf8BytesFromString, 0, zero, length); Marshal.WriteByte(zero, length, 0); return(zero); }
private static IntPtr AllocateAndInitializeNative(int nConstraint, int nOrderBy) { int num; int num1; int num2; int num3; IntPtr zero = IntPtr.Zero; IntPtr intPtr = IntPtr.Zero; IntPtr zero1 = IntPtr.Zero; IntPtr intPtr1 = IntPtr.Zero; IntPtr zero2 = IntPtr.Zero; try { SQLiteIndex.SizeOfNative(out num, out num2, out num1, out num3); if (num > 0 && num2 > 0 && num1 > 0 && num3 > 0) { intPtr = SQLiteMemory.Allocate(num); zero1 = SQLiteMemory.Allocate(num2 * nConstraint); intPtr1 = SQLiteMemory.Allocate(num1 * nOrderBy); zero2 = SQLiteMemory.Allocate(num3 * nConstraint); if (intPtr != IntPtr.Zero && zero1 != IntPtr.Zero && intPtr1 != IntPtr.Zero && zero2 != IntPtr.Zero) { int num4 = 0; SQLiteMarshal.WriteInt32(intPtr, num4, nConstraint); num4 = SQLiteMarshal.NextOffsetOf(num4, 4, IntPtr.Size); SQLiteMarshal.WriteIntPtr(intPtr, num4, zero1); num4 = SQLiteMarshal.NextOffsetOf(num4, IntPtr.Size, 4); SQLiteMarshal.WriteInt32(intPtr, num4, nOrderBy); num4 = SQLiteMarshal.NextOffsetOf(num4, 4, IntPtr.Size); SQLiteMarshal.WriteIntPtr(intPtr, num4, intPtr1); num4 = SQLiteMarshal.NextOffsetOf(num4, IntPtr.Size, IntPtr.Size); SQLiteMarshal.WriteIntPtr(intPtr, num4, zero2); zero = intPtr; } } } finally { if (zero == IntPtr.Zero) { if (zero2 != IntPtr.Zero) { SQLiteMemory.Free(zero2); zero2 = IntPtr.Zero; } if (intPtr1 != IntPtr.Zero) { SQLiteMemory.Free(intPtr1); intPtr1 = IntPtr.Zero; } if (zero1 != IntPtr.Zero) { SQLiteMemory.Free(zero1); zero1 = IntPtr.Zero; } if (intPtr != IntPtr.Zero) { SQLiteMemory.Free(intPtr); intPtr = IntPtr.Zero; } } } return(zero); }