[Darwin] Make the 'kevent' P/Invoke have blittable signatures. (#20467)
Contributes towards #15684.
This commit is contained in:
Родитель
b410d74248
Коммит
0f23bcda3c
|
@ -32,6 +32,7 @@
|
||||||
using System;
|
using System;
|
||||||
using CoreFoundation;
|
using CoreFoundation;
|
||||||
using ObjCRuntime;
|
using ObjCRuntime;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
@ -183,10 +184,7 @@ namespace Darwin {
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport (Constants.SystemLibrary)]
|
[DllImport (Constants.SystemLibrary)]
|
||||||
unsafe extern static int /* int */ kevent (int kq, KernelEvent *changeList, int /* int */ nChanges, KernelEvent *eventList, int /* int */ nEvents, IntPtr timeout);
|
unsafe extern static int /* int */ kevent (int kq, KernelEvent *changeList, int /* int */ nChanges, KernelEvent *eventList, int /* int */ nEvents, TimeSpec* timeout);
|
||||||
|
|
||||||
[DllImport (Constants.SystemLibrary)]
|
|
||||||
unsafe extern static int /* int */ kevent (int kq, KernelEvent *changeList, int /* int */ nChanges, KernelEvent *eventList, int /* int */ nEvents, ref TimeSpec timeout);
|
|
||||||
|
|
||||||
public int KEvent (KernelEvent[] changeList, KernelEvent[] eventList, TimeSpan? timeout = null)
|
public int KEvent (KernelEvent[] changeList, KernelEvent[] eventList, TimeSpan? timeout = null)
|
||||||
{
|
{
|
||||||
|
@ -229,10 +227,10 @@ namespace Darwin {
|
||||||
fixed (KernelEvent *cp = changeList)
|
fixed (KernelEvent *cp = changeList)
|
||||||
fixed (KernelEvent *ep = eventList) {
|
fixed (KernelEvent *ep = eventList) {
|
||||||
if (timeout is null) {
|
if (timeout is null) {
|
||||||
return kevent (handle, cp, nChanges, ep, nEvents, IntPtr.Zero);
|
return kevent (handle, cp, nChanges, ep, nEvents, null);
|
||||||
} else {
|
} else {
|
||||||
TimeSpec ts = timeout.Value;
|
TimeSpec ts = timeout.Value;
|
||||||
return kevent (handle, cp, nChanges, ep, nEvents, ref ts);
|
return kevent (handle, cp, nChanges, ep, nEvents, &ts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -264,7 +262,7 @@ namespace Darwin {
|
||||||
unsafe {
|
unsafe {
|
||||||
fixed (KernelEvent *cp = changeList)
|
fixed (KernelEvent *cp = changeList)
|
||||||
fixed (KernelEvent *ep = eventList)
|
fixed (KernelEvent *ep = eventList)
|
||||||
return kevent (handle, cp, nChanges, ep, nEvents, ref timeOut) != -1;
|
return kevent (handle, cp, nChanges, ep, nEvents, (TimeSpec *) Unsafe.AsPointer<TimeSpec> (ref timeOut)) != -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,7 +278,7 @@ namespace Darwin {
|
||||||
unsafe {
|
unsafe {
|
||||||
fixed (KernelEvent *cp = changeList)
|
fixed (KernelEvent *cp = changeList)
|
||||||
fixed (KernelEvent *ep = eventList)
|
fixed (KernelEvent *ep = eventList)
|
||||||
return kevent (handle, cp, nChanges, ep, nEvents, IntPtr.Zero) != -1;
|
return kevent (handle, cp, nChanges, ep, nEvents, null) != -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +288,7 @@ namespace Darwin {
|
||||||
unsafe {
|
unsafe {
|
||||||
fixed (KernelEvent *cp = changeList)
|
fixed (KernelEvent *cp = changeList)
|
||||||
fixed (KernelEvent *ep = eventList)
|
fixed (KernelEvent *ep = eventList)
|
||||||
return kevent (handle, cp, changeList?.Length ?? 0, ep, eventList?.Length ?? 0, ref timeOut) != -1;
|
return kevent (handle, cp, changeList?.Length ?? 0, ep, eventList?.Length ?? 0, (TimeSpec *) Unsafe.AsPointer<TimeSpec> (ref timeOut)) != -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -307,9 +305,9 @@ namespace Darwin {
|
||||||
fixed (KernelEvent *cp = changeList)
|
fixed (KernelEvent *cp = changeList)
|
||||||
fixed (KernelEvent *ep = eventList)
|
fixed (KernelEvent *ep = eventList)
|
||||||
#if NET
|
#if NET
|
||||||
return kevent (handle, cp, changeList?.Length ?? 0, ep, eventList?.Length ?? 0, IntPtr.Zero);
|
return kevent (handle, cp, changeList?.Length ?? 0, ep, eventList?.Length ?? 0, null);
|
||||||
#else
|
#else
|
||||||
return kevent (handle, cp, changeList?.Length ?? 0, ep, eventList?.Length ?? 0, IntPtr.Zero) != -1;
|
return kevent (handle, cp, changeList?.Length ?? 0, ep, eventList?.Length ?? 0, null) != -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,7 +250,6 @@ namespace Cecil.Tests {
|
||||||
"System.Int32 AudioUnit.AUGraph::NewAUGraph(System.IntPtr&)",
|
"System.Int32 AudioUnit.AUGraph::NewAUGraph(System.IntPtr&)",
|
||||||
"System.Int32 CoreVideo.CVDisplayLink::CVDisplayLinkTranslateTime(System.IntPtr,CoreVideo.CVTimeStamp,CoreVideo.CVTimeStamp&)",
|
"System.Int32 CoreVideo.CVDisplayLink::CVDisplayLinkTranslateTime(System.IntPtr,CoreVideo.CVTimeStamp,CoreVideo.CVTimeStamp&)",
|
||||||
"System.Int32 CoreVideo.CVMetalTextureCache::CVMetalTextureCacheCreate(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr&)",
|
"System.Int32 CoreVideo.CVMetalTextureCache::CVMetalTextureCacheCreate(System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr,System.IntPtr&)",
|
||||||
"System.Int32 Darwin.KernelQueue::kevent(System.Int32,Darwin.KernelEvent*,System.Int32,Darwin.KernelEvent*,System.Int32,Darwin.TimeSpec&)",
|
|
||||||
"System.Int32 ObjCRuntime.Runtime::_NSGetExecutablePath(System.Byte[],System.Int32&)",
|
"System.Int32 ObjCRuntime.Runtime::_NSGetExecutablePath(System.Byte[],System.Int32&)",
|
||||||
"System.Int32 Security.Authorization::AuthorizationCreate(Security.AuthorizationItemSet*,Security.AuthorizationItemSet*,Security.AuthorizationFlags,System.IntPtr&)",
|
"System.Int32 Security.Authorization::AuthorizationCreate(Security.AuthorizationItemSet*,Security.AuthorizationItemSet*,Security.AuthorizationFlags,System.IntPtr&)",
|
||||||
"System.Int32 Security.SecCertificate::SecCertificateCopyCommonName(System.IntPtr,System.IntPtr&)",
|
"System.Int32 Security.SecCertificate::SecCertificateCopyCommonName(System.IntPtr,System.IntPtr&)",
|
||||||
|
|
Загрузка…
Ссылка в новой задаче