On 29/02/16 12:32, Ramsay Jones wrote: > > > On 29/02/16 10:40, Torsten Bögershausen wrote: >> That compiles OK, thanks. >> >> >> Sorry for high-jacking this thread, but while compiling under CYGWIN, >> found one warning: >> >> LINK git-credential-store.exe >> CC daemon.o >> daemon.c: In function ‘drop_privileges’: >> daemon.c:1136:15: warning: implicit declaration of function ‘initgroups’ [-Wimplicit-function-declaration] >> if (cred && (initgroups(cred->pass->pw_name, cred->gid) || > > Yeah, this has been there for a while - except it depends on which version > of the header files you have. (Some may not see the warning). > > I have 'fixed' this twice before, then updated my installation and > a change to the system headers broke it again! (The headers are > currently 'broken'). So, I got tired of fixing it up and have left > it a while - you never know a new update may fix it! ;-) > > [I personally don't use the git daemon on cygwin, so I don't know > if this a problem in practice.] BTW, I forgot to mention that I have had a patch in my local repo for ages which addresses this issue. However, although this patch fixes the problem for me, with the header files I currently have installed, it would just as easily _introduce_ this warning for those that don't currently see it! ;-) I suppose that I could send a patch which sets NO_INITGROUPS in the Makefile, until the system header files are fixed. What do you think? The correct solution is to fix the header file. I have been a bit reluctant to tackle that, because I'm not familiar with the cygwin project development process. Since Newlib is an upstream project to cygwin, should I go there first/instead? Anyway, I had a quick squint at the header and I think it needs to be changed something like the diff below. (I've also attached the new grp.h file). [Note: I didn't know what to do about _PATH_GROUP, setgrfile(), group_from_gid() and setgroupent(), so I punted on those!] Now, If only we knew someone who could try introducing such a fix to the cygwin project ... ATB, Ramsay Jones -- >8 -- diff --git a/usr/include/grp.h b/grp.h index c3a5a67..f2f1902 100644 --- a/usr/include/grp.h +++ b/grp.h @@ -67,25 +67,27 @@ extern "C" { #ifndef __INSIDE_CYGWIN__ struct group *getgrgid (gid_t); struct group *getgrnam (const char *); +#if defined __POSIX_VISIBLE || defined __BSD_VISIBLE int getgrnam_r (const char *, struct group *, char *, size_t, struct group **); int getgrgid_r (gid_t, struct group *, char *, size_t, struct group **); -#ifndef _POSIX_SOURCE -struct group *getgrent (void); +#endif +#if defined __BSD_VISIBLE || defined _XOPEN_SOURCE_EXTENDED void setgrent (void); +#if __XSI_VISIBLE >= 700 +struct group *getgrent (void); void endgrent (void); +#endif +#endif +#if defined __BSD_VISIBLE +int initgroups (const char *, gid_t); +#endif #ifndef __CYGWIN__ -void setgrfile (const char *); -#endif /* !__CYGWIN__ */ -#ifndef _XOPEN_SOURCE -#ifndef __CYGWIN__ +void setgrfile (const char *); /* 4.3BSD-Reno & Minix */ char *group_from_gid (gid_t, int); -int setgroupent (int); +int setgroupent (int); /* 4.3BSD-Reno & Mac OS X */ #endif /* !__CYGWIN__ */ -int initgroups (const char *, gid_t); -#endif /* !_XOPEN_SOURCE */ -#endif /* !_POSIX_SOURCE */ #endif /* !__INSIDE_CYGWIN__ */ #ifdef __cplusplus