_wapi_glob (struct GDir * dir, const char * pattern, int flags, struct wapi_glob_t * pglob)
{
  int D.6470;
  int D.6473;
  const u_char * patnext.0;
  unsigned char D.6477;
  gchar * bufnext.1;
  char D.6481;
  gchar * bufnext.2;
  const u_char * patnext.3;
  unsigned char D.6486;
  int D.6487;
  int D.6488;
  int D.6489;
  const u_char * patnext;
  int c;
  gchar * bufnext;
  gchar * bufend;
  gchar patbuf[4096];

  try
    {
      patnext = pattern;
      D.6470 = flags & 1;
      if (D.6470 == 0) goto <D.6471>; else goto <D.6472>;
      <D.6471>:
      pglob->gl_pathc = 0;
      pglob->gl_pathv = 0B;
      pglob->gl_offs = 0;
      <D.6472>:
      D.6473 = flags & -257;
      pglob->gl_flags = D.6473;
      bufnext = &patbuf;
      bufend = bufnext + 4095;
      goto <D.6366>;
      <D.6365>:
      if (c == 92) goto <D.6474>; else goto <D.6475>;
      <D.6474>:
      patnext.0 = patnext;
      patnext = patnext.0 + 1;
      D.6477 = *patnext.0;
      c = (int) D.6477;
      if (c == 0) goto <D.6478>; else goto <D.6479>;
      <D.6478>:
      c = 92;
      patnext = patnext + 18446744073709551615;
      <D.6479>:
      bufnext.1 = bufnext;
      bufnext = bufnext.1 + 1;
      D.6481 = (char) c;
      *bufnext.1 = D.6481;
      goto <D.6482>;
      <D.6475>:
      bufnext.2 = bufnext;
      bufnext = bufnext.2 + 1;
      D.6481 = (char) c;
      *bufnext.2 = D.6481;
      <D.6482>:
      <D.6366>:
      if (bufnext < bufend) goto <D.6484>; else goto <D.6367>;
      <D.6484>:
      patnext.3 = patnext;
      patnext = patnext.3 + 1;
      D.6486 = *patnext.3;
      c = (int) D.6486;
      if (c != 0) goto <D.6365>; else goto <D.6367>;
      <D.6367>:
      *bufnext = 0;
      D.6488 = flags & 16384;
      D.6489 = flags & 64;
      D.6487 = glob0 (dir, &patbuf, pglob, D.6488, D.6489);
      return D.6487;
    }
  finally
    {
      patbuf = {CLOBBER};
    }
}


glob0 (struct GDir * dir, const gchar * pattern, struct wapi_glob_t * pglob, gboolean ignorecase, gboolean unique)
{
  int D.6492;
  int D.6493;
  gchar * bufnext.4;
  gchar * D.6498;
  char D.6499;
  gchar * bufnext.5;
  gchar * bufnext.6;
  char D.6502;
  const gchar * qpatnext.7;
  char D.6504;
  gchar * D.6505;
  int D.6508;
  int D.6509;
  const gchar * qpatnext;
  int c;
  int err;
  int oldpathc;
  gchar * bufnext;
  gchar patbuf[4096];
  size_t limit;

  try
    {
      limit = 0;
      qpatnext = pattern;
      oldpathc = pglob->gl_pathc;
      bufnext = &patbuf;
      goto <D.6387>;
      <D.6386>:
      switch (c) <default: <D.6385>, case 42: <D.6384>, case 63: <D.6382>>
      <D.6382>:
      D.6492 = pglob->gl_flags;
      D.6493 = D.6492 | 256;
      pglob->gl_flags = D.6493;
      bufnext.4 = bufnext;
      bufnext = bufnext.4 + 1;
      *bufnext.4 = 63;
      goto <D.6383>;
      <D.6384>:
      D.6492 = pglob->gl_flags;
      D.6493 = D.6492 | 256;
      pglob->gl_flags = D.6493;
      if (&patbuf == bufnext) goto <D.6495>; else goto <D.6497>;
      <D.6497>:
      D.6498 = bufnext + 18446744073709551615;
      D.6499 = *D.6498;
      if (D.6499 != 42) goto <D.6495>; else goto <D.6496>;
      <D.6495>:
      bufnext.5 = bufnext;
      bufnext = bufnext.5 + 1;
      *bufnext.5 = 42;
      <D.6496>:
      goto <D.6383>;
      <D.6385>:
      bufnext.6 = bufnext;
      bufnext = bufnext.6 + 1;
      D.6502 = (char) c;
      *bufnext.6 = D.6502;
      goto <D.6383>;
      <D.6383>:
      <D.6387>:
      qpatnext.7 = qpatnext;
      qpatnext = qpatnext.7 + 1;
      D.6504 = *qpatnext.7;
      c = (int) D.6504;
      if (c != 0) goto <D.6386>; else goto <D.6388>;
      <D.6388>:
      *bufnext = 0;
      D.6505 = &patbuf + 4095;
      err = glob1 (dir, &patbuf, D.6505, pglob, &limit, ignorecase, unique);
      if (err != 0) goto <D.6506>; else goto <D.6507>;
      <D.6506>:
      D.6508 = err;
      return D.6508;
      <D.6507>:
      D.6509 = pglob->gl_pathc;
      if (D.6509 == oldpathc) goto <D.6510>; else goto <D.6511>;
      <D.6510>:
      D.6508 = -3;
      return D.6508;
      <D.6511>:
      D.6508 = 0;
      return D.6508;
    }
  finally
    {
      patbuf = {CLOBBER};
      limit = {CLOBBER};
    }
}


glob1 (struct GDir * dir, gchar * pattern, gchar * pattern_last, struct wapi_glob_t * pglob, size_t * limitp, gboolean ignorecase, gboolean unique)
{
  char D.6514;
  int D.6517;

  D.6514 = *pattern;
  if (D.6514 == 0) goto <D.6515>; else goto <D.6516>;
  <D.6515>:
  D.6517 = 0;
  return D.6517;
  <D.6516>:
  D.6517 = glob3 (dir, pattern, pattern_last, pglob, limitp, ignorecase, unique);
  return D.6517;
}


glob3 (struct GDir * dir, gchar * pattern, gchar * pattern_last, struct wapi_glob_t * pglob, size_t * limitp, gboolean ignorecase, gboolean unique)
{
  long unsigned int D.6519;
  gchar * D.6520;
  int D.6521;
  int D.6527;
  int D.6528;
  const gchar * name;

  goto <D.6417>;
  <D.6418>:
  D.6519 = __strlen_g (pattern);
  D.6520 = pattern + D.6519;
  D.6521 = match (name, pattern, D.6520, ignorecase);
  if (D.6521 == 0) goto <D.6522>; else goto <D.6523>;
  <D.6522>:
  // predicted unlikely by continue predictor.
  goto <D.6417>;
  <D.6523>:
  if (unique == 0) goto <D.6524>; else goto <D.6526>;
  <D.6526>:
  D.6527 = contains (pglob, name);
  if (D.6527 == 0) goto <D.6524>; else goto <D.6525>;
  <D.6524>:
  globextend (name, pglob, limitp);
  <D.6525>:
  <D.6417>:
  name = monoeg_g_dir_read_name (dir);
  if (name != 0B) goto <D.6418>; else goto <D.6419>;
  <D.6419>:
  D.6528 = 0;
  return D.6528;
}


__attribute__((__gnu_inline__))
__strlen_g (const char * __str)
{
  size_t D.6530;
  long int __ptr.8;
  long int __str.9;
  long int D.6533;
  char * __ptr;
  char * __tmp;

  __ptr = 0B;
  __tmp = __str;
  __asm__ __volatile__("   la    0,0
0: srst  %0,%1
   jo    0b
" : "=&a" __ptr, "=&a" __tmp : "0" __ptr, "1" __tmp : "0", "memory", "cc");
  __ptr.8 = (long int) __ptr;
  __str.9 = (long int) __str;
  D.6533 = __ptr.8 - __str.9;
  D.6530 = (size_t) D.6533;
  return D.6530;
}


match (const gchar * name, gchar * pat, gchar * patend, gboolean ignorecase)
{
  gchar * pat.10;
  int D.6536;
  int D.6539;
  int D.6540;
  const gchar * name.11;
  char D.6544;
  const gchar * name.12;
  char D.6546;
  const gchar * name.13;
  char D.6552;
  char D.6553;
  char D.6554;
  const gchar * name.14;
  char D.6559;
  char D.6562;
  _Bool D.6563;
  gchar c;

  goto <D.6451>;
  <D.6450>:
  pat.10 = pat;
  pat = pat.10 + 1;
  c = *pat.10;
  D.6536 = (int) c;
  switch (D.6536) <default: <D.6449>, case 42: <D.6444>, case 63: <D.6447>>
  <D.6444>:
  if (pat == patend) goto <D.6537>; else goto <D.6538>;
  <D.6537>:
  D.6539 = 1;
  return D.6539;
  <D.6538>:
  <D.6445>:
  D.6540 = match (name, pat, patend, ignorecase);
  if (D.6540 != 0) goto <D.6541>; else goto <D.6542>;
  <D.6541>:
  D.6539 = 1;
  return D.6539;
  <D.6542>:
  name.11 = name;
  name = name.11 + 1;
  D.6544 = *name.11;
  if (D.6544 != 0) goto <D.6445>; else goto <D.6446>;
  <D.6446>:
  D.6539 = 0;
  return D.6539;
  <D.6447>:
  name.12 = name;
  name = name.12 + 1;
  D.6546 = *name.12;
  if (D.6546 == 0) goto <D.6547>; else goto <D.6548>;
  <D.6547>:
  D.6539 = 0;
  return D.6539;
  <D.6548>:
  goto <D.6448>;
  <D.6449>:
  if (ignorecase != 0) goto <D.6549>; else goto <D.6550>;
  <D.6549>:
  name.13 = name;
  name = name.13 + 1;
  D.6552 = *name.13;
  D.6553 = monoeg_g_ascii_tolower (D.6552);
  D.6554 = monoeg_g_ascii_tolower (c);
  if (D.6553 != D.6554) goto <D.6555>; else goto <D.6556>;
  <D.6555>:
  D.6539 = 0;
  return D.6539;
  <D.6556>:
  goto <D.6557>;
  <D.6550>:
  name.14 = name;
  name = name.14 + 1;
  D.6559 = *name.14;
  if (D.6559 != c) goto <D.6560>; else goto <D.6561>;
  <D.6560>:
  D.6539 = 0;
  return D.6539;
  <D.6561>:
  <D.6557>:
  goto <D.6448>;
  <D.6448>:
  <D.6451>:
  if (pat < patend) goto <D.6450>; else goto <D.6452>;
  <D.6452>:
  D.6562 = *name;
  D.6563 = D.6562 == 0;
  D.6539 = (int) D.6563;
  return D.6539;
}


contains (struct wapi_glob_t * pglob, const gchar * name)
{
  char * * D.6565;
  int D.6568;
  long unsigned int D.6569;
  long unsigned int D.6570;
  char * D.6571;
  int D.6574;
  gboolean D.6577;
  int i.15;
  int i;
  char * * pp;

  D.6565 = pglob->gl_pathv;
  if (D.6565 != 0B) goto <D.6566>; else goto <D.6567>;
  <D.6566>:
  D.6565 = pglob->gl_pathv;
  D.6568 = pglob->gl_offs;
  D.6569 = (long unsigned int) D.6568;
  D.6570 = D.6569 * 8;
  pp = D.6565 + D.6570;
  i = pglob->gl_pathc;
  goto <D.6405>;
  <D.6404>:
  D.6571 = *pp;
  if (D.6571 != 0B) goto <D.6572>; else goto <D.6573>;
  <D.6572>:
  D.6571 = *pp;
  D.6574 = strcmp (D.6571, name);
  if (D.6574 == 0) goto <D.6575>; else goto <D.6576>;
  <D.6575>:
  D.6577 = 1;
  return D.6577;
  <D.6576>:
  <D.6573>:
  pp = pp + 8;
  <D.6405>:
  i.15 = i;
  i = i.15 + -1;
  if (i.15 != 0) goto <D.6404>; else goto <D.6406>;
  <D.6406>:
  <D.6567>:
  D.6577 = 0;
  return D.6577;
}


__attribute__((__gnu_inline__, nothrow, leaf, pure))
strcmp (const char * __s1, const char * __s2)
{
  int iftmp.16;
  int iftmp.17;
  int D.6588;
  char * __p1;
  char * __p2;
  int __ret;

  __p1 = __s1;
  __p2 = __s2;
  __asm__ __volatile__("   slr   0,0
0: clst  %1,%2
   jo    0b
   ipm   %0
   srl   %0,28" : "=d" __ret, "=&a" __p1, "=&a" __p2 : "1" __p1, "2" __p2 : "0", "memory", "cc");
  if (__ret != 0) goto <D.6581>; else goto <D.6582>;
  <D.6581>:
  if (__ret == 1) goto <D.6584>; else goto <D.6585>;
  <D.6584>:
  iftmp.17 = -1;
  goto <D.6586>;
  <D.6585>:
  iftmp.17 = 1;
  <D.6586>:
  iftmp.16 = iftmp.17;
  goto <D.6587>;
  <D.6582>:
  iftmp.16 = 0;
  <D.6587>:
  __ret = iftmp.16;
  D.6588 = __ret;
  return D.6588;
}


globextend (const gchar * path, struct wapi_glob_t * pglob, size_t * limitp)
{
  int D.6590;
  int D.6591;
  int D.6592;
  int D.6593;
  long unsigned int D.6594;
  unsigned int D.6595;
  void * iftmp.18;
  char * * D.6597;
  long unsigned int D.6600;
  int D.6606;
  long unsigned int D.6611;
  long unsigned int D.6612;
  const gchar * p.19;
  char D.6614;
  long int p.20;
  long int path.21;
  long int D.6617;
  long unsigned int D.6618;
  long unsigned int D.6619;
  long unsigned int D.6620;
  int D.6623;
  int D.6626;
  int D.6627;
  int D.6628;
  long unsigned int D.6629;
  long unsigned int D.6630;
  char * * D.6631;
  int D.6632;
  long unsigned int D.6633;
  long unsigned int D.6634;
  char * * D.6635;
  int iftmp.22;
  char * * pathv;
  int i;
  u_int newsize;
  u_int len;
  char * copy;
  const gchar * p;

  D.6590 = pglob->gl_pathc;
  D.6591 = D.6590 + 2;
  D.6592 = pglob->gl_offs;
  D.6593 = D.6591 + D.6592;
  D.6594 = (long unsigned int) D.6593;
  D.6595 = (unsigned int) D.6594;
  newsize = D.6595 * 8;
  D.6597 = pglob->gl_pathv;
  if (D.6597 != 0B) goto <D.6598>; else goto <D.6599>;
  <D.6598>:
  D.6597 = pglob->gl_pathv;
  D.6600 = (long unsigned int) newsize;
  iftmp.18 = realloc (D.6597, D.6600);
  goto <D.6601>;
  <D.6599>:
  D.6600 = (long unsigned int) newsize;
  iftmp.18 = malloc (D.6600);
  <D.6601>:
  pathv = iftmp.18;
  if (pathv == 0B) goto <D.6602>; else goto <D.6603>;
  <D.6602>:
  D.6597 = pglob->gl_pathv;
  if (D.6597 != 0B) goto <D.6604>; else goto <D.6605>;
  <D.6604>:
  D.6597 = pglob->gl_pathv;
  free (D.6597);
  pglob->gl_pathv = 0B;
  <D.6605>:
  D.6606 = -1;
  return D.6606;
  <D.6603>:
  D.6597 = pglob->gl_pathv;
  if (D.6597 == 0B) goto <D.6607>; else goto <D.6608>;
  <D.6607>:
  D.6592 = pglob->gl_offs;
  if (D.6592 > 0) goto <D.6609>; else goto <D.6610>;
  <D.6609>:
  D.6592 = pglob->gl_offs;
  D.6611 = (long unsigned int) D.6592;
  D.6612 = D.6611 * 8;
  pathv = pathv + D.6612;
  i = pglob->gl_offs;
  goto <D.6432>;
  <D.6431>:
  pathv = pathv + 18446744073709551608;
  *pathv = 0B;
  <D.6432>:
  i = i + -1;
  if (i >= 0) goto <D.6431>; else goto <D.6433>;
  <D.6433>:
  <D.6610>:
  <D.6608>:
  pglob->gl_pathv = pathv;
  p = path;
  goto <D.6435>;
  <D.6434>:
  <D.6435>:
  p.19 = p;
  p = p.19 + 1;
  D.6614 = *p.19;
  if (D.6614 != 0) goto <D.6434>; else goto <D.6436>;
  <D.6436>:
  p.20 = (long int) p;
  path.21 = (long int) path;
  D.6617 = p.20 - path.21;
  len = (u_int) D.6617;
  D.6618 = *limitp;
  D.6619 = (long unsigned int) len;
  D.6620 = D.6618 + D.6619;
  *limitp = D.6620;
  D.6619 = (long unsigned int) len;
  copy = malloc (D.6619);
  if (copy != 0B) goto <D.6621>; else goto <D.6622>;
  <D.6621>:
  D.6623 = g_Ctoc (path, copy, len);
  if (D.6623 != 0) goto <D.6624>; else goto <D.6625>;
  <D.6624>:
  free (copy);
  D.6606 = -1;
  return D.6606;
  <D.6625>:
  D.6592 = pglob->gl_offs;
  D.6590 = pglob->gl_pathc;
  D.6626 = D.6590;
  D.6627 = D.6626 + 1;
  pglob->gl_pathc = D.6627;
  D.6628 = D.6592 + D.6626;
  D.6629 = (long unsigned int) D.6628;
  D.6630 = D.6629 * 8;
  D.6631 = pathv + D.6630;
  *D.6631 = copy;
  <D.6622>:
  D.6592 = pglob->gl_offs;
  D.6590 = pglob->gl_pathc;
  D.6632 = D.6592 + D.6590;
  D.6633 = (long unsigned int) D.6632;
  D.6634 = D.6633 * 8;
  D.6635 = pathv + D.6634;
  *D.6635 = 0B;
  if (copy == 0B) goto <D.6637>; else goto <D.6638>;
  <D.6637>:
  iftmp.22 = -1;
  goto <D.6639>;
  <D.6638>:
  iftmp.22 = 0;
  <D.6639>:
  D.6606 = iftmp.22;
  return D.6606;
}


g_Ctoc (const gchar * str, char * buf, u_int len)
{
  char * buf.23;
  const gchar * str.24;
  char D.6643;
  char D.6644;
  int D.6647;
  unsigned int len.25;

  goto <D.6467>;
  <D.6466>:
  buf.23 = buf;
  buf = buf.23 + 1;
  str.24 = str;
  str = str.24 + 1;
  D.6643 = *str.24;
  *buf.23 = D.6643;
  D.6644 = *buf.23;
  if (D.6644 == 0) goto <D.6645>; else goto <D.6646>;
  <D.6645>:
  D.6647 = 0;
  return D.6647;
  <D.6646>:
  <D.6467>:
  len.25 = len;
  len = len.25 + 4294967295;
  if (len.25 != 0) goto <D.6466>; else goto <D.6468>;
  <D.6468>:
  D.6647 = 1;
  return D.6647;
}


_wapi_globfree (struct wapi_glob_t * pglob)
{
  char * * D.6650;
  int D.6653;
  long unsigned int D.6654;
  long unsigned int D.6655;
  char * D.6656;
  int i.26;
  int i;
  char * * pp;

  D.6650 = pglob->gl_pathv;
  if (D.6650 != 0B) goto <D.6651>; else goto <D.6652>;
  <D.6651>:
  D.6650 = pglob->gl_pathv;
  D.6653 = pglob->gl_offs;
  D.6654 = (long unsigned int) D.6653;
  D.6655 = D.6654 * 8;
  pp = D.6650 + D.6655;
  i = pglob->gl_pathc;
  goto <D.6459>;
  <D.6458>:
  D.6656 = *pp;
  if (D.6656 != 0B) goto <D.6657>; else goto <D.6658>;
  <D.6657>:
  D.6656 = *pp;
  free (D.6656);
  <D.6658>:
  pp = pp + 8;
  <D.6459>:
  i.26 = i;
  i = i.26 + -1;
  if (i.26 != 0) goto <D.6458>; else goto <D.6460>;
  <D.6460>:
  D.6650 = pglob->gl_pathv;
  free (D.6650);
  pglob->gl_pathv = 0B;
  <D.6652>:
}


