When dealing with FFI (fixed char buffers in file formats that represent strings and passing fixed char buffers to C code to write chars to them up to a given max len) I often find myself doing this:
let end = s.iter().position(|&b| b == 0).map_or(0, |i| i + 1);
CStr::from_bytes_with_nul(&s[..end])
Because if I pass the whole slice to it, it returns a FromBytesWithNulError.
There should be a function that combines both lines and read until the first '\0' byte in the slice.
Something like:
CStr::from_bytes_until_nul(slice)
And yes, I did write my own function for my use case but I find myself copying these two lines around into different projects dealing with FFI and I think it would make sense to have this (arguably) "basic functionality" in std's CStr :)
When dealing with FFI (fixed char buffers in file formats that represent strings and passing fixed char buffers to C code to write chars to them up to a given max len) I often find myself doing this:
Because if I pass the whole slice to it, it returns a
FromBytesWithNulError.There should be a function that combines both lines and read until the first
'\0'byte in the slice.Something like:
And yes, I did write my own function for my use case but I find myself copying these two lines around into different projects dealing with FFI and I think it would make sense to have this (arguably) "basic functionality" in std's
CStr:)