> On 17 Dec 2015, at 22:47, Daniel Eggert via swift-users 
> <swift-users@swift.org> wrote:
> 
> If I need access to the C fcntl(2):
> 
>  int fcntl(int, int, ...)
> 
> can I get the swift-package-manager or swift-build-tool to compile C code 
> that wraps this into a non-vararg version:
> 
>  int SocketHelper_fcntl_setFlags(int const fildes, int const flags)
>  {
>    return fcntl(fildes, F_SETFL, flags);
>  }
> 
>  int SocketHelper_fcntl_getFlags(int const fildes)
>  {
>    return fcntl(fildes, F_GETFL);
>  }
> 
> ?

I solved it like this:

typealias fcntlType = @convention(c) (CInt, CInt, CInt) -> (CInt)
let fcntlAddr = dlsym(UnsafeMutablePointer<Void>(bitPattern: Int(-2)), "fcntl")
let fcntlType: myFcntl = unsafeBitCast(fcntlAddr, fcntlType.self)

which admittedly is a bit tacky, but it works for now.

/Daniel

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to