Example #1
0
        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);
        }
Example #2
0
        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);
        }