extern "C" {
#endif
+#include <features.h>
+
#define __NEED_size_t
#define __NEED_gid_t
+#ifdef _GNU_SOURCE
+#define __NEED_FILE
+#endif
+
#include <bits/alltypes.h>
-struct group
-{
+struct group {
char *gr_name;
char *gr_passwd;
gid_t gr_gid;
int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **);
int getgrnam_r(const char *, struct group *, char *, size_t, struct group **);
+#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
struct group *getgrent(void);
void endgrent(void);
void setgrent(void);
+#endif
+
+#ifdef _GNU_SOURCE
+struct group *fgetgrent(FILE *);
+int putgrent(const struct group *, FILE *);
+#endif
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
int getgrouplist(const char *, gid_t, gid_t *, int *);