On 2024.09.10 12:14, Junio C Hamano wrote: > Calvin Wan <calvinwan@xxxxxxxxxx> writes: > > > However, I agree that the public interface should pass the > > compilation test and your approach does that -- will reroll with those > > changes and I believe that we should also fix the build.rs so that > > warnings also show up during cargo build. > > Thanks. I couldn't quite tell if *.c was supposed to be compilable > into *.o directly (if not, then Makefile needs fixing), and I am OK, > if the shim layer is only internally used, if the public.h defined > all pointers as "void *". > > I wasn't happy to cast "struct config_set *" between "struct > libgit_config_set *" merely because one embeds the other without > adding any other member. If they have to be bit-for-bit identical, > shouldn't we just use the real name of the struct everywhere? We want to namespace types as well as functions, as Phillip pointed out in 47b18fa4-f01b-4f42-8d04-9e145515ccc1@xxxxxxxxx. Is there a reason why we need the shim struct from your xmqqcylcpnah.fsf@gitster.g and can't just cast directly like so: contrib/libgit-rs/libgit-sys/public_symbol_export.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/contrib/libgit-rs/libgit-sys/public_symbol_export.c b/contrib/libgit-rs/libgit-sys/public_symbol_export.c index 07d6bfdd84..c96fa15ab6 100644 --- a/contrib/libgit-rs/libgit-sys/public_symbol_export.c +++ b/contrib/libgit-rs/libgit-sys/public_symbol_export.c @@ -3,12 +3,13 @@ // avoid conflicts with other libraries such as libgit2. #include "git-compat-util.h" -#include "contrib/libgit-rs/libgit-sys/public_symbol_export.h" #include "common-init.h" #include "config.h" #include "setup.h" #include "version.h" +#include "contrib/libgit-rs/libgit-sys/public_symbol_export.h" + extern struct repository *the_repository; #pragma GCC visibility push(default) @@ -35,32 +36,32 @@ int libgit_parse_maybe_bool(const char *val) struct libgit_config_set *libgit_configset_alloc(void) { - return git_configset_alloc(); + return (struct libgit_config_set *) git_configset_alloc(); } void libgit_configset_clear_and_free(struct libgit_config_set *cs) { - git_configset_clear_and_free(cs); + git_configset_clear_and_free((struct config_set *) cs); } void libgit_configset_init(struct libgit_config_set *cs) { - git_configset_init(cs); + git_configset_init((struct config_set *) cs); } int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename) { - return git_configset_add_file(cs, filename); + return git_configset_add_file((struct config_set *) cs, filename); } int libgit_configset_get_int(struct libgit_config_set *cs, const char *key, int *dest) { - return git_configset_get_int(cs, key, dest); + return git_configset_get_int((struct config_set *) cs, key, dest); } int libgit_configset_get_string(struct libgit_config_set *cs, const char *key, char **dest) { - return git_configset_get_string(cs, key, dest); + return git_configset_get_string((struct config_set *) cs, key, dest); } const char *libgit_user_agent(void)