_wapi_glob (struct GDir * dir, const char * pattern, int flags, struct wapi_glob_t * pglob)
{
  int D.5983;
  int D.5986;
  const u_char * patnext.0;
  unsigned char D.5990;
  gchar * bufnext.1;
  char D.5994;
  gchar * bufnext.2;
  const u_char * patnext.3;
  unsigned char D.5999;
  int D.6000;
  int D.6001;
  int D.6002;
  const u_char * patnext;
  int c;
  gchar * bufnext;
  gchar * bufend;
  gchar patbuf[4096];

  try
    {
      patnext = pattern;
      D.5983 = flags & 1;
      if (D.5983 == 0) goto <D.5984>; else goto <D.5985>;
      <D.5984>:
      pglob->gl_pathc = 0;
      pglob->gl_pathv = 0B;
      pglob->gl_offs = 0;
      <D.5985>:
      D.5986 = flags & -257;
      pglob->gl_flags = D.5986;
      bufnext = &patbuf;
      bufend = bufnext + 4095;
      goto <D.5870>;
      <D.5869>:
      if (c == 92) goto <D.5987>; else goto <D.5988>;
      <D.5987>:
      patnext.0 = patnext;
      patnext = patnext.0 + 1;
      D.5990 = *patnext.0;
      c = (int) D.5990;
      if (c == 0) goto <D.5991>; else goto <D.5992>;
      <D.5991>:
      c = 92;
      patnext = patnext + 4294967295;
      <D.5992>:
      bufnext.1 = bufnext;
      bufnext = bufnext.1 + 1;
      D.5994 = (char) c;
      *bufnext.1 = D.5994;
      goto <D.5995>;
      <D.5988>:
      bufnext.2 = bufnext;
      bufnext = bufnext.2 + 1;
      D.5994 = (char) c;
      *bufnext.2 = D.5994;
      <D.5995>:
      <D.5870>:
      if (bufnext < bufend) goto <D.5997>; else goto <D.5871>;
      <D.5997>:
      patnext.3 = patnext;
      patnext = patnext.3 + 1;
      D.5999 = *patnext.3;
      c = (int) D.5999;
      if (c != 0) goto <D.5869>; else goto <D.5871>;
      <D.5871>:
      *bufnext = 0;
      D.6001 = flags & 16384;
      D.6002 = flags & 64;
      D.6000 = glob0 (dir, &patbuf, pglob, D.6001, D.6002);
      return D.6000;
    }
  finally
    {
      patbuf = {CLOBBER};
    }
}


glob0 (struct GDir * dir, const gchar * pattern, struct wapi_glob_t * pglob, gboolean ignorecase, gboolean unique)
{
  int D.6005;
  int D.6006;
  gchar * bufnext.4;
  gchar * D.6011;
  char D.6012;
  gchar * bufnext.5;
  gchar * bufnext.6;
  char D.6015;
  const gchar * qpatnext.7;
  char D.6017;
  int D.6020;
  int D.6021;
  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.5891>;
      <D.5890>:
      switch (c) <default: <D.5889>, case 42: <D.5888>, case 63: <D.5886>>
      <D.5886>:
      D.6005 = pglob->gl_flags;
      D.6006 = D.6005 | 256;
      pglob->gl_flags = D.6006;
      bufnext.4 = bufnext;
      bufnext = bufnext.4 + 1;
      *bufnext.4 = 63;
      goto <D.5887>;
      <D.5888>:
      D.6005 = pglob->gl_flags;
      D.6006 = D.6005 | 256;
      pglob->gl_flags = D.6006;
      if (&patbuf == bufnext) goto <D.6008>; else goto <D.6010>;
      <D.6010>:
      D.6011 = bufnext + 4294967295;
      D.6012 = *D.6011;
      if (D.6012 != 42) goto <D.6008>; else goto <D.6009>;
      <D.6008>:
      bufnext.5 = bufnext;
      bufnext = bufnext.5 + 1;
      *bufnext.5 = 42;
      <D.6009>:
      goto <D.5887>;
      <D.5889>:
      bufnext.6 = bufnext;
      bufnext = bufnext.6 + 1;
      D.6015 = (char) c;
      *bufnext.6 = D.6015;
      goto <D.5887>;
      <D.5887>:
      <D.5891>:
      qpatnext.7 = qpatnext;
      qpatnext = qpatnext.7 + 1;
      D.6017 = *qpatnext.7;
      c = (int) D.6017;
      if (c != 0) goto <D.5890>; else goto <D.5892>;
      <D.5892>:
      *bufnext = 0;
      err = glob1 (dir, &patbuf, &MEM[(void *)&patbuf + 4095B], pglob, &limit, ignorecase, unique);
      if (err != 0) goto <D.6018>; else goto <D.6019>;
      <D.6018>:
      D.6020 = err;
      return D.6020;
      <D.6019>:
      D.6021 = pglob->gl_pathc;
      if (D.6021 == oldpathc) goto <D.6022>; else goto <D.6023>;
      <D.6022>:
      D.6020 = -3;
      return D.6020;
      <D.6023>:
      D.6020 = 0;
      return D.6020;
    }
  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.6026;
  int D.6029;

  D.6026 = *pattern;
  if (D.6026 == 0) goto <D.6027>; else goto <D.6028>;
  <D.6027>:
  D.6029 = 0;
  return D.6029;
  <D.6028>:
  D.6029 = glob3 (dir, pattern, pattern_last, pglob, limitp, ignorecase, unique);
  return D.6029;
}


glob3 (struct GDir * dir, gchar * pattern, gchar * pattern_last, struct wapi_glob_t * pglob, size_t * limitp, gboolean ignorecase, gboolean unique)
{
  unsigned int D.6031;
  gchar * D.6032;
  int D.6033;
  int D.6039;
  int D.6040;
  const gchar * name;

  goto <D.5930>;
  <D.5931>:
  D.6031 = strlen (pattern);
  D.6032 = pattern + D.6031;
  D.6033 = match (name, pattern, D.6032, ignorecase);
  if (D.6033 == 0) goto <D.6034>; else goto <D.6035>;
  <D.6034>:
  // predicted unlikely by continue predictor.
  goto <D.5930>;
  <D.6035>:
  if (unique == 0) goto <D.6036>; else goto <D.6038>;
  <D.6038>:
  D.6039 = contains (pglob, name);
  if (D.6039 == 0) goto <D.6036>; else goto <D.6037>;
  <D.6036>:
  globextend (name, pglob, limitp);
  <D.6037>:
  <D.5930>:
  name = monoeg_g_dir_read_name (dir);
  if (name != 0B) goto <D.5931>; else goto <D.5932>;
  <D.5932>:
  D.6040 = 0;
  return D.6040;
}


match (const gchar * name, gchar * pat, gchar * patend, gboolean ignorecase)
{
  gchar * pat.8;
  int D.6043;
  int D.6044;
  int D.6047;
  int D.6048;
  const gchar * name.9;
  char D.6052;
  const gchar * name.10;
  char D.6054;
  const gchar * name.11;
  char D.6060;
  int D.6061;
  char D.6062;
  char D.6063;
  const gchar * name.12;
  char D.6068;
  char D.6071;
  _Bool D.6072;
  gchar c;

  goto <D.5964>;
  <D.5963>:
  pat.8 = pat;
  pat = pat.8 + 1;
  c = *pat.8;
  D.6043 = (int) c;
  D.6044 = D.6043 & 65535;
  switch (D.6044) <default: <D.5962>, case 42: <D.5957>, case 63: <D.5960>>
  <D.5957>:
  if (pat == patend) goto <D.6045>; else goto <D.6046>;
  <D.6045>:
  D.6047 = 1;
  return D.6047;
  <D.6046>:
  <D.5958>:
  D.6048 = match (name, pat, patend, ignorecase);
  if (D.6048 != 0) goto <D.6049>; else goto <D.6050>;
  <D.6049>:
  D.6047 = 1;
  return D.6047;
  <D.6050>:
  name.9 = name;
  name = name.9 + 1;
  D.6052 = *name.9;
  if (D.6052 != 0) goto <D.5958>; else goto <D.5959>;
  <D.5959>:
  D.6047 = 0;
  return D.6047;
  <D.5960>:
  name.10 = name;
  name = name.10 + 1;
  D.6054 = *name.10;
  if (D.6054 == 0) goto <D.6055>; else goto <D.6056>;
  <D.6055>:
  D.6047 = 0;
  return D.6047;
  <D.6056>:
  goto <D.5961>;
  <D.5962>:
  if (ignorecase != 0) goto <D.6057>; else goto <D.6058>;
  <D.6057>:
  name.11 = name;
  name = name.11 + 1;
  D.6060 = *name.11;
  D.6061 = (int) D.6060;
  D.6062 = monoeg_g_ascii_tolower (D.6061);
  D.6043 = (int) c;
  D.6063 = monoeg_g_ascii_tolower (D.6043);
  if (D.6062 != D.6063) goto <D.6064>; else goto <D.6065>;
  <D.6064>:
  D.6047 = 0;
  return D.6047;
  <D.6065>:
  goto <D.6066>;
  <D.6058>:
  name.12 = name;
  name = name.12 + 1;
  D.6068 = *name.12;
  if (D.6068 != c) goto <D.6069>; else goto <D.6070>;
  <D.6069>:
  D.6047 = 0;
  return D.6047;
  <D.6070>:
  <D.6066>:
  goto <D.5961>;
  <D.5961>:
  <D.5964>:
  if (pat < patend) goto <D.5963>; else goto <D.5965>;
  <D.5965>:
  D.6071 = *name;
  D.6072 = D.6071 == 0;
  D.6047 = (int) D.6072;
  return D.6047;
}


contains (struct wapi_glob_t * pglob, const gchar * name)
{
  char * * D.6074;
  int D.6077;
  unsigned int D.6078;
  unsigned int D.6079;
  char * D.6080;
  int D.5916;
  gboolean D.6085;
  int i.13;
  int i;
  char * * pp;

  D.6074 = pglob->gl_pathv;
  if (D.6074 != 0B) goto <D.6075>; else goto <D.6076>;
  <D.6075>:
  D.6074 = pglob->gl_pathv;
  D.6077 = pglob->gl_offs;
  D.6078 = (unsigned int) D.6077;
  D.6079 = D.6078 * 4;
  pp = D.6074 + D.6079;
  i = pglob->gl_pathc;
  goto <D.5918>;
  <D.5917>:
  D.6080 = *pp;
  if (D.6080 != 0B) goto <D.6081>; else goto <D.6082>;
  <D.6081>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.6080 = *pp;
    D.5916 = __builtin_strcmp (D.6080, name);
  }
  if (D.5916 == 0) goto <D.6083>; else goto <D.6084>;
  <D.6083>:
  D.6085 = 1;
  return D.6085;
  <D.6084>:
  <D.6082>:
  pp = pp + 4;
  <D.5918>:
  i.13 = i;
  i = i.13 + -1;
  if (i.13 != 0) goto <D.5917>; else goto <D.5919>;
  <D.5919>:
  <D.6076>:
  D.6085 = 0;
  return D.6085;
}


globextend (const gchar * path, struct wapi_glob_t * pglob, size_t * limitp)
{
  int D.6088;
  int D.6089;
  int D.6090;
  int D.6091;
  unsigned int D.6092;
  void * iftmp.14;
  char * * D.6094;
  int D.6102;
  unsigned int D.6107;
  unsigned int D.6108;
  const gchar * p.15;
  char D.6110;
  int p.16;
  int path.17;
  int D.6113;
  unsigned int D.6114;
  unsigned int D.6115;
  int D.6118;
  int D.6121;
  int D.6122;
  int D.6123;
  unsigned int D.6124;
  unsigned int D.6125;
  char * * D.6126;
  int D.6127;
  unsigned int D.6128;
  unsigned int D.6129;
  char * * D.6130;
  int iftmp.18;
  char * * pathv;
  int i;
  u_int newsize;
  u_int len;
  char * copy;
  const gchar * p;

  D.6088 = pglob->gl_pathc;
  D.6089 = D.6088 + 2;
  D.6090 = pglob->gl_offs;
  D.6091 = D.6089 + D.6090;
  D.6092 = (unsigned int) D.6091;
  newsize = D.6092 * 4;
  D.6094 = pglob->gl_pathv;
  if (D.6094 != 0B) goto <D.6095>; else goto <D.6096>;
  <D.6095>:
  D.6094 = pglob->gl_pathv;
  iftmp.14 = realloc (D.6094, newsize);
  goto <D.6097>;
  <D.6096>:
  iftmp.14 = malloc (newsize);
  <D.6097>:
  pathv = iftmp.14;
  if (pathv == 0B) goto <D.6098>; else goto <D.6099>;
  <D.6098>:
  D.6094 = pglob->gl_pathv;
  if (D.6094 != 0B) goto <D.6100>; else goto <D.6101>;
  <D.6100>:
  D.6094 = pglob->gl_pathv;
  free (D.6094);
  pglob->gl_pathv = 0B;
  <D.6101>:
  D.6102 = -1;
  return D.6102;
  <D.6099>:
  D.6094 = pglob->gl_pathv;
  if (D.6094 == 0B) goto <D.6103>; else goto <D.6104>;
  <D.6103>:
  D.6090 = pglob->gl_offs;
  if (D.6090 > 0) goto <D.6105>; else goto <D.6106>;
  <D.6105>:
  D.6090 = pglob->gl_offs;
  D.6107 = (unsigned int) D.6090;
  D.6108 = D.6107 * 4;
  pathv = pathv + D.6108;
  i = pglob->gl_offs;
  goto <D.5945>;
  <D.5944>:
  pathv = pathv + 4294967292;
  *pathv = 0B;
  <D.5945>:
  i = i + -1;
  if (i >= 0) goto <D.5944>; else goto <D.5946>;
  <D.5946>:
  <D.6106>:
  <D.6104>:
  pglob->gl_pathv = pathv;
  p = path;
  goto <D.5948>;
  <D.5947>:
  <D.5948>:
  p.15 = p;
  p = p.15 + 1;
  D.6110 = *p.15;
  if (D.6110 != 0) goto <D.5947>; else goto <D.5949>;
  <D.5949>:
  p.16 = (int) p;
  path.17 = (int) path;
  D.6113 = p.16 - path.17;
  len = (u_int) D.6113;
  D.6114 = *limitp;
  D.6115 = D.6114 + len;
  *limitp = D.6115;
  copy = malloc (len);
  if (copy != 0B) goto <D.6116>; else goto <D.6117>;
  <D.6116>:
  D.6118 = g_Ctoc (path, copy, len);
  if (D.6118 != 0) goto <D.6119>; else goto <D.6120>;
  <D.6119>:
  free (copy);
  D.6102 = -1;
  return D.6102;
  <D.6120>:
  D.6090 = pglob->gl_offs;
  D.6088 = pglob->gl_pathc;
  D.6121 = D.6088;
  D.6122 = D.6121 + 1;
  pglob->gl_pathc = D.6122;
  D.6123 = D.6090 + D.6121;
  D.6124 = (unsigned int) D.6123;
  D.6125 = D.6124 * 4;
  D.6126 = pathv + D.6125;
  *D.6126 = copy;
  <D.6117>:
  D.6090 = pglob->gl_offs;
  D.6088 = pglob->gl_pathc;
  D.6127 = D.6090 + D.6088;
  D.6128 = (unsigned int) D.6127;
  D.6129 = D.6128 * 4;
  D.6130 = pathv + D.6129;
  *D.6130 = 0B;
  if (copy == 0B) goto <D.6132>; else goto <D.6133>;
  <D.6132>:
  iftmp.18 = -1;
  goto <D.6134>;
  <D.6133>:
  iftmp.18 = 0;
  <D.6134>:
  D.6102 = iftmp.18;
  return D.6102;
}


g_Ctoc (const gchar * str, char * buf, u_int len)
{
  char * buf.19;
  const gchar * str.20;
  char D.6138;
  char D.6139;
  int D.6142;
  unsigned int len.21;

  goto <D.5980>;
  <D.5979>:
  buf.19 = buf;
  buf = buf.19 + 1;
  str.20 = str;
  str = str.20 + 1;
  D.6138 = *str.20;
  *buf.19 = D.6138;
  D.6139 = *buf.19;
  if (D.6139 == 0) goto <D.6140>; else goto <D.6141>;
  <D.6140>:
  D.6142 = 0;
  return D.6142;
  <D.6141>:
  <D.5980>:
  len.21 = len;
  len = len.21 + 4294967295;
  if (len.21 != 0) goto <D.5979>; else goto <D.5981>;
  <D.5981>:
  D.6142 = 1;
  return D.6142;
}


_wapi_globfree (struct wapi_glob_t * pglob)
{
  char * * D.6145;
  int D.6148;
  unsigned int D.6149;
  unsigned int D.6150;
  char * D.6151;
  int i.22;
  int i;
  char * * pp;

  D.6145 = pglob->gl_pathv;
  if (D.6145 != 0B) goto <D.6146>; else goto <D.6147>;
  <D.6146>:
  D.6145 = pglob->gl_pathv;
  D.6148 = pglob->gl_offs;
  D.6149 = (unsigned int) D.6148;
  D.6150 = D.6149 * 4;
  pp = D.6145 + D.6150;
  i = pglob->gl_pathc;
  goto <D.5972>;
  <D.5971>:
  D.6151 = *pp;
  if (D.6151 != 0B) goto <D.6152>; else goto <D.6153>;
  <D.6152>:
  D.6151 = *pp;
  free (D.6151);
  <D.6153>:
  pp = pp + 4;
  <D.5972>:
  i.22 = i;
  i = i.22 + -1;
  if (i.22 != 0) goto <D.5971>; else goto <D.5973>;
  <D.5973>:
  D.6145 = pglob->gl_pathv;
  free (D.6145);
  pglob->gl_pathv = 0B;
  <D.6147>:
}


