Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
0
        public unsafe static IOVector Do(ref uint[] ary)
        {
            IOVector vec = new IOVector();

            unsafe
            {
                fixed(uint *pData = &ary[0])
                {
                    vec.Base   = (IntPtr)pData;
                    vec.Length = sizeof(uint) * ary.Length;
                }

                //vec.Length = ary.Length;
            }

            return(vec);
        }
Ejemplo n.º 3
0
        /*
         *       public static IOVector Do<T> (ref T[] ary) where T: struct
         *       {
         *       IOVector vec = new IOVector ();
         *
         *       unsafe {
         *       fixed(T* pData = &ary[0]) {
         *       vec.Base = (IntPtr)pData;
         *       vec.Length = sizeof(T)*ary.Length;
         *       }
         *       }
         *
         *       return vec;
         *       }
         */

        public static IOVector Do <T> (ref T data)       // where T: struct
        {
            IOVector vec = new IOVector();

            GCHandle gch = GCHandle.Alloc(data, GCHandleType.Pinned);

            vec.Base   = gch.AddrOfPinnedObject();
            vec.Length = Padded(Marshal.SizeOf(typeof(T)));
            gch.Free();

            /*
             *       unsafe {
             *       fixed (void* ptr = &data) {
             *       vec.Base = (IntPtr)ptr;
             *       vec.Length = sizeof(T);
             *       }
             *       }
             */

            return(vec);
        }