_wapi_glob (struct GDir * dir, const char * pattern, int flags, struct wapi_glob_t * pglob)
{
  int D.8573;
  int D.8576;
  const u_char * patnext.0;
  unsigned char D.8580;
  gchar * bufnext.1;
  char D.8584;
  gchar * bufnext.2;
  char D.8587;
  const u_char * patnext.3;
  unsigned char D.8590;
  int D.8591;
  int D.8592;
  int D.8593;
  const u_char * patnext;
  int c;
  gchar * bufnext;
  gchar * bufend;
  gchar patbuf[4096];

  try
    {
      patnext = pattern;
      D.8573 = flags & 1;
      if (D.8573 == 0) goto <D.8574>; else goto <D.8575>;
      <D.8574>:
      pglob->gl_pathc = 0;
      pglob->gl_pathv = 0B;
      pglob->gl_offs = 0;
      <D.8575>:
      D.8576 = flags & -257;
      pglob->gl_flags = D.8576;
      bufnext = &patbuf;
      bufend = bufnext + 4095;
      goto <D.8458>;
      <D.8457>:
      if (c == 92) goto <D.8577>; else goto <D.8578>;
      <D.8577>:
      patnext.0 = patnext;
      patnext = patnext.0 + 1;
      D.8580 = *patnext.0;
      c = (int) D.8580;
      if (c == 0) goto <D.8581>; else goto <D.8582>;
      <D.8581>:
      c = 92;
      patnext = patnext + 4294967295;
      <D.8582>:
      bufnext.1 = bufnext;
      bufnext = bufnext.1 + 1;
      D.8584 = (char) c;
      *bufnext.1 = D.8584;
      goto <D.8585>;
      <D.8578>:
      bufnext.2 = bufnext;
      bufnext = bufnext.2 + 1;
      D.8587 = (char) c;
      *bufnext.2 = D.8587;
      <D.8585>:
      <D.8458>:
      if (bufnext < bufend) goto <D.8588>; else goto <D.8459>;
      <D.8588>:
      patnext.3 = patnext;
      patnext = patnext.3 + 1;
      D.8590 = *patnext.3;
      c = (int) D.8590;
      if (c != 0) goto <D.8457>; else goto <D.8459>;
      <D.8459>:
      *bufnext = 0;
      D.8592 = flags & 16384;
      D.8593 = flags & 64;
      D.8591 = glob0 (dir, &patbuf, pglob, D.8592, D.8593);
      return D.8591;
    }
  finally
    {
      patbuf = {CLOBBER};
    }
}


glob0 (struct GDir * dir, const gchar * pattern, struct wapi_glob_t * pglob, gboolean ignorecase, gboolean unique)
{
  int D.8596;
  int D.8597;
  gchar * bufnext.4;
  gchar * D.8602;
  char D.8603;
  gchar * bufnext.5;
  gchar * bufnext.6;
  char D.8606;
  const gchar * qpatnext.7;
  char D.8608;
  int D.8611;
  int D.8612;
  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.8479>;
      <D.8478>:
      switch (c) <default: <D.8477>, case 42: <D.8476>, case 63: <D.8474>>
      <D.8474>:
      D.8596 = pglob->gl_flags;
      D.8597 = D.8596 | 256;
      pglob->gl_flags = D.8597;
      bufnext.4 = bufnext;
      bufnext = bufnext.4 + 1;
      *bufnext.4 = 63;
      goto <D.8475>;
      <D.8476>:
      D.8596 = pglob->gl_flags;
      D.8597 = D.8596 | 256;
      pglob->gl_flags = D.8597;
      if (&patbuf == bufnext) goto <D.8599>; else goto <D.8601>;
      <D.8601>:
      D.8602 = bufnext + 4294967295;
      D.8603 = *D.8602;
      if (D.8603 != 42) goto <D.8599>; else goto <D.8600>;
      <D.8599>:
      bufnext.5 = bufnext;
      bufnext = bufnext.5 + 1;
      *bufnext.5 = 42;
      <D.8600>:
      goto <D.8475>;
      <D.8477>:
      bufnext.6 = bufnext;
      bufnext = bufnext.6 + 1;
      D.8606 = (char) c;
      *bufnext.6 = D.8606;
      goto <D.8475>;
      <D.8475>:
      <D.8479>:
      qpatnext.7 = qpatnext;
      qpatnext = qpatnext.7 + 1;
      D.8608 = *qpatnext.7;
      c = (int) D.8608;
      if (c != 0) goto <D.8478>; else goto <D.8480>;
      <D.8480>:
      *bufnext = 0;
      err = glob1 (dir, &patbuf, &MEM[(void *)&patbuf + 4095B], pglob, &limit, ignorecase, unique);
      if (err != 0) goto <D.8609>; else goto <D.8610>;
      <D.8609>:
      D.8611 = err;
      return D.8611;
      <D.8610>:
      D.8612 = pglob->gl_pathc;
      if (D.8612 == oldpathc) goto <D.8613>; else goto <D.8614>;
      <D.8613>:
      D.8611 = -3;
      return D.8611;
      <D.8614>:
      D.8611 = 0;
      return D.8611;
    }
  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.8617;
  int D.8620;

  D.8617 = *pattern;
  if (D.8617 == 0) goto <D.8618>; else goto <D.8619>;
  <D.8618>:
  D.8620 = 0;
  return D.8620;
  <D.8619>:
  D.8620 = glob3 (dir, pattern, pattern_last, pglob, limitp, ignorecase, unique);
  return D.8620;
}


glob3 (struct GDir * dir, gchar * pattern, gchar * pattern_last, struct wapi_glob_t * pglob, size_t * limitp, gboolean ignorecase, gboolean unique)
{
  unsigned int D.8622;
  gchar * D.8623;
  int D.8624;
  int D.8630;
  int D.8631;
  const gchar * name;

  goto <D.8518>;
  <D.8519>:
  D.8622 = strlen (pattern);
  D.8623 = pattern + D.8622;
  D.8624 = match (name, pattern, D.8623, ignorecase);
  if (D.8624 == 0) goto <D.8625>; else goto <D.8626>;
  <D.8625>:
  // predicted unlikely by continue predictor.
  goto <D.8518>;
  <D.8626>:
  if (unique == 0) goto <D.8627>; else goto <D.8629>;
  <D.8629>:
  D.8630 = contains (pglob, name);
  if (D.8630 == 0) goto <D.8627>; else goto <D.8628>;
  <D.8627>:
  globextend (name, pglob, limitp);
  <D.8628>:
  <D.8518>:
  name = monoeg_g_dir_read_name (dir);
  if (name != 0B) goto <D.8519>; else goto <D.8520>;
  <D.8520>:
  D.8631 = 0;
  return D.8631;
}


match (const gchar * name, gchar * pat, gchar * patend, gboolean ignorecase)
{
  gchar * pat.8;
  int D.8634;
  int D.8637;
  int D.8638;
  const gchar * name.9;
  char D.8642;
  const gchar * name.10;
  char D.8644;
  const gchar * name.11;
  char D.8650;
  char D.8651;
  char D.8652;
  const gchar * name.12;
  char D.8657;
  char D.8660;
  _Bool D.8661;
  gchar c;

  goto <D.8552>;
  <D.8551>:
  pat.8 = pat;
  pat = pat.8 + 1;
  c = *pat.8;
  D.8634 = (int) c;
  switch (D.8634) <default: <D.8550>, case 42: <D.8545>, case 63: <D.8548>>
  <D.8545>:
  if (pat == patend) goto <D.8635>; else goto <D.8636>;
  <D.8635>:
  D.8637 = 1;
  return D.8637;
  <D.8636>:
  <D.8546>:
  D.8638 = match (name, pat, patend, ignorecase);
  if (D.8638 != 0) goto <D.8639>; else goto <D.8640>;
  <D.8639>:
  D.8637 = 1;
  return D.8637;
  <D.8640>:
  name.9 = name;
  name = name.9 + 1;
  D.8642 = *name.9;
  if (D.8642 != 0) goto <D.8546>; else goto <D.8547>;
  <D.8547>:
  D.8637 = 0;
  return D.8637;
  <D.8548>:
  name.10 = name;
  name = name.10 + 1;
  D.8644 = *name.10;
  if (D.8644 == 0) goto <D.8645>; else goto <D.8646>;
  <D.8645>:
  D.8637 = 0;
  return D.8637;
  <D.8646>:
  goto <D.8549>;
  <D.8550>:
  if (ignorecase != 0) goto <D.8647>; else goto <D.8648>;
  <D.8647>:
  name.11 = name;
  name = name.11 + 1;
  D.8650 = *name.11;
  D.8651 = monoeg_g_ascii_tolower (D.8650);
  D.8652 = monoeg_g_ascii_tolower (c);
  if (D.8651 != D.8652) goto <D.8653>; else goto <D.8654>;
  <D.8653>:
  D.8637 = 0;
  return D.8637;
  <D.8654>:
  goto <D.8655>;
  <D.8648>:
  name.12 = name;
  name = name.12 + 1;
  D.8657 = *name.12;
  if (D.8657 != c) goto <D.8658>; else goto <D.8659>;
  <D.8658>:
  D.8637 = 0;
  return D.8637;
  <D.8659>:
  <D.8655>:
  goto <D.8549>;
  <D.8549>:
  <D.8552>:
  if (pat < patend) goto <D.8551>; else goto <D.8553>;
  <D.8553>:
  D.8660 = *name;
  D.8661 = D.8660 == 0;
  D.8637 = (int) D.8661;
  return D.8637;
}


contains (struct wapi_glob_t * pglob, const gchar * name)
{
  char * * D.8663;
  int D.8666;
  unsigned int D.8667;
  unsigned int D.8668;
  char * D.8669;
  int D.8504;
  gboolean D.8674;
  int i.13;
  int i;
  char * * pp;

  D.8663 = pglob->gl_pathv;
  if (D.8663 != 0B) goto <D.8664>; else goto <D.8665>;
  <D.8664>:
  D.8663 = pglob->gl_pathv;
  D.8666 = pglob->gl_offs;
  D.8667 = (unsigned int) D.8666;
  D.8668 = D.8667 * 4;
  pp = D.8663 + D.8668;
  i = pglob->gl_pathc;
  goto <D.8506>;
  <D.8505>:
  D.8669 = *pp;
  if (D.8669 != 0B) goto <D.8670>; else goto <D.8671>;
  <D.8670>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.8669 = *pp;
    D.8504 = __builtin_strcmp (D.8669, name);
  }
  if (D.8504 == 0) goto <D.8672>; else goto <D.8673>;
  <D.8672>:
  D.8674 = 1;
  return D.8674;
  <D.8673>:
  <D.8671>:
  pp = pp + 4;
  <D.8506>:
  i.13 = i;
  i = i.13 + -1;
  if (i.13 != 0) goto <D.8505>; else goto <D.8507>;
  <D.8507>:
  <D.8665>:
  D.8674 = 0;
  return D.8674;
}


globextend (const gchar * path, struct wapi_glob_t * pglob, size_t * limitp)
{
  int D.8677;
  int D.8678;
  int D.8679;
  int D.8680;
  unsigned int D.8681;
  void * iftmp.14;
  char * * D.8683;
  int D.8691;
  unsigned int D.8696;
  unsigned int D.8697;
  const gchar * p.15;
  char D.8699;
  int p.16;
  int path.17;
  int D.8702;
  unsigned int D.8703;
  unsigned int D.8704;
  int D.8707;
  int D.8710;
  int D.8711;
  int D.8712;
  unsigned int D.8713;
  unsigned int D.8714;
  char * * D.8715;
  int D.8716;
  unsigned int D.8717;
  unsigned int D.8718;
  char * * D.8719;
  int iftmp.18;
  char * * pathv;
  int i;
  u_int newsize;
  u_int len;
  char * copy;
  const gchar * p;

  D.8677 = pglob->gl_pathc;
  D.8678 = D.8677 + 2;
  D.8679 = pglob->gl_offs;
  D.8680 = D.8678 + D.8679;
  D.8681 = (unsigned int) D.8680;
  newsize = D.8681 * 4;
  D.8683 = pglob->gl_pathv;
  if (D.8683 != 0B) goto <D.8684>; else goto <D.8685>;
  <D.8684>:
  D.8683 = pglob->gl_pathv;
  iftmp.14 = realloc (D.8683, newsize);
  goto <D.8686>;
  <D.8685>:
  iftmp.14 = malloc (newsize);
  <D.8686>:
  pathv = iftmp.14;
  if (pathv == 0B) goto <D.8687>; else goto <D.8688>;
  <D.8687>:
  D.8683 = pglob->gl_pathv;
  if (D.8683 != 0B) goto <D.8689>; else goto <D.8690>;
  <D.8689>:
  D.8683 = pglob->gl_pathv;
  free (D.8683);
  pglob->gl_pathv = 0B;
  <D.8690>:
  D.8691 = -1;
  return D.8691;
  <D.8688>:
  D.8683 = pglob->gl_pathv;
  if (D.8683 == 0B) goto <D.8692>; else goto <D.8693>;
  <D.8692>:
  D.8679 = pglob->gl_offs;
  if (D.8679 > 0) goto <D.8694>; else goto <D.8695>;
  <D.8694>:
  D.8679 = pglob->gl_offs;
  D.8696 = (unsigned int) D.8679;
  D.8697 = D.8696 * 4;
  pathv = pathv + D.8697;
  i = pglob->gl_offs;
  goto <D.8533>;
  <D.8532>:
  pathv = pathv + 4294967292;
  *pathv = 0B;
  <D.8533>:
  i = i + -1;
  if (i >= 0) goto <D.8532>; else goto <D.8534>;
  <D.8534>:
  <D.8695>:
  <D.8693>:
  pglob->gl_pathv = pathv;
  p = path;
  goto <D.8536>;
  <D.8535>:
  <D.8536>:
  p.15 = p;
  p = p.15 + 1;
  D.8699 = *p.15;
  if (D.8699 != 0) goto <D.8535>; else goto <D.8537>;
  <D.8537>:
  p.16 = (int) p;
  path.17 = (int) path;
  D.8702 = p.16 - path.17;
  len = (u_int) D.8702;
  D.8703 = *limitp;
  D.8704 = D.8703 + len;
  *limitp = D.8704;
  copy = malloc (len);
  if (copy != 0B) goto <D.8705>; else goto <D.8706>;
  <D.8705>:
  D.8707 = g_Ctoc (path, copy, len);
  if (D.8707 != 0) goto <D.8708>; else goto <D.8709>;
  <D.8708>:
  free (copy);
  D.8691 = -1;
  return D.8691;
  <D.8709>:
  D.8679 = pglob->gl_offs;
  D.8677 = pglob->gl_pathc;
  D.8710 = D.8677;
  D.8711 = D.8710 + 1;
  pglob->gl_pathc = D.8711;
  D.8712 = D.8679 + D.8710;
  D.8713 = (unsigned int) D.8712;
  D.8714 = D.8713 * 4;
  D.8715 = pathv + D.8714;
  *D.8715 = copy;
  <D.8706>:
  D.8679 = pglob->gl_offs;
  D.8677 = pglob->gl_pathc;
  D.8716 = D.8679 + D.8677;
  D.8717 = (unsigned int) D.8716;
  D.8718 = D.8717 * 4;
  D.8719 = pathv + D.8718;
  *D.8719 = 0B;
  if (copy == 0B) goto <D.8721>; else goto <D.8722>;
  <D.8721>:
  iftmp.18 = -1;
  goto <D.8723>;
  <D.8722>:
  iftmp.18 = 0;
  <D.8723>:
  D.8691 = iftmp.18;
  return D.8691;
}


g_Ctoc (const gchar * str, char * buf, u_int len)
{
  char * buf.19;
  const gchar * str.20;
  char D.8727;
  char D.8728;
  int D.8731;
  unsigned int len.21;

  goto <D.8568>;
  <D.8567>:
  buf.19 = buf;
  buf = buf.19 + 1;
  str.20 = str;
  str = str.20 + 1;
  D.8727 = *str.20;
  *buf.19 = D.8727;
  D.8728 = *buf.19;
  if (D.8728 == 0) goto <D.8729>; else goto <D.8730>;
  <D.8729>:
  D.8731 = 0;
  return D.8731;
  <D.8730>:
  <D.8568>:
  len.21 = len;
  len = len.21 + 4294967295;
  if (len.21 != 0) goto <D.8567>; else goto <D.8569>;
  <D.8569>:
  D.8731 = 1;
  return D.8731;
}


_wapi_globfree (struct wapi_glob_t * pglob)
{
  char * * D.8734;
  int D.8737;
  unsigned int D.8738;
  unsigned int D.8739;
  char * D.8740;
  int i.22;
  int i;
  char * * pp;

  D.8734 = pglob->gl_pathv;
  if (D.8734 != 0B) goto <D.8735>; else goto <D.8736>;
  <D.8735>:
  D.8734 = pglob->gl_pathv;
  D.8737 = pglob->gl_offs;
  D.8738 = (unsigned int) D.8737;
  D.8739 = D.8738 * 4;
  pp = D.8734 + D.8739;
  i = pglob->gl_pathc;
  goto <D.8560>;
  <D.8559>:
  D.8740 = *pp;
  if (D.8740 != 0B) goto <D.8741>; else goto <D.8742>;
  <D.8741>:
  D.8740 = *pp;
  free (D.8740);
  <D.8742>:
  pp = pp + 4;
  <D.8560>:
  i.22 = i;
  i = i.22 + -1;
  if (i.22 != 0) goto <D.8559>; else goto <D.8561>;
  <D.8561>:
  D.8734 = pglob->gl_pathv;
  free (D.8734);
  pglob->gl_pathv = 0B;
  <D.8736>:
}


