monoeg_g_build_path (const gchar * separator, const gchar * first_element)
{
  gchar * D.5552;
  unsigned int D.5553;
  sizetype D.5554;
  const char * D.5555;
  int D.5556;
  const char * D.5558;
  int endptr.0;
  int elem.1;
  int D.5563;
  char * args.2;
  char * args.3;
  int D.5567;
  char D.5568;
  _Bool D.5569;
  _Bool D.5570;
  _Bool D.5571;
  int slen.4;
  const char * elem;
  const char * next;
  const char * endptr;
  gboolean trimmed;
  struct GString * path;
  char * args;
  size_t slen;

  try
    {
      if (separator == 0B) goto <D.5550>; else goto <D.5551>;
      <D.5550>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 50, "separator != NULL");
      D.5552 = 0B;
      return D.5552;
      <D.5551>:
      path = monoeg_g_string_sized_new (48);
      slen = strlen (separator);
      __builtin_va_start (&args, 0);
      elem = first_element;
      goto <D.5513>;
      <D.5512>:
      D.5553 = strlen (elem);
      endptr = elem + D.5553;
      trimmed = 0;
      goto <D.5497>;
      <D.5496>:
      D.5554 = -slen;
      D.5555 = endptr + D.5554;
      D.5556 = strncmp (D.5555, separator, slen);
      if (D.5556 != 0) goto <D.5495>; else goto <D.5557>;
      <D.5557>:
      D.5554 = -slen;
      endptr = endptr + D.5554;
      trimmed = 1;
      <D.5497>:
      D.5558 = elem + slen;
      if (D.5558 <= endptr) goto <D.5496>; else goto <D.5495>;
      <D.5495>:
      if (endptr > elem) goto <D.5559>; else goto <D.5560>;
      <D.5559>:
      endptr.0 = (int) endptr;
      elem.1 = (int) elem;
      D.5563 = endptr.0 - elem.1;
      monoeg_g_string_append_len (path, elem, D.5563);
      <D.5560>:
      <D.5511>:
      args.2 = args;
      args.3 = args.2 + 4;
      args = args.3;
      next = MEM[(char * *)args.2];
      if (next == 0B) goto <D.5498>; else goto <D.5566>;
      <D.5566>:
      goto <D.5509>;
      <D.5508>:
      next = next + slen;
      <D.5509>:
      D.5567 = strncmp (next, separator, slen);
      if (D.5567 == 0) goto <D.5508>; else goto <D.5510>;
      <D.5510>:
      D.5568 = *next;
      if (D.5568 == 0) goto <D.5511>; else goto <D.5498>;
      <D.5498>:
      D.5569 = next != 0B;
      D.5570 = trimmed != 0;
      D.5571 = D.5569 | D.5570;
      if (D.5571 != 0) goto <D.5572>; else goto <D.5573>;
      <D.5572>:
      slen.4 = (int) slen;
      monoeg_g_string_append_len (path, separator, slen.4);
      <D.5573>:
      elem = next;
      <D.5513>:
      if (elem != 0B) goto <D.5512>; else goto <D.5514>;
      <D.5514>:
      __builtin_va_end (&args);
      D.5552 = monoeg_g_string_free (path, 0);
      return D.5552;
    }
  finally
    {
      args = {CLOBBER};
    }
}


monoeg_g_path_get_dirname (const gchar * filename)
{
  gchar * D.5579;
  int p.5;
  int filename.6;
  int D.5586;
  unsigned int D.5587;
  char * D.5588;
  char * p;
  char * r;
  size_t count;

  if (filename == 0B) goto <D.5577>; else goto <D.5578>;
  <D.5577>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 114, "filename != NULL");
  D.5579 = 0B;
  return D.5579;
  <D.5578>:
  p = strrchr_seperator (filename);
  if (p == 0B) goto <D.5580>; else goto <D.5581>;
  <D.5580>:
  D.5579 = monoeg_strdup (".");
  return D.5579;
  <D.5581>:
  if (p == filename) goto <D.5582>; else goto <D.5583>;
  <D.5582>:
  D.5579 = monoeg_strdup ("/");
  return D.5579;
  <D.5583>:
  p.5 = (int) p;
  filename.6 = (int) filename;
  D.5586 = p.5 - filename.6;
  count = (size_t) D.5586;
  D.5587 = count + 1;
  r = monoeg_malloc (D.5587);
  strncpy (r, filename, count);
  D.5588 = r + count;
  *D.5588 = 0;
  D.5579 = r;
  return D.5579;
}


strrchr_seperator (const gchar * filename)
{
  gchar * D.5590;
  char * p;

  p = strrchr (filename, 47);
  D.5590 = p;
  return D.5590;
}


monoeg_strdup (const gchar * str)
{
  gchar * D.5594;

  if (str != 0B) goto <D.5592>; else goto <D.5593>;
  <D.5592>:
  D.5594 = __strdup (str);
  return D.5594;
  <D.5593>:
  D.5594 = 0B;
  return D.5594;
}


strncpy (char * restrict __dest, const char * restrict __src, size_t __len)
{
  char * D.5596;
  unsigned int D.5597;

  D.5597 = __builtin_object_size (__dest, 1);
  D.5596 = __builtin___strncpy_chk (__dest, __src, __len, D.5597);
  return D.5596;
}


monoeg_g_path_get_basename (const char * filename)
{
  gchar * D.5601;
  char D.5602;
  char * D.5607;
  char D.5608;
  int r.7;
  int filename.8;
  int D.5613;
  sizetype D.5614;
  char * D.5615;
  const gchar * D.5618;
  char * r;

  if (filename == 0B) goto <D.5599>; else goto <D.5600>;
  <D.5599>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 133, "filename != NULL");
  D.5601 = 0B;
  return D.5601;
  <D.5600>:
  D.5602 = *filename;
  if (D.5602 == 0) goto <D.5603>; else goto <D.5604>;
  <D.5603>:
  D.5601 = monoeg_strdup (".");
  return D.5601;
  <D.5604>:
  r = strrchr_seperator (filename);
  if (r == 0B) goto <D.5605>; else goto <D.5606>;
  <D.5605>:
  D.5601 = monoeg_strdup (filename);
  return D.5601;
  <D.5606>:
  D.5607 = r + 1;
  D.5608 = *D.5607;
  if (D.5608 == 0) goto <D.5609>; else goto <D.5610>;
  <D.5609>:
  {
    char * copy;

    copy = monoeg_strdup (filename);
    r.7 = (int) r;
    filename.8 = (int) filename;
    D.5613 = r.7 - filename.8;
    D.5614 = (sizetype) D.5613;
    D.5615 = copy + D.5614;
    *D.5615 = 0;
    r = strrchr_seperator (copy);
    if (r == 0B) goto <D.5616>; else goto <D.5617>;
    <D.5616>:
    monoeg_g_free (copy);
    D.5601 = monoeg_strdup ("/");
    return D.5601;
    <D.5617>:
    D.5618 = r + 1;
    r = monoeg_strdup (D.5618);
    monoeg_g_free (copy);
    D.5601 = r;
    return D.5601;
  }
  <D.5610>:
  D.5618 = r + 1;
  D.5601 = monoeg_strdup (D.5618);
  return D.5601;
}


monoeg_g_find_program_in_path (const gchar * program)
{
  const gchar * D.5620;
  gchar * D.5623;
  char D.5627;
  int D.5628;
  char * iftmp.9;
  char[2] * D.5634;
  char D.5635;
  const char * D.5637;
  char D.5638;
  int D.5640;
  char * p;
  char * x;
  char * l;
  gchar * curdir;
  char * save;

  try
    {
      D.5620 = monoeg_g_getenv ("PATH");
      p = monoeg_strdup (D.5620);
      x = p;
      curdir = 0B;
      save = 0B;
      if (program == 0B) goto <D.5621>; else goto <D.5622>;
      <D.5621>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 230, "program != NULL");
      D.5623 = 0B;
      return D.5623;
      <D.5622>:
      if (x == 0B) goto <D.5624>; else goto <D.5626>;
      <D.5626>:
      D.5627 = *x;
      if (D.5627 == 0) goto <D.5624>; else goto <D.5625>;
      <D.5624>:
      curdir = monoeg_g_get_current_dir ();
      x = curdir;
      <D.5625>:
      goto <D.5540>;
      <D.5539>:
      {
        char * probe_path;

        x = 0B;
        probe_path = monoeg_g_build_path ("/", l, program, 0B);
        D.5628 = access (probe_path, 1);
        if (D.5628 == 0) goto <D.5629>; else goto <D.5630>;
        <D.5629>:
        monoeg_g_free (curdir);
        monoeg_g_free (p);
        D.5623 = probe_path;
        return D.5623;
        <D.5630>:
        monoeg_g_free (probe_path);
      }
      <D.5540>:
      D.5634 = ":";
      D.5635 = MEM[(const char *)D.5634];
      if (D.5635 != 0) goto <D.5636>; else goto <D.5632>;
      <D.5636>:
      D.5637 = &MEM[(void *)":" + 1B];
      D.5638 = *D.5637;
      if (D.5638 == 0) goto <D.5639>; else goto <D.5632>;
      <D.5639>:
      D.5634 = ":";
      D.5635 = MEM[(const char *)D.5634];
      D.5640 = (int) D.5635;
      iftmp.9 = __strtok_r_1c (x, D.5640, &save);
      goto <D.5633>;
      <D.5632>:
      iftmp.9 = __strtok_r (x, ":", &save);
      <D.5633>:
      l = iftmp.9;
      if (l != 0B) goto <D.5539>; else goto <D.5541>;
      <D.5541>:
      monoeg_g_free (curdir);
      monoeg_g_free (p);
      D.5623 = 0B;
      return D.5623;
    }
  finally
    {
      save = {CLOBBER};
    }
}


__strtok_r_1c (char * __s, char __sep, char * * __nextp)
{
  char D.5645;
  char * __s.10;
  char * __s.11;
  char D.5650;
  char * D.5653;
  char * D.5654;
  char * __result;

  if (__s == 0B) goto <D.5643>; else goto <D.5644>;
  <D.5643>:
  __s = *__nextp;
  <D.5644>:
  goto <D.3225>;
  <D.3224>:
  __s = __s + 1;
  <D.3225>:
  D.5645 = *__s;
  if (D.5645 == __sep) goto <D.3224>; else goto <D.3226>;
  <D.3226>:
  __result = 0B;
  D.5645 = *__s;
  if (D.5645 != 0) goto <D.5646>; else goto <D.5647>;
  <D.5646>:
  __s.10 = __s;
  __s = __s.10 + 1;
  __result = __s.10;
  goto <D.3229>;
  <D.3228>:
  __s.11 = __s;
  __s = __s.11 + 1;
  D.5650 = *__s.11;
  if (D.5650 == __sep) goto <D.5651>; else goto <D.5652>;
  <D.5651>:
  D.5653 = __s + 4294967295;
  *D.5653 = 0;
  goto <D.3227>;
  <D.5652>:
  <D.3229>:
  D.5645 = *__s;
  if (D.5645 != 0) goto <D.3228>; else goto <D.3227>;
  <D.3227>:
  <D.5647>:
  *__nextp = __s;
  D.5654 = __result;
  return D.5654;
}


monoeg_g_set_prgname (const gchar * prgname)
{
  gchar * name.12;

  name.12 = monoeg_strdup (prgname);
  name = name.12;
}


monoeg_g_get_prgname ()
{
  gchar * D.5657;

  D.5657 = name;
  return D.5657;
}


