Thread overview
char[] ported from C to char[0] in the D core library
Sep 09, 2015
badlink
Sep 09, 2015
Adam D. Ruppe
Sep 09, 2015
badlink
Sep 09, 2015
Alex Parrill
Sep 11, 2015
badlink
September 09, 2015
The struct core.sys.linux.sys.inotify.inotify_event contains the field "char[0] name" which corresponds to "char name[]" in C.

Why it has been translated to "char[0]" ?
For me "char*" would have been more appropriate.
September 09, 2015
On Wednesday, 9 September 2015 at 16:49:39 UTC, badlink wrote:
> The struct core.sys.linux.sys.inotify.inotify_event contains the field "char[0] name" which corresponds to "char name[]" in C.
>
> Why it has been translated to "char[0]" ?

In that structure, the name is appended directly to the end of the data instead of pointed to. The size isn't known at compile time, so a zero-length placeholder is there instead.

You'd access it by using the .ptr property and get the length out of the `len` field.

> For me "char*" would have been more appropriate.

That's typically right, but since this case does it in-place instead of pointed, the zero length array is most accurate.
September 09, 2015
On Wednesday, 9 September 2015 at 16:59:09 UTC, Adam D. Ruppe wrote:
> That's typically right, but since this case does it in-place instead of pointed, the zero length array is most accurate.

I didn't consider that the name is placed right after the struct. Thanks !
September 09, 2015
On Wednesday, 9 September 2015 at 16:49:39 UTC, badlink wrote:
> The struct core.sys.linux.sys.inotify.inotify_event contains the field "char[0] name" which corresponds to "char name[]" in C.
>
> Why it has been translated to "char[0]" ?
> For me "char*" would have been more appropriate.

It's a flexible array member [1], not a pointer. Changing it to `char*` would make it incompatible with the C functions using it.

[1]: https://en.wikipedia.org/wiki/Flexible_array_member
September 11, 2015
On Wednesday, 9 September 2015 at 19:37:54 UTC, Alex Parrill wrote:
> It's a flexible array member [1], not a pointer. Changing it to `char*` would make it incompatible with the C functions using it.
>
> [1]: https://en.wikipedia.org/wiki/Flexible_array_member

TIL a new detail about C on the D forum ;)