I agree, it's just a lot of work for someone (not me; I will only wrap the things I need).
> On Oct 18, 2014, at 19:33 , Roland King <r...@rols.org> wrote: > >> >> That's what I ended up doing (setNonblocking(int inFileDescriptor)), but, I >> was asking for the sake of learning the language. It would be nice to have >> generic replacements for fcntl() and ioctl(). >> > > The best replacement would be to have a set of functions which took the Swiss > Army knife which is fcntl() and split it up from fcntl( filedes, cmd, … ) > into a series of fnctl_cmd( filedes, typed_argument ) much as Marco > suggested. Then you have something which does import nicely into Swift and is > typesafe, even the structures are then properly bridged across for you. > > Something totally generic would be a c wrapper like this (and I haven’t > tested it, just for the sake of discussion) > > int fcntl_wrap( int filedes, int cmd, void *arg ) > { > return fcntl( filedes, cmd, arg ); > } > > which bridges into Swift as > > func fcntl_wrap(filedes: Int32, cmd: Int32, arg: UnsafeMutablePointer<Void>) > -> Int32 > > You can manipulate that final arg in many very un-typesafe ways to get what > you want. If there’s no argument, pass nil, that’s easy. In the case of the > F_GETPATH create yourself a buffer of Char or UInt8 or whatever chars are > called these days and cast that backwards and forwards. > > But see how vile this is, how about F_RDAHEAD, the man page for that says > > Turn read ahead off/on. A zero value in arg disables read ahead. A > non-zero value in arg turns read ahead on. > > that doesn’t actually tell you what ‘arg’ is. Is it a byte, an int, a long, > bool .. what? It’s probably an int, but you don’t really know and it’s > important, if the function just reads one byte of arg that’s the one needs to > be non-zero. So now you have to create a thing which looks like an int but is > an UnsafeMutablePointer<Void> so it can be passed into the function > > let really_dangerous_variable : UnsafeMutablePointer<Void> = > UnsafeMutablePointer( bitPattern:1 ) > > So that’s how you could do it if you really wanted to, doing so probably > means you have a crash in your future. > > Marco’s idea of separating out into separate functions per-command and > stubbing each into C is a cleaner way of getting something which bridges back > into Swift vaguely nicely, and it’s not that much work either, and you can > add functions as you need them to a module you write. > -- Rick Mann rm...@latencyzero.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com