#include "pwf.h"

static FILE* f;
static char *line, **mem;
static struct group gr;

void setgrent(void) {
  if (f)
    fclose(f);
  f = 0;
}

weak_alias(setgrent, endgrent);

struct group* getgrent(void) {
  struct group* res;
  size_t size = 0, nmem = 0;
  if (!f)
    f = fopen("/etc/group", "rbe");
  if (!f)
    return 0;
  __getgrent_a(f, &gr, &line, &size, &mem, &nmem, &res);
  return res;
}

struct group* getgrgid(gid_t gid) {
  struct group* res;
  size_t size = 0, nmem = 0;
  __getgr_a(0, gid, &gr, &line, &size, &mem, &nmem, &res);
  return res;
}

struct group* getgrnam(const char* name) {
  struct group* res;
  size_t size = 0, nmem = 0;
  __getgr_a(name, 0, &gr, &line, &size, &mem, &nmem, &res);
  return res;
}
