#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#define __NEED_size_t
#define __NEED_uid_t
#define __NEED_gid_t

#ifdef _GNU_SOURCE
#define __NEED_FILE
#endif

#include <bits/alltypes.h>

struct passwd {
    char* pw_name;
    char* pw_passwd;
    uid_t pw_uid;
    gid_t pw_gid;
    char* pw_gecos;
    char* pw_dir;
    char* pw_shell;
};

void setpwent(void);
void endpwent(void);
struct passwd* getpwent(void);

struct passwd* getpwuid(uid_t);
struct passwd* getpwnam(const char*);
int getpwuid_r(uid_t, struct passwd*, char*, size_t, struct passwd**);
int getpwnam_r(const char*, struct passwd*, char*, size_t, struct passwd**);

#ifdef _GNU_SOURCE
struct passwd* fgetpwent(FILE*);
int putpwent(const struct passwd*, FILE*);
#endif

#ifdef __cplusplus
}
#endif