//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); }
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); }
/* * 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); }