Mono_Posix_Syscall_getgrnam (const char * name, struct Mono_Posix_Syscall__Group * gbuf)
{
  int * D.8005;
  int D.8006;
  int D.8009;
  struct group * _gbuf;

  if (gbuf == 0B) goto <D.8003>; else goto <D.8004>;
  <D.8003>:
  D.8005 = __errno_location ();
  *D.8005 = 14;
  D.8006 = -1;
  return D.8006;
  <D.8004>:
  D.8005 = __errno_location ();
  *D.8005 = 0;
  _gbuf = getgrnam (name);
  if (_gbuf == 0B) goto <D.8007>; else goto <D.8008>;
  <D.8007>:
  D.8006 = -1;
  return D.8006;
  <D.8008>:
  D.8009 = copy_group (gbuf, _gbuf);
  if (D.8009 == -1) goto <D.8010>; else goto <D.8011>;
  <D.8010>:
  D.8005 = __errno_location ();
  *D.8005 = 12;
  D.8006 = -1;
  return D.8006;
  <D.8011>:
  D.8006 = 0;
  return D.8006;
}


copy_group (struct Mono_Posix_Syscall__Group * to, struct group * from)
{
  unsigned int D.8013;
  char * D.8014;
  char * D.8015;
  long unsigned int buflen.0;
  long unsigned int D.8017;
  int D.8020;
  long unsigned int buflen.1;
  long unsigned int buflen.2;
  char * * D.8025;
  int count.3;
  void * D.8027;
  int D.8028;
  long unsigned int D.8029;
  long unsigned int D.8030;
  void * D.8031;
  void * D.8034;
  void * D.8036;
  char * D.8037;
  sizetype D.8038;
  char * D.8039;
  sizetype D.8040;
  long unsigned int D.8041;
  long unsigned int D.8042;
  char * * D.8043;
  char * * D.8044;
  char * D.8045;
  char * D.8046;
  long unsigned int D.8047;
  sizetype D.8048;
  size_t nlen;
  size_t plen;
  size_t buflen;
  int i;
  int count;
  char * cur;
  char * * to_mem;

  try
    {
      D.8013 = from->gr_gid;
      to->gr_gid = D.8013;
      to->gr_name = 0B;
      to->gr_passwd = 0B;
      to->gr_mem = 0B;
      to->_gr_buf_ = 0B;
      D.8014 = from->gr_name;
      nlen = strlen (D.8014);
      D.8015 = from->gr_passwd;
      plen = strlen (D.8015);
      buflen = 2;
      buflen.0 = buflen;
      D.8017 = 2147483647 - buflen.0;
      if (D.8017 <= nlen) goto <D.8018>; else goto <D.8019>;
      <D.8018>:
      D.8020 = -1;
      return D.8020;
      <D.8019>:
      buflen.0 = buflen;
      buflen.1 = buflen.0 + nlen;
      buflen = buflen.1;
      buflen.0 = buflen;
      D.8017 = 2147483647 - buflen.0;
      if (D.8017 <= plen) goto <D.8022>; else goto <D.8023>;
      <D.8022>:
      D.8020 = -1;
      return D.8020;
      <D.8023>:
      buflen.0 = buflen;
      buflen.2 = buflen.0 + plen;
      buflen = buflen.2;
      count = 0;
      D.8025 = from->gr_mem;
      count_members (D.8025, &count, &buflen);
      count.3 = count;
      to->_gr_nmem_ = count.3;
      buflen.0 = buflen;
      D.8027 = malloc (buflen.0);
      to->_gr_buf_ = D.8027;
      cur = to->_gr_buf_;
      count.3 = count;
      D.8028 = count.3 + 1;
      D.8029 = (long unsigned int) D.8028;
      D.8030 = D.8029 * 8;
      D.8031 = malloc (D.8030);
      to->gr_mem = D.8031;
      to_mem = to->gr_mem;
      D.8034 = to->_gr_buf_;
      if (D.8034 == 0B) goto <D.8032>; else goto <D.8035>;
      <D.8035>:
      D.8036 = to->gr_mem;
      if (D.8036 == 0B) goto <D.8032>; else goto <D.8033>;
      <D.8032>:
      D.8034 = to->_gr_buf_;
      free (D.8034);
      D.8036 = to->gr_mem;
      free (D.8036);
      D.8020 = -1;
      return D.8020;
      <D.8033>:
      D.8014 = from->gr_name;
      D.8037 = strcpy (cur, D.8014);
      to->gr_name = D.8037;
      D.8038 = nlen + 1;
      cur = cur + D.8038;
      D.8015 = from->gr_passwd;
      D.8039 = strcpy (cur, D.8015);
      to->gr_passwd = D.8039;
      D.8040 = plen + 1;
      cur = cur + D.8040;
      i = 0;
      goto <D.7944>;
      <D.7943>:
      D.8041 = (long unsigned int) i;
      D.8042 = D.8041 * 8;
      D.8043 = to_mem + D.8042;
      D.8025 = from->gr_mem;
      D.8041 = (long unsigned int) i;
      D.8042 = D.8041 * 8;
      D.8044 = D.8025 + D.8042;
      D.8045 = *D.8044;
      D.8046 = strcpy (cur, D.8045);
      *D.8043 = D.8046;
      D.8025 = from->gr_mem;
      D.8041 = (long unsigned int) i;
      D.8042 = D.8041 * 8;
      D.8044 = D.8025 + D.8042;
      D.8045 = *D.8044;
      D.8047 = strlen (D.8045);
      D.8048 = D.8047 + 1;
      cur = cur + D.8048;
      i = i + 1;
      <D.7944>:
      count.3 = count;
      if (i != count.3) goto <D.7943>; else goto <D.7945>;
      <D.7945>:
      D.8041 = (long unsigned int) i;
      D.8042 = D.8041 * 8;
      D.8043 = to_mem + D.8042;
      *D.8043 = 0B;
      D.8020 = 0;
      return D.8020;
    }
  finally
    {
      buflen = {CLOBBER};
      count = {CLOBBER};
    }
}


count_members (char * * gr_mem, int * count, size_t * mem)
{
  long unsigned int D.8051;
  long unsigned int D.8054;
  int D.8056;
  int D.8057;
  long unsigned int D.8058;
  long unsigned int D.8059;
  char * cur;

  *count = 0;
  D.8051 = *mem;
  if (D.8051 > 2147483646) goto <D.8052>; else goto <D.8053>;
  <D.8052>:
  return;
  <D.8053>:
  cur = *gr_mem;
  goto <D.7931>;
  <D.7930>:
  {
    size_t len;

    len = strlen (cur);
    D.8051 = *mem;
    D.8054 = 2147483646 - D.8051;
    if (D.8054 <= len) goto <D.7929>; else goto <D.8055>;
    <D.8055>:
    D.8056 = *count;
    D.8057 = D.8056 + 1;
    *count = D.8057;
    D.8051 = *mem;
    D.8058 = D.8051 + len;
    D.8059 = D.8058 + 1;
    *mem = D.8059;
  }
  gr_mem = gr_mem + 8;
  cur = *gr_mem;
  <D.7931>:
  if (cur != 0B) goto <D.7930>; else goto <D.7929>;
  <D.7929>:
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.8061;
  long unsigned int D.8062;

  D.8062 = __builtin_object_size (__dest, 1);
  D.8061 = __builtin___strcpy_chk (__dest, __src, D.8062);
  return D.8061;
}


Mono_Posix_Syscall_getgrgid (mph_gid_t gid, struct Mono_Posix_Syscall__Group * gbuf)
{
  int * D.8066;
  int D.8067;
  int D.8070;
  struct group * _gbuf;

  if (gbuf == 0B) goto <D.8064>; else goto <D.8065>;
  <D.8064>:
  D.8066 = __errno_location ();
  *D.8066 = 14;
  D.8067 = -1;
  return D.8067;
  <D.8065>:
  D.8066 = __errno_location ();
  *D.8066 = 0;
  _gbuf = getgrgid (gid);
  if (_gbuf == 0B) goto <D.8068>; else goto <D.8069>;
  <D.8068>:
  D.8067 = -1;
  return D.8067;
  <D.8069>:
  D.8070 = copy_group (gbuf, _gbuf);
  if (D.8070 == -1) goto <D.8071>; else goto <D.8072>;
  <D.8071>:
  D.8066 = __errno_location ();
  *D.8066 = 12;
  D.8067 = -1;
  return D.8067;
  <D.8072>:
  D.8067 = 0;
  return D.8067;
}


Mono_Posix_Syscall_getgrnam_r (const char * name, struct Mono_Posix_Syscall__Group * gbuf, void * * gbufp)
{
  int * D.8076;
  int D.8077;
  int D.8081;
  void * D.8084;
  int D.8089;
  char * buf;
  char * buf2;
  size_t buflen;
  int r;
  struct group _grbuf;

  try
    {
      if (gbuf == 0B) goto <D.8074>; else goto <D.8075>;
      <D.8074>:
      D.8076 = __errno_location ();
      *D.8076 = 14;
      D.8077 = -1;
      return D.8077;
      <D.8075>:
      buf2 = 0B;
      buf = buf2;
      buflen = 2;
      <D.7966>:
      buflen = buflen * 2;
      buf2 = realloc (buf, buflen);
      if (buf2 == 0B) goto <D.8078>; else goto <D.8079>;
      <D.8078>:
      free (buf);
      D.8076 = __errno_location ();
      *D.8076 = 12;
      D.8077 = -1;
      return D.8077;
      <D.8079>:
      buf = buf2;
      D.8076 = __errno_location ();
      *D.8076 = 0;
      r = getgrnam_r (name, &_grbuf, buf, buflen, gbufp);
      if (r != 0) goto <D.8080>; else goto <D.7967>;
      <D.8080>:
      D.8081 = recheck_range (r);
      if (D.8081 != 0) goto <D.7966>; else goto <D.7967>;
      <D.7967>:
      if (r == 0) goto <D.8082>; else goto <D.8083>;
      <D.8082>:
      D.8084 = *gbufp;
      if (D.8084 == 0B) goto <D.8085>; else goto <D.8086>;
      <D.8085>:
      D.8076 = __errno_location ();
      *D.8076 = 2;
      r = *D.8076;
      <D.8086>:
      <D.8083>:
      if (r == 0) goto <D.8087>; else goto <D.8088>;
      <D.8087>:
      D.8089 = copy_group (gbuf, &_grbuf);
      if (D.8089 == -1) goto <D.8090>; else goto <D.8091>;
      <D.8090>:
      D.8076 = __errno_location ();
      *D.8076 = 12;
      r = *D.8076;
      <D.8091>:
      <D.8088>:
      free (buf);
      D.8077 = r;
      return D.8077;
    }
  finally
    {
      _grbuf = {CLOBBER};
    }
}


recheck_range (int ret)
{
  int D.8096;
  int * D.8099;
  int D.8100;
  _Bool D.8101;

  if (ret == 34) goto <D.8094>; else goto <D.8095>;
  <D.8094>:
  D.8096 = 1;
  return D.8096;
  <D.8095>:
  if (ret == -1) goto <D.8097>; else goto <D.8098>;
  <D.8097>:
  D.8099 = __errno_location ();
  D.8100 = *D.8099;
  D.8101 = D.8100 == 34;
  D.8096 = (int) D.8101;
  return D.8096;
  <D.8098>:
  D.8096 = 0;
  return D.8096;
}


Mono_Posix_Syscall_getgrgid_r (mph_gid_t gid, struct Mono_Posix_Syscall__Group * gbuf, void * * gbufp)
{
  int * D.8105;
  int D.8106;
  int D.8110;
  void * D.8113;
  int D.8118;
  char * buf;
  char * buf2;
  size_t buflen;
  int r;
  struct group _grbuf;

  try
    {
      if (gbuf == 0B) goto <D.8103>; else goto <D.8104>;
      <D.8103>:
      D.8105 = __errno_location ();
      *D.8105 = 14;
      D.8106 = -1;
      return D.8106;
      <D.8104>:
      buf2 = 0B;
      buf = buf2;
      buflen = 2;
      <D.7978>:
      buflen = buflen * 2;
      buf2 = realloc (buf, buflen);
      if (buf2 == 0B) goto <D.8107>; else goto <D.8108>;
      <D.8107>:
      free (buf);
      D.8105 = __errno_location ();
      *D.8105 = 12;
      D.8106 = -1;
      return D.8106;
      <D.8108>:
      buf = buf2;
      D.8105 = __errno_location ();
      *D.8105 = 0;
      r = getgrgid_r (gid, &_grbuf, buf, buflen, gbufp);
      if (r != 0) goto <D.8109>; else goto <D.7979>;
      <D.8109>:
      D.8110 = recheck_range (r);
      if (D.8110 != 0) goto <D.7978>; else goto <D.7979>;
      <D.7979>:
      if (r == 0) goto <D.8111>; else goto <D.8112>;
      <D.8111>:
      D.8113 = *gbufp;
      if (D.8113 == 0B) goto <D.8114>; else goto <D.8115>;
      <D.8114>:
      D.8105 = __errno_location ();
      *D.8105 = 2;
      r = *D.8105;
      <D.8115>:
      <D.8112>:
      if (r == 0) goto <D.8116>; else goto <D.8117>;
      <D.8116>:
      D.8118 = copy_group (gbuf, &_grbuf);
      if (D.8118 == -1) goto <D.8119>; else goto <D.8120>;
      <D.8119>:
      D.8105 = __errno_location ();
      *D.8105 = 12;
      r = *D.8105;
      <D.8120>:
      <D.8117>:
      free (buf);
      D.8106 = r;
      return D.8106;
    }
  finally
    {
      _grbuf = {CLOBBER};
    }
}


Mono_Posix_Syscall_getgrent (struct Mono_Posix_Syscall__Group * grbuf)
{
  int * D.8125;
  int D.8126;
  int D.8129;
  struct group * gr;

  if (grbuf == 0B) goto <D.8123>; else goto <D.8124>;
  <D.8123>:
  D.8125 = __errno_location ();
  *D.8125 = 14;
  D.8126 = -1;
  return D.8126;
  <D.8124>:
  D.8125 = __errno_location ();
  *D.8125 = 0;
  gr = getgrent ();
  if (gr == 0B) goto <D.8127>; else goto <D.8128>;
  <D.8127>:
  D.8126 = -1;
  return D.8126;
  <D.8128>:
  D.8129 = copy_group (grbuf, gr);
  if (D.8129 == -1) goto <D.8130>; else goto <D.8131>;
  <D.8130>:
  D.8125 = __errno_location ();
  *D.8125 = 12;
  D.8126 = -1;
  return D.8126;
  <D.8131>:
  D.8126 = 0;
  return D.8126;
}


Mono_Posix_Syscall_fgetgrent (void * stream, struct Mono_Posix_Syscall__Group * grbuf)
{
  int * D.8135;
  int D.8136;
  int D.8139;
  struct group * gr;

  if (grbuf == 0B) goto <D.8133>; else goto <D.8134>;
  <D.8133>:
  D.8135 = __errno_location ();
  *D.8135 = 14;
  D.8136 = -1;
  return D.8136;
  <D.8134>:
  D.8135 = __errno_location ();
  *D.8135 = 0;
  gr = fgetgrent (stream);
  if (gr == 0B) goto <D.8137>; else goto <D.8138>;
  <D.8137>:
  D.8136 = -1;
  return D.8136;
  <D.8138>:
  D.8139 = copy_group (grbuf, gr);
  if (D.8139 == -1) goto <D.8140>; else goto <D.8141>;
  <D.8140>:
  D.8135 = __errno_location ();
  *D.8135 = 12;
  D.8136 = -1;
  return D.8136;
  <D.8141>:
  D.8136 = 0;
  return D.8136;
}


Mono_Posix_Syscall_setgroups (mph_size_t size, mph_gid_t * list)
{
  int * D.8145;
  int D.8146;

  if (0 != 0) goto <D.8143>; else goto <D.8144>;
  <D.8143>:
  D.8145 = __errno_location ();
  *D.8145 = 75;
  D.8146 = -1;
  return D.8146;
  <D.8144>:
  D.8146 = setgroups (size, list);
  return D.8146;
}


Mono_Posix_Syscall_setgrent ()
{
  int * D.8148;
  int D.8149;
  _Bool D.8152;
  _Bool D.8153;
  _Bool D.8154;
  _Bool D.8156;
  _Bool D.8157;
  _Bool D.8158;
  int D.8160;

  D.8148 = __errno_location ();
  *D.8148 = 0;
  <D.7996>:
  setgrent ();
  D.8148 = __errno_location ();
  D.8149 = *D.8148;
  if (D.8149 == 4) goto <D.7996>; else goto <D.7997>;
  <D.7997>:
  {
    int v;

    D.8148 = __errno_location ();
    v = *D.8148;
    D.8152 = v == 5;
    D.8153 = v == 24;
    D.8154 = D.8152 | D.8153;
    if (D.8154 != 0) goto <D.8150>; else goto <D.8155>;
    <D.8155>:
    D.8156 = v == 23;
    D.8157 = v == 12;
    D.8158 = D.8156 | D.8157;
    if (D.8158 != 0) goto <D.8150>; else goto <D.8159>;
    <D.8159>:
    if (v == 34) goto <D.8150>; else goto <D.8151>;
    <D.8150>:
    D.8160 = -1;
    return D.8160;
    <D.8151>:
  }
  D.8160 = 0;
  return D.8160;
}


Mono_Posix_Syscall_endgrent ()
{
  int D.8162;

  endgrent ();
  D.8162 = 0;
  return D.8162;
}


