_wapi_glob (struct GDir * dir, const char * pattern, int flags, struct wapi_glob_t * pglob)
{
  int D.5961;
  int D.5964;
  const u_char * patnext.0;
  unsigned char D.5968;
  gchar * bufnext.1;
  char D.5972;
  gchar * bufnext.2;
  const u_char * patnext.3;
  unsigned char D.5977;
  int D.5978;
  int D.5979;
  int D.5980;
  const u_char * patnext;
  int c;
  gchar * bufnext;
  gchar * bufend;
  gchar patbuf[4096];

  try
    {
      patnext = pattern;
      D.5961 = flags & 1;
      if (D.5961 == 0) goto <D.5962>; else goto <D.5963>;
      <D.5962>:
      pglob->gl_pathc = 0;
      pglob->gl_pathv = 0B;
      pglob->gl_offs = 0;
      <D.5963>:
      D.5964 = flags & -257;
      pglob->gl_flags = D.5964;
      bufnext = &patbuf;
      bufend = bufnext + 4095;
      goto <D.5848>;
      <D.5847>:
      if (c == 92) goto <D.5965>; else goto <D.5966>;
      <D.5965>:
      patnext.0 = patnext;
      patnext = patnext.0 + 1;
      D.5968 = *patnext.0;
      c = (int) D.5968;
      if (c == 0) goto <D.5969>; else goto <D.5970>;
      <D.5969>:
      c = 92;
      patnext = patnext + 4294967295;
      <D.5970>:
      bufnext.1 = bufnext;
      bufnext = bufnext.1 + 1;
      D.5972 = (char) c;
      *bufnext.1 = D.5972;
      goto <D.5973>;
      <D.5966>:
      bufnext.2 = bufnext;
      bufnext = bufnext.2 + 1;
      D.5972 = (char) c;
      *bufnext.2 = D.5972;
      <D.5973>:
      <D.5848>:
      if (bufnext < bufend) goto <D.5975>; else goto <D.5849>;
      <D.5975>:
      patnext.3 = patnext;
      patnext = patnext.3 + 1;
      D.5977 = *patnext.3;
      c = (int) D.5977;
      if (c != 0) goto <D.5847>; else goto <D.5849>;
      <D.5849>:
      *bufnext = 0;
      D.5979 = flags & 64;
      D.5980 = flags & 16384;
      D.5978 = glob0 (dir, &patbuf, pglob, D.5980, D.5979);
      return D.5978;
    }
  finally
    {
      patbuf = {CLOBBER};
    }
}


glob0 (struct GDir * dir, const gchar * pattern, struct wapi_glob_t * pglob, gboolean ignorecase, gboolean unique)
{
  int D.5983;
  int D.5984;
  gchar * bufnext.4;
  gchar * D.5989;
  char D.5990;
  gchar * bufnext.5;
  gchar * bufnext.6;
  char D.5993;
  const gchar * qpatnext.7;
  char D.5995;
  int D.5998;
  int D.5999;
  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.5869>;
      <D.5868>:
      switch (c) <default: <D.5867>, case 42: <D.5866>, case 63: <D.5864>>
      <D.5864>:
      D.5983 = pglob->gl_flags;
      D.5984 = D.5983 | 256;
      pglob->gl_flags = D.5984;
      bufnext.4 = bufnext;
      bufnext = bufnext.4 + 1;
      *bufnext.4 = 63;
      goto <D.5865>;
      <D.5866>:
      D.5983 = pglob->gl_flags;
      D.5984 = D.5983 | 256;
      pglob->gl_flags = D.5984;
      if (&patbuf == bufnext) goto <D.5986>; else goto <D.5988>;
      <D.5988>:
      D.5989 = bufnext + 4294967295;
      D.5990 = *D.5989;
      if (D.5990 != 42) goto <D.5986>; else goto <D.5987>;
      <D.5986>:
      bufnext.5 = bufnext;
      bufnext = bufnext.5 + 1;
      *bufnext.5 = 42;
      <D.5987>:
      goto <D.5865>;
      <D.5867>:
      bufnext.6 = bufnext;
      bufnext = bufnext.6 + 1;
      D.5993 = (char) c;
      *bufnext.6 = D.5993;
      goto <D.5865>;
      <D.5865>:
      <D.5869>:
      qpatnext.7 = qpatnext;
      qpatnext = qpatnext.7 + 1;
      D.5995 = *qpatnext.7;
      c = (int) D.5995;
      if (c != 0) goto <D.5868>; else goto <D.5870>;
      <D.5870>:
      *bufnext = 0;
      err = glob1 (dir, &patbuf, &MEM[(void *)&patbuf + 4095B], pglob, &limit, ignorecase, unique);
      if (err != 0) goto <D.5996>; else goto <D.5997>;
      <D.5996>:
      D.5998 = err;
      return D.5998;
      <D.5997>:
      D.5999 = pglob->gl_pathc;
      if (D.5999 == oldpathc) goto <D.6000>; else goto <D.6001>;
      <D.6000>:
      D.5998 = -3;
      return D.5998;
      <D.6001>:
      D.5998 = 0;
      return D.5998;
    }
  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.6004;
  int D.6007;

  D.6004 = *pattern;
  if (D.6004 == 0) goto <D.6005>; else goto <D.6006>;
  <D.6005>:
  D.6007 = 0;
  return D.6007;
  <D.6006>:
  D.6007 = glob3 (dir, pattern, pattern_last, pglob, limitp, ignorecase, unique);
  return D.6007;
}


glob3 (struct GDir * dir, gchar * pattern, gchar * pattern_last, struct wapi_glob_t * pglob, size_t * limitp, gboolean ignorecase, gboolean unique)
{
  unsigned int D.6009;
  gchar * D.6010;
  int D.6011;
  int D.6017;
  int D.6018;
  const gchar * name;

  goto <D.5908>;
  <D.5909>:
  D.6009 = strlen (pattern);
  D.6010 = pattern + D.6009;
  D.6011 = match (name, pattern, D.6010, ignorecase);
  if (D.6011 == 0) goto <D.6012>; else goto <D.6013>;
  <D.6012>:
  // predicted unlikely by continue predictor.
  goto <D.5908>;
  <D.6013>:
  if (unique == 0) goto <D.6014>; else goto <D.6016>;
  <D.6016>:
  D.6017 = contains (pglob, name);
  if (D.6017 == 0) goto <D.6014>; else goto <D.6015>;
  <D.6014>:
  globextend (name, pglob, limitp);
  <D.6015>:
  <D.5908>:
  name = monoeg_g_dir_read_name (dir);
  if (name != 0B) goto <D.5909>; else goto <D.5910>;
  <D.5910>:
  D.6018 = 0;
  return D.6018;
}


match (const gchar * name, gchar * pat, gchar * patend, gboolean ignorecase)
{
  gchar * pat.8;
  int D.6021;
  int D.6022;
  int D.6025;
  int D.6026;
  const gchar * name.9;
  char D.6030;
  const gchar * name.10;
  char D.6032;
  const gchar * name.11;
  char D.6038;
  int D.6039;
  char D.6040;
  char D.6041;
  const gchar * name.12;
  char D.6046;
  char D.6049;
  _Bool D.6050;
  gchar c;

  goto <D.5942>;
  <D.5941>:
  pat.8 = pat;
  pat = pat.8 + 1;
  c = *pat.8;
  D.6021 = (int) c;
  D.6022 = D.6021 & 65535;
  switch (D.6022) <default: <D.5940>, case 42: <D.5935>, case 63: <D.5938>>
  <D.5935>:
  if (pat == patend) goto <D.6023>; else goto <D.6024>;
  <D.6023>:
  D.6025 = 1;
  return D.6025;
  <D.6024>:
  <D.5936>:
  D.6026 = match (name, pat, patend, ignorecase);
  if (D.6026 != 0) goto <D.6027>; else goto <D.6028>;
  <D.6027>:
  D.6025 = 1;
  return D.6025;
  <D.6028>:
  name.9 = name;
  name = name.9 + 1;
  D.6030 = *name.9;
  if (D.6030 != 0) goto <D.5936>; else goto <D.5937>;
  <D.5937>:
  D.6025 = 0;
  return D.6025;
  <D.5938>:
  name.10 = name;
  name = name.10 + 1;
  D.6032 = *name.10;
  if (D.6032 == 0) goto <D.6033>; else goto <D.6034>;
  <D.6033>:
  D.6025 = 0;
  return D.6025;
  <D.6034>:
  goto <D.5939>;
  <D.5940>:
  if (ignorecase != 0) goto <D.6035>; else goto <D.6036>;
  <D.6035>:
  name.11 = name;
  name = name.11 + 1;
  D.6038 = *name.11;
  D.6039 = (int) D.6038;
  D.6040 = monoeg_g_ascii_tolower (D.6039);
  D.6021 = (int) c;
  D.6041 = monoeg_g_ascii_tolower (D.6021);
  if (D.6040 != D.6041) goto <D.6042>; else goto <D.6043>;
  <D.6042>:
  D.6025 = 0;
  return D.6025;
  <D.6043>:
  goto <D.6044>;
  <D.6036>:
  name.12 = name;
  name = name.12 + 1;
  D.6046 = *name.12;
  if (D.6046 != c) goto <D.6047>; else goto <D.6048>;
  <D.6047>:
  D.6025 = 0;
  return D.6025;
  <D.6048>:
  <D.6044>:
  goto <D.5939>;
  <D.5939>:
  <D.5942>:
  if (pat < patend) goto <D.5941>; else goto <D.5943>;
  <D.5943>:
  D.6049 = *name;
  D.6050 = D.6049 == 0;
  D.6025 = (int) D.6050;
  return D.6025;
}


contains (struct wapi_glob_t * pglob, const gchar * name)
{
  char * * D.6052;
  int D.6055;
  unsigned int D.6056;
  unsigned int D.6057;
  char * D.6058;
  int D.5894;
  gboolean D.6063;
  int i.13;
  int i;
  char * * pp;

  D.6052 = pglob->gl_pathv;
  if (D.6052 != 0B) goto <D.6053>; else goto <D.6054>;
  <D.6053>:
  D.6052 = pglob->gl_pathv;
  D.6055 = pglob->gl_offs;
  D.6056 = (unsigned int) D.6055;
  D.6057 = D.6056 * 4;
  pp = D.6052 + D.6057;
  i = pglob->gl_pathc;
  goto <D.5896>;
  <D.5895>:
  D.6058 = *pp;
  if (D.6058 != 0B) goto <D.6059>; else goto <D.6060>;
  <D.6059>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.6058 = *pp;
    D.5894 = __builtin_strcmp (D.6058, name);
  }
  if (D.5894 == 0) goto <D.6061>; else goto <D.6062>;
  <D.6061>:
  D.6063 = 1;
  return D.6063;
  <D.6062>:
  <D.6060>:
  pp = pp + 4;
  <D.5896>:
  i.13 = i;
  i = i.13 + -1;
  if (i.13 != 0) goto <D.5895>; else goto <D.5897>;
  <D.5897>:
  <D.6054>:
  D.6063 = 0;
  return D.6063;
}


globextend (const gchar * path, struct wapi_glob_t * pglob, size_t * limitp)
{
  int D.6066;
  int D.6067;
  int D.6068;
  int D.6069;
  unsigned int D.6070;
  void * iftmp.14;
  char * * D.6072;
  int D.6080;
  unsigned int D.6085;
  unsigned int D.6086;
  const gchar * p.15;
  char D.6088;
  int p.16;
  int path.17;
  int D.6091;
  unsigned int D.6092;
  unsigned int D.6093;
  int D.6096;
  int D.6099;
  int D.6100;
  int D.6101;
  unsigned int D.6102;
  unsigned int D.6103;
  char * * D.6104;
  int D.6105;
  unsigned int D.6106;
  unsigned int D.6107;
  char * * D.6108;
  int iftmp.18;
  char * * pathv;
  int i;
  u_int newsize;
  u_int len;
  char * copy;
  const gchar * p;

  D.6066 = pglob->gl_pathc;
  D.6067 = D.6066 + 2;
  D.6068 = pglob->gl_offs;
  D.6069 = D.6067 + D.6068;
  D.6070 = (unsigned int) D.6069;
  newsize = D.6070 * 4;
  D.6072 = pglob->gl_pathv;
  if (D.6072 != 0B) goto <D.6073>; else goto <D.6074>;
  <D.6073>:
  D.6072 = pglob->gl_pathv;
  iftmp.14 = realloc (D.6072, newsize);
  goto <D.6075>;
  <D.6074>:
  iftmp.14 = malloc (newsize);
  <D.6075>:
  pathv = iftmp.14;
  if (pathv == 0B) goto <D.6076>; else goto <D.6077>;
  <D.6076>:
  D.6072 = pglob->gl_pathv;
  if (D.6072 != 0B) goto <D.6078>; else goto <D.6079>;
  <D.6078>:
  D.6072 = pglob->gl_pathv;
  free (D.6072);
  pglob->gl_pathv = 0B;
  <D.6079>:
  D.6080 = -1;
  return D.6080;
  <D.6077>:
  D.6072 = pglob->gl_pathv;
  if (D.6072 == 0B) goto <D.6081>; else goto <D.6082>;
  <D.6081>:
  D.6068 = pglob->gl_offs;
  if (D.6068 > 0) goto <D.6083>; else goto <D.6084>;
  <D.6083>:
  D.6068 = pglob->gl_offs;
  D.6085 = (unsigned int) D.6068;
  D.6086 = D.6085 * 4;
  pathv = pathv + D.6086;
  i = pglob->gl_offs;
  goto <D.5923>;
  <D.5922>:
  pathv = pathv + 4294967292;
  *pathv = 0B;
  <D.5923>:
  i = i + -1;
  if (i >= 0) goto <D.5922>; else goto <D.5924>;
  <D.5924>:
  <D.6084>:
  <D.6082>:
  pglob->gl_pathv = pathv;
  p = path;
  goto <D.5926>;
  <D.5925>:
  <D.5926>:
  p.15 = p;
  p = p.15 + 1;
  D.6088 = *p.15;
  if (D.6088 != 0) goto <D.5925>; else goto <D.5927>;
  <D.5927>:
  p.16 = (int) p;
  path.17 = (int) path;
  D.6091 = p.16 - path.17;
  len = (u_int) D.6091;
  D.6092 = *limitp;
  D.6093 = D.6092 + len;
  *limitp = D.6093;
  copy = malloc (len);
  if (copy != 0B) goto <D.6094>; else goto <D.6095>;
  <D.6094>:
  D.6096 = g_Ctoc (path, copy, len);
  if (D.6096 != 0) goto <D.6097>; else goto <D.6098>;
  <D.6097>:
  free (copy);
  D.6080 = -1;
  return D.6080;
  <D.6098>:
  D.6068 = pglob->gl_offs;
  D.6066 = pglob->gl_pathc;
  D.6099 = D.6066;
  D.6100 = D.6099 + 1;
  pglob->gl_pathc = D.6100;
  D.6101 = D.6068 + D.6099;
  D.6102 = (unsigned int) D.6101;
  D.6103 = D.6102 * 4;
  D.6104 = pathv + D.6103;
  *D.6104 = copy;
  <D.6095>:
  D.6068 = pglob->gl_offs;
  D.6066 = pglob->gl_pathc;
  D.6105 = D.6068 + D.6066;
  D.6106 = (unsigned int) D.6105;
  D.6107 = D.6106 * 4;
  D.6108 = pathv + D.6107;
  *D.6108 = 0B;
  if (copy == 0B) goto <D.6110>; else goto <D.6111>;
  <D.6110>:
  iftmp.18 = -1;
  goto <D.6112>;
  <D.6111>:
  iftmp.18 = 0;
  <D.6112>:
  D.6080 = iftmp.18;
  return D.6080;
}


g_Ctoc (const gchar * str, char * buf, u_int len)
{
  char * buf.19;
  const gchar * str.20;
  char D.6116;
  char D.6117;
  int D.6120;
  unsigned int len.21;

  goto <D.5958>;
  <D.5957>:
  buf.19 = buf;
  buf = buf.19 + 1;
  str.20 = str;
  str = str.20 + 1;
  D.6116 = *str.20;
  *buf.19 = D.6116;
  D.6117 = *buf.19;
  if (D.6117 == 0) goto <D.6118>; else goto <D.6119>;
  <D.6118>:
  D.6120 = 0;
  return D.6120;
  <D.6119>:
  <D.5958>:
  len.21 = len;
  len = len.21 + 4294967295;
  if (len.21 != 0) goto <D.5957>; else goto <D.5959>;
  <D.5959>:
  D.6120 = 1;
  return D.6120;
}


_wapi_globfree (struct wapi_glob_t * pglob)
{
  char * * D.6123;
  int D.6126;
  unsigned int D.6127;
  unsigned int D.6128;
  char * D.6129;
  int i.22;
  int i;
  char * * pp;

  D.6123 = pglob->gl_pathv;
  if (D.6123 != 0B) goto <D.6124>; else goto <D.6125>;
  <D.6124>:
  D.6123 = pglob->gl_pathv;
  D.6126 = pglob->gl_offs;
  D.6127 = (unsigned int) D.6126;
  D.6128 = D.6127 * 4;
  pp = D.6123 + D.6128;
  i = pglob->gl_pathc;
  goto <D.5950>;
  <D.5949>:
  D.6129 = *pp;
  if (D.6129 != 0B) goto <D.6130>; else goto <D.6131>;
  <D.6130>:
  D.6129 = *pp;
  free (D.6129);
  <D.6131>:
  pp = pp + 4;
  <D.5950>:
  i.22 = i;
  i = i.22 + -1;
  if (i.22 != 0) goto <D.5949>; else goto <D.5951>;
  <D.5951>:
  D.6123 = pglob->gl_pathv;
  free (D.6123);
  pglob->gl_pathv = 0B;
  <D.6125>:
}


