On Fri, Nov 18, 2022 at 04:44:56PM +0000, Gary Guo wrote:
On Wed, 16 Nov 2022 09:12:01 +0800 Kent Gibson warthog618@gmail.com wrote:
On Mon, Nov 14, 2022 at 10:49:36PM +0100, Bartosz Golaszewski wrote:
On Mon, Nov 7, 2022 at 10:57 AM Viresh Kumar viresh.kumar@linaro.org wrote:
Hello,
Here is another version of the rust bindings, based of the master branch.
Pushed here:
https://github.com/vireshk/libgpiod v9
V8->V9:
- Merged the last patch (supporting Events) with the other patches.
- Events implementation is simplified and made efficient. nth() is also implemented for the iterator.
- Unnecessary comment removed from Cargo.toml files.
- Updated categories in libgpiod's Cargo.toml.
- Updated gpio_events example to show cloned events live past another read_edge_events().
- Implement AsRawFd for Chip.
- Other minor changes.
Kent, Miguel: if you are ok with this version - can you add your review tags?
Bart
As mentioned elsewhere, I'm a bit iffy about the handling of non-UTF-8 names, which are treated as errors, but are valid in the C API. But that is an extreme corner case that can be addressed later, so I have no objection to this version being merged.
Reviewed-by: Kent Gibson warthog618@gmail.com
Cheers, Kent.
I have glanced through the code and I find no reason that the `str` used couldn't be replaced with `[u8]` or `OsStr`. The former might be a little bit difficult to use, but `OsStr` could be easily converted into `str` by just `.to_str().expect("name should be utf-8")` if the user don't care about non-UTF-8 or is certain that names are indeed UTF-8.
Or you can use `OsStr::to_string_lossy()` though that requires allocation.
str is preferable as it is easer to use, and 99.99% of the time will be fine. I have toyed with using OsStr, but having to do the conversion becomes really tedious really fast.
I am not sure about whether this would be worthwhile though, because I doubt if anyone is actually using non-UTF-8 strings in those places. Non-ASCII usages should already be rare?
That is what I meant by "an extreme corner case".
The problem with the GPIO uAPI is that it limits names to 32 bytes, and valid UTF-8 passed in may get truncated mid-codepoint, resulting in invalid UTF-8 when read back. Handling that case by truncating the string before the split codepoint would at least ensure that the Rust API would round-trip.
Cheers, Kent.