[1]: https://codeberg.org/201984/dut/src/branch/master/main.c#L16...
[2]: https://doc.rust-lang.org/nomicon/exotic-sizes.html#dynamica...
Would you like to expand on this? Is it because of type conversions that you'd have to do?
> I use[1] flexible array members to minimize allocations
I was under the impression that FAM was a non-standard extension, but alas it is part of C99.
From what I'm seeing you have intrusive list where each `entry` points to the previous and next element, where the path itself is a bag of bytes as part of the entry itself. I'm assuming that what you'd want from Rust is something akin to the following when it comes to the path?
struct Entry<const NAME_LEN: usize> {
..
mode: Mode,
name: InlineName<NAME_LEN>,
}
struct InlineName<const NAME_LEN: usize> {
value: [u8; NAME_LEN],
}For the FAM, your example looks like it requires a compile-time constant size. That's the same as hardcoding an array size in the struct, defeating the whole point. Short names will waste space, and long ones will get truncated.
You made me realize that the const generics stabilization work hasn't advanced enough to do what I was proposing (at least not in as straightforward way): https://play.rust-lang.org/?version=nightly&mode=debug&editi...
Those are const arguments, not const values, which means that you can operate on values as if they didn't have a size, while the compiler does keep track of the size throughout.
I'd have to take a more detailed look to see if this level of dynamism is enough to work with runtime provided strings, which they might not be, unless you started encoding things like "take every CStr, create a StackString<1> for each char, and then add them together".
Also some nebulous "being more secure". Never mind that this tool does not have elevated privileges. You gotta watch out for those remote root exploits even for a local only app, man.
But I suppose it's not a very likely bug to have in this kind of tool.
Memory safety is cool and all, but a program that effectively sums a bunch of numbers together isn't going to cause issues. Worst case the program segfaults