Crate fopencookie

Source
Expand description

Convert an io::Write/io::Read/io::Seek to a libc::FILE stream using the fopencookie syscall.

Great for passing rust traits across FFI.

let mut v = vec![];
let stream = fopencookie::IoCStream::writer(&mut v);

// Use the libc stream functions
assert_eq!(
    unsafe {
        libc::fprintf(stream.as_ptr(), c"hello, world!".as_ptr())
    },
    13 // all bytes written
);

// It's reflected in our rust type!
assert_eq!(v, b"hello, world!");

Trait objects are supported!

let mut reader: Box<dyn io::Read>;
let stream = fopencookie::IoCStream::reader(reader);

You can use the Builder for more flexibility.

let mut file: File;
let stream = fopencookie::Builder::new()
    .read()
    .write()
    .seek()
    .build(file);

Structs§

Builder
Builder for IoCStream where you opt-in to forwarding io traits from the underlying type.
IoCStream
Compatibility layer between io::Read/io::Write/io::Seek and libc::FILE streams.
UnrecognisedMode

Enums§

Mode
The modes supported by fopencookie.