monoeg_g_build_path (const gchar * separator, const gchar * first_element)
{
  gchar * D.5572;
  unsigned int D.5573;
  sizetype D.5574;
  const char * D.5575;
  int D.5576;
  const char * D.5578;
  int endptr.0;
  int elem.1;
  int D.5583;
  void * args.2;
  void * args.3;
  int D.5587;
  char D.5588;
  int slen.4;
  const char * elem;
  const char * next;
  const char * endptr;
  gboolean trimmed;
  struct GString * path;
  void * args;
  size_t slen;

  try
    {
      if (separator == 0B) goto <D.5570>; else goto <D.5571>;
      <D.5570>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 50, "separator != NULL");
      D.5572 = 0B;
      return D.5572;
      <D.5571>:
      path = monoeg_g_string_sized_new (48);
      slen = strlen (separator);
      __builtin_va_start (&args, 0);
      elem = first_element;
      goto <D.5533>;
      <D.5532>:
      D.5573 = strlen (elem);
      endptr = elem + D.5573;
      trimmed = 0;
      goto <D.5517>;
      <D.5516>:
      D.5574 = -slen;
      D.5575 = endptr + D.5574;
      D.5576 = strncmp (D.5575, separator, slen);
      if (D.5576 != 0) goto <D.5515>; else goto <D.5577>;
      <D.5577>:
      D.5574 = -slen;
      endptr = endptr + D.5574;
      trimmed = 1;
      <D.5517>:
      D.5578 = elem + slen;
      if (D.5578 <= endptr) goto <D.5516>; else goto <D.5515>;
      <D.5515>:
      if (endptr > elem) goto <D.5579>; else goto <D.5580>;
      <D.5579>:
      endptr.0 = (int) endptr;
      elem.1 = (int) elem;
      D.5583 = endptr.0 - elem.1;
      monoeg_g_string_append_len (path, elem, D.5583);
      <D.5580>:
      <D.5531>:
      args.2 = args;
      args.3 = args.2 + 4;
      args = args.3;
      next = MEM[(char * *)args.2];
      if (next == 0B) goto <D.5518>; else goto <D.5586>;
      <D.5586>:
      goto <D.5529>;
      <D.5528>:
      next = next + slen;
      <D.5529>:
      D.5587 = strncmp (next, separator, slen);
      if (D.5587 == 0) goto <D.5528>; else goto <D.5530>;
      <D.5530>:
      D.5588 = *next;
      if (D.5588 == 0) goto <D.5531>; else goto <D.5518>;
      <D.5518>:
      if (next != 0B) goto <D.5589>; else goto <D.5591>;
      <D.5591>:
      if (trimmed != 0) goto <D.5589>; else goto <D.5590>;
      <D.5589>:
      slen.4 = (int) slen;
      monoeg_g_string_append_len (path, separator, slen.4);
      <D.5590>:
      elem = next;
      <D.5533>:
      if (elem != 0B) goto <D.5532>; else goto <D.5534>;
      <D.5534>:
      __builtin_va_end (&args);
      D.5572 = monoeg_g_string_free (path, 0);
      return D.5572;
    }
  finally
    {
      args = {CLOBBER};
    }
}


monoeg_g_path_get_dirname (const gchar * filename)
{
  gchar * D.5597;
  int p.5;
  int filename.6;
  int D.5604;
  unsigned int D.5605;
  char * D.5606;
  char * p;
  char * r;
  size_t count;

  if (filename == 0B) goto <D.5595>; else goto <D.5596>;
  <D.5595>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 114, "filename != NULL");
  D.5597 = 0B;
  return D.5597;
  <D.5596>:
  p = strrchr_seperator (filename);
  if (p == 0B) goto <D.5598>; else goto <D.5599>;
  <D.5598>:
  D.5597 = monoeg_strdup (".");
  return D.5597;
  <D.5599>:
  if (p == filename) goto <D.5600>; else goto <D.5601>;
  <D.5600>:
  D.5597 = monoeg_strdup ("/");
  return D.5597;
  <D.5601>:
  p.5 = (int) p;
  filename.6 = (int) filename;
  D.5604 = p.5 - filename.6;
  count = (size_t) D.5604;
  D.5605 = count + 1;
  r = monoeg_malloc (D.5605);
  strncpy (r, filename, count);
  D.5606 = r + count;
  *D.5606 = 0;
  D.5597 = r;
  return D.5597;
}


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

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


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

  if (str != 0B) goto <D.5610>; else goto <D.5611>;
  <D.5610>:
  D.5612 = __strdup (str);
  return D.5612;
  <D.5611>:
  D.5612 = 0B;
  return D.5612;
}


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

  D.5615 = __builtin_object_size (__dest, 1);
  D.5614 = __builtin___strncpy_chk (__dest, __src, __len, D.5615);
  return D.5614;
}


monoeg_g_path_get_basename (const char * filename)
{
  gchar * D.5619;
  char D.5620;
  char * D.5625;
  char D.5626;
  int r.7;
  int filename.8;
  int D.5631;
  sizetype D.5632;
  char * D.5633;
  const gchar * D.5636;
  char * r;

  if (filename == 0B) goto <D.5617>; else goto <D.5618>;
  <D.5617>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 133, "filename != NULL");
  D.5619 = 0B;
  return D.5619;
  <D.5618>:
  D.5620 = *filename;
  if (D.5620 == 0) goto <D.5621>; else goto <D.5622>;
  <D.5621>:
  D.5619 = monoeg_strdup (".");
  return D.5619;
  <D.5622>:
  r = strrchr_seperator (filename);
  if (r == 0B) goto <D.5623>; else goto <D.5624>;
  <D.5623>:
  D.5619 = monoeg_strdup (filename);
  return D.5619;
  <D.5624>:
  D.5625 = r + 1;
  D.5626 = *D.5625;
  if (D.5626 == 0) goto <D.5627>; else goto <D.5628>;
  <D.5627>:
  {
    char * copy;

    copy = monoeg_strdup (filename);
    r.7 = (int) r;
    filename.8 = (int) filename;
    D.5631 = r.7 - filename.8;
    D.5632 = (sizetype) D.5631;
    D.5633 = copy + D.5632;
    *D.5633 = 0;
    r = strrchr_seperator (copy);
    if (r == 0B) goto <D.5634>; else goto <D.5635>;
    <D.5634>:
    monoeg_g_free (copy);
    D.5619 = monoeg_strdup ("/");
    return D.5619;
    <D.5635>:
    D.5636 = r + 1;
    r = monoeg_strdup (D.5636);
    monoeg_g_free (copy);
    D.5619 = r;
    return D.5619;
  }
  <D.5628>:
  D.5636 = r + 1;
  D.5619 = monoeg_strdup (D.5636);
  return D.5619;
}


monoeg_g_find_program_in_path (const gchar * program)
{
  const gchar * D.5638;
  gchar * D.5641;
  char D.5645;
  int D.5646;
  char * iftmp.9;
  char[2] * D.5652;
  char D.5653;
  const char * D.5655;
  char D.5656;
  int D.5658;
  char * p;
  char * x;
  char * l;
  gchar * curdir;
  char * save;

  try
    {
      D.5638 = monoeg_g_getenv ("PATH");
      p = monoeg_strdup (D.5638);
      x = p;
      curdir = 0B;
      save = 0B;
      if (program == 0B) goto <D.5639>; else goto <D.5640>;
      <D.5639>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 230, "program != NULL");
      D.5641 = 0B;
      return D.5641;
      <D.5640>:
      if (x == 0B) goto <D.5642>; else goto <D.5644>;
      <D.5644>:
      D.5645 = *x;
      if (D.5645 == 0) goto <D.5642>; else goto <D.5643>;
      <D.5642>:
      curdir = monoeg_g_get_current_dir ();
      x = curdir;
      <D.5643>:
      goto <D.5560>;
      <D.5559>:
      {
        char * probe_path;

        x = 0B;
        probe_path = monoeg_g_build_path ("/", l, program, 0B);
        D.5646 = access (probe_path, 1);
        if (D.5646 == 0) goto <D.5647>; else goto <D.5648>;
        <D.5647>:
        monoeg_g_free (curdir);
        monoeg_g_free (p);
        D.5641 = probe_path;
        return D.5641;
        <D.5648>:
        monoeg_g_free (probe_path);
      }
      <D.5560>:
      D.5652 = ":";
      D.5653 = MEM[(const char *)D.5652];
      if (D.5653 != 0) goto <D.5654>; else goto <D.5650>;
      <D.5654>:
      D.5655 = &MEM[(void *)":" + 1B];
      D.5656 = *D.5655;
      if (D.5656 == 0) goto <D.5657>; else goto <D.5650>;
      <D.5657>:
      D.5652 = ":";
      D.5653 = MEM[(const char *)D.5652];
      D.5658 = (int) D.5653;
      iftmp.9 = __strtok_r_1c (x, D.5658, &save);
      goto <D.5651>;
      <D.5650>:
      iftmp.9 = __strtok_r (x, ":", &save);
      <D.5651>:
      l = iftmp.9;
      if (l != 0B) goto <D.5559>; else goto <D.5561>;
      <D.5561>:
      monoeg_g_free (curdir);
      monoeg_g_free (p);
      D.5641 = 0B;
      return D.5641;
    }
  finally
    {
      save = {CLOBBER};
    }
}


__strtok_r_1c (char * __s, char __sep, char * * __nextp)
{
  char D.5663;
  char * __s.10;
  char * __s.11;
  char D.5668;
  char * D.5671;
  char * D.5672;
  char * __result;

  if (__s == 0B) goto <D.5661>; else goto <D.5662>;
  <D.5661>:
  __s = *__nextp;
  <D.5662>:
  goto <D.3245>;
  <D.3244>:
  __s = __s + 1;
  <D.3245>:
  D.5663 = *__s;
  if (D.5663 == __sep) goto <D.3244>; else goto <D.3246>;
  <D.3246>:
  __result = 0B;
  D.5663 = *__s;
  if (D.5663 != 0) goto <D.5664>; else goto <D.5665>;
  <D.5664>:
  __s.10 = __s;
  __s = __s.10 + 1;
  __result = __s.10;
  goto <D.3249>;
  <D.3248>:
  __s.11 = __s;
  __s = __s.11 + 1;
  D.5668 = *__s.11;
  if (D.5668 == __sep) goto <D.5669>; else goto <D.5670>;
  <D.5669>:
  D.5671 = __s + 4294967295;
  *D.5671 = 0;
  goto <D.3247>;
  <D.5670>:
  <D.3249>:
  D.5663 = *__s;
  if (D.5663 != 0) goto <D.3248>; else goto <D.3247>;
  <D.3247>:
  <D.5665>:
  *__nextp = __s;
  D.5672 = __result;
  return D.5672;
}


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

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


monoeg_g_get_prgname ()
{
  gchar * D.5675;

  D.5675 = name;
  return D.5675;
}


