Continued: Declarations of the same C struct conflict when imported
György Andrasek
jurily at gmail.com
Thu Sep 5 23:19:55 UTC 2019
Hi,
I accidentally ran dstep twice and ended up with the following
interaction:
https://github.com/ldc-developers/ldc/issues/3155
---
ldc 1.17.0, Android/Termux.
libarchive comes in two public header files: `archive.h` and
`archive_entry.h`.
Both headers declare `struct archive;` and `struct
archive_entry;`, faithfully
reproduced by dstep. Trying to import both yields a conflict
immediately:
```
[ 6%] Building D object
CMakeFiles/wng.dir/src/wngbase/libarchive.o
/data/data/com.termux/files/home/weidu-ng/src/wngbase/libarchive.d(27): Error: `archive_h.archive` at /data/data/com.termux/files/home/weidu-ng/src/wngbase/binding/archive_h.d(122) conflicts with `archive_entry_h.archive` at /data/data/com.termux/files/home/weidu-ng/src/wngbase/binding/archive_entry_h.d(92)
/data/data/com.termux/files/home/weidu-ng/src/wngbase/libarchive.d(28): Error: `archive_h.archive_entry` at /data/data/com.termux/files/home/weidu-ng/src/wngbase/binding/archive_h.d(123) conflicts with `archive_entry_h.archive_entry` at /data/data/com.termux/files/home/weidu-ng/src/wngbase/binding/archive_entry_h.d(93)
```
Annoying, but alias can deal with it. The problem comes in
actually using them. Annotated for clarity:
```D
int archive_read_next_header(archive_h.archive*,
archive_h.archive_entry**);
const(char)*
archive_entry_pathname_utf8(archive_entry_h.archive_entry*);
```
(I'm guessing this is the correct place to report this since this
is a notable improvement from ldc 1.13, which didn't even
understand pointer-to-opaque.)
---
They told me to go away. :)
I'm not trying to redesign the language, it simply didn't occur
to me that this won't work or isn't a trivial oversight. (Android
is dark and full of terrors.)
I can't imagine how it makes the language better to disallow
cross-module C calls like this, given that the least ugly
workaround is `void *`.
P.S. @kinke went through the trouble of upgrading ldc on Termux
while I was busy installing cargo. Android is now ahead of
Ubuntu. Please give him a medal or something.
More information about the Digitalmars-d
mailing list