monoeg_g_build_path (const gchar * separator, const gchar * first_element)
{
  gchar * D.5902;
  long unsigned int D.5903;
  sizetype D.5904;
  const char * D.5905;
  int D.5906;
  const char * D.5908;
  long int endptr.0;
  long int elem.1;
  long int D.5913;
  void * addr.2;
  unsigned int D.5917;
  void * D.5919;
  sizetype D.5920;
  unsigned int D.5921;
  void * D.5922;
  void * D.5923;
  int D.5925;
  char D.5926;
  _Bool D.5927;
  _Bool D.5928;
  _Bool D.5929;
  long int slen.3;
  const char * elem;
  const char * next;
  const char * endptr;
  gboolean trimmed;
  struct GString * path;
  struct  args[1];
  size_t slen;

  try
    {
      if (separator == 0B) goto <D.5900>; else goto <D.5901>;
      <D.5900>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 50, "separator != NULL");
      D.5902 = 0B;
      return D.5902;
      <D.5901>:
      path = monoeg_g_string_sized_new (48);
      slen = strlen (separator);
      __builtin_va_start (&args, 0);
      elem = first_element;
      goto <D.5863>;
      <D.5862>:
      D.5903 = strlen (elem);
      endptr = elem + D.5903;
      trimmed = 0;
      goto <D.5847>;
      <D.5846>:
      D.5904 = -slen;
      D.5905 = endptr + D.5904;
      D.5906 = strncmp (D.5905, separator, slen);
      if (D.5906 != 0) goto <D.5845>; else goto <D.5907>;
      <D.5907>:
      D.5904 = -slen;
      endptr = endptr + D.5904;
      trimmed = 1;
      <D.5847>:
      D.5908 = elem + slen;
      if (D.5908 <= endptr) goto <D.5846>; else goto <D.5845>;
      <D.5845>:
      if (endptr > elem) goto <D.5909>; else goto <D.5910>;
      <D.5909>:
      endptr.0 = (long int) endptr;
      elem.1 = (long int) elem;
      D.5913 = endptr.0 - elem.1;
      monoeg_g_string_append_len (path, elem, D.5913);
      <D.5910>:
      <D.5861>:
      D.5917 = args.gp_offset;
      if (D.5917 >= 48) goto <D.5915>; else goto <D.5918>;
      <D.5918>:
      D.5919 = args.reg_save_area;
      D.5917 = args.gp_offset;
      D.5920 = (sizetype) D.5917;
      addr.2 = D.5919 + D.5920;
      D.5917 = args.gp_offset;
      D.5921 = D.5917 + 8;
      args.gp_offset = D.5921;
      goto <D.5916>;
      <D.5915>:
      D.5922 = args.overflow_arg_area;
      addr.2 = D.5922;
      D.5923 = D.5922 + 8;
      args.overflow_arg_area = D.5923;
      <D.5916>:
      next = MEM[(char * * {ref-all})addr.2];
      if (next == 0B) goto <D.5848>; else goto <D.5924>;
      <D.5924>:
      goto <D.5859>;
      <D.5858>:
      next = next + slen;
      <D.5859>:
      D.5925 = strncmp (next, separator, slen);
      if (D.5925 == 0) goto <D.5858>; else goto <D.5860>;
      <D.5860>:
      D.5926 = *next;
      if (D.5926 == 0) goto <D.5861>; else goto <D.5848>;
      <D.5848>:
      D.5927 = next != 0B;
      D.5928 = trimmed != 0;
      D.5929 = D.5927 | D.5928;
      if (D.5929 != 0) goto <D.5930>; else goto <D.5931>;
      <D.5930>:
      slen.3 = (long int) slen;
      monoeg_g_string_append_len (path, separator, slen.3);
      <D.5931>:
      elem = next;
      <D.5863>:
      if (elem != 0B) goto <D.5862>; else goto <D.5864>;
      <D.5864>:
      __builtin_va_end (&args);
      D.5902 = monoeg_g_string_free (path, 0);
      return D.5902;
    }
  finally
    {
      args = {CLOBBER};
    }
}


monoeg_g_path_get_dirname (const gchar * filename)
{
  gchar * D.5937;
  long int p.4;
  long int filename.5;
  long int D.5944;
  long unsigned int D.5945;
  char * D.5946;
  char * p;
  char * r;
  size_t count;

  if (filename == 0B) goto <D.5935>; else goto <D.5936>;
  <D.5935>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 114, "filename != NULL");
  D.5937 = 0B;
  return D.5937;
  <D.5936>:
  p = strrchr_seperator (filename);
  if (p == 0B) goto <D.5938>; else goto <D.5939>;
  <D.5938>:
  D.5937 = monoeg_strdup (".");
  return D.5937;
  <D.5939>:
  if (p == filename) goto <D.5940>; else goto <D.5941>;
  <D.5940>:
  D.5937 = monoeg_strdup ("/");
  return D.5937;
  <D.5941>:
  p.4 = (long int) p;
  filename.5 = (long int) filename;
  D.5944 = p.4 - filename.5;
  count = (size_t) D.5944;
  D.5945 = count + 1;
  r = monoeg_malloc (D.5945);
  strncpy (r, filename, count);
  D.5946 = r + count;
  *D.5946 = 0;
  D.5937 = r;
  return D.5937;
}


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

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


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

  if (str != 0B) goto <D.5950>; else goto <D.5951>;
  <D.5950>:
  D.5952 = __strdup (str);
  return D.5952;
  <D.5951>:
  D.5952 = 0B;
  return D.5952;
}


strncpy (char * restrict __dest, const char * restrict __src, size_t __len)
{
  char * D.5954;
  long unsigned int D.5955;

  D.5955 = __builtin_object_size (__dest, 1);
  D.5954 = __builtin___strncpy_chk (__dest, __src, __len, D.5955);
  return D.5954;
}


monoeg_g_path_get_basename (const char * filename)
{
  gchar * D.5959;
  char D.5960;
  char * D.5965;
  char D.5966;
  long int r.6;
  long int filename.7;
  long int D.5971;
  sizetype D.5972;
  char * D.5973;
  const gchar * D.5976;
  char * r;

  if (filename == 0B) goto <D.5957>; else goto <D.5958>;
  <D.5957>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 133, "filename != NULL");
  D.5959 = 0B;
  return D.5959;
  <D.5958>:
  D.5960 = *filename;
  if (D.5960 == 0) goto <D.5961>; else goto <D.5962>;
  <D.5961>:
  D.5959 = monoeg_strdup (".");
  return D.5959;
  <D.5962>:
  r = strrchr_seperator (filename);
  if (r == 0B) goto <D.5963>; else goto <D.5964>;
  <D.5963>:
  D.5959 = monoeg_strdup (filename);
  return D.5959;
  <D.5964>:
  D.5965 = r + 1;
  D.5966 = *D.5965;
  if (D.5966 == 0) goto <D.5967>; else goto <D.5968>;
  <D.5967>:
  {
    char * copy;

    copy = monoeg_strdup (filename);
    r.6 = (long int) r;
    filename.7 = (long int) filename;
    D.5971 = r.6 - filename.7;
    D.5972 = (sizetype) D.5971;
    D.5973 = copy + D.5972;
    *D.5973 = 0;
    r = strrchr_seperator (copy);
    if (r == 0B) goto <D.5974>; else goto <D.5975>;
    <D.5974>:
    monoeg_g_free (copy);
    D.5959 = monoeg_strdup ("/");
    return D.5959;
    <D.5975>:
    D.5976 = r + 1;
    r = monoeg_strdup (D.5976);
    monoeg_g_free (copy);
    D.5959 = r;
    return D.5959;
  }
  <D.5968>:
  D.5976 = r + 1;
  D.5959 = monoeg_strdup (D.5976);
  return D.5959;
}


monoeg_g_find_program_in_path (const gchar * program)
{
  const gchar * D.5978;
  gchar * D.5981;
  char D.5985;
  int D.5986;
  char * iftmp.8;
  char[2] * D.5992;
  char D.5993;
  const char * D.5995;
  char D.5996;
  int D.5998;
  char * p;
  char * x;
  char * l;
  gchar * curdir;
  char * save;

  try
    {
      D.5978 = monoeg_g_getenv ("PATH");
      p = monoeg_strdup (D.5978);
      x = p;
      curdir = 0B;
      save = 0B;
      if (program == 0B) goto <D.5979>; else goto <D.5980>;
      <D.5979>:
      monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gpath.c", 230, "program != NULL");
      D.5981 = 0B;
      return D.5981;
      <D.5980>:
      if (x == 0B) goto <D.5982>; else goto <D.5984>;
      <D.5984>:
      D.5985 = *x;
      if (D.5985 == 0) goto <D.5982>; else goto <D.5983>;
      <D.5982>:
      curdir = monoeg_g_get_current_dir ();
      x = curdir;
      <D.5983>:
      goto <D.5890>;
      <D.5889>:
      {
        char * probe_path;

        x = 0B;
        probe_path = monoeg_g_build_path ("/", l, program, 0B);
        D.5986 = access (probe_path, 1);
        if (D.5986 == 0) goto <D.5987>; else goto <D.5988>;
        <D.5987>:
        monoeg_g_free (curdir);
        monoeg_g_free (p);
        D.5981 = probe_path;
        return D.5981;
        <D.5988>:
        monoeg_g_free (probe_path);
      }
      <D.5890>:
      D.5992 = ":";
      D.5993 = MEM[(const char *)D.5992];
      if (D.5993 != 0) goto <D.5994>; else goto <D.5990>;
      <D.5994>:
      D.5995 = &MEM[(void *)":" + 1B];
      D.5996 = *D.5995;
      if (D.5996 == 0) goto <D.5997>; else goto <D.5990>;
      <D.5997>:
      D.5992 = ":";
      D.5993 = MEM[(const char *)D.5992];
      D.5998 = (int) D.5993;
      iftmp.8 = __strtok_r_1c (x, D.5998, &save);
      goto <D.5991>;
      <D.5990>:
      iftmp.8 = __strtok_r (x, ":", &save);
      <D.5991>:
      l = iftmp.8;
      if (l != 0B) goto <D.5889>; else goto <D.5891>;
      <D.5891>:
      monoeg_g_free (curdir);
      monoeg_g_free (p);
      D.5981 = 0B;
      return D.5981;
    }
  finally
    {
      save = {CLOBBER};
    }
}


__strtok_r_1c (char * __s, char __sep, char * * __nextp)
{
  char D.6003;
  char * __s.9;
  char * __s.10;
  char D.6008;
  char * D.6011;
  char * D.6012;
  char * __result;

  if (__s == 0B) goto <D.6001>; else goto <D.6002>;
  <D.6001>:
  __s = *__nextp;
  <D.6002>:
  goto <D.3575>;
  <D.3574>:
  __s = __s + 1;
  <D.3575>:
  D.6003 = *__s;
  if (D.6003 == __sep) goto <D.3574>; else goto <D.3576>;
  <D.3576>:
  __result = 0B;
  D.6003 = *__s;
  if (D.6003 != 0) goto <D.6004>; else goto <D.6005>;
  <D.6004>:
  __s.9 = __s;
  __s = __s.9 + 1;
  __result = __s.9;
  goto <D.3579>;
  <D.3578>:
  __s.10 = __s;
  __s = __s.10 + 1;
  D.6008 = *__s.10;
  if (D.6008 == __sep) goto <D.6009>; else goto <D.6010>;
  <D.6009>:
  D.6011 = __s + 18446744073709551615;
  *D.6011 = 0;
  goto <D.3577>;
  <D.6010>:
  <D.3579>:
  D.6003 = *__s;
  if (D.6003 != 0) goto <D.3578>; else goto <D.3577>;
  <D.3577>:
  <D.6005>:
  *__nextp = __s;
  D.6012 = __result;
  return D.6012;
}


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

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


monoeg_g_get_prgname ()
{
  gchar * D.6015;

  D.6015 = name;
  return D.6015;
}


