mono_portability_helpers_init ()
{
  int __mono_io_portability_helpers.0;
  long unsigned int D.16849;
  long unsigned int D.16850;
  gchar * * D.16851;
  gchar * D.16852;
  int D.16853;
  int __mono_io_portability_helpers.1;
  int D.16858;
  int __mono_io_portability_helpers.2;
  int D.16863;
  int __mono_io_portability_helpers.3;
  const gchar * env;

  __mono_io_portability_helpers.0 = __mono_io_portability_helpers;
  if (__mono_io_portability_helpers.0 != 1) goto <D.16843>; else goto <D.16844>;
  <D.16843>:
  return;
  <D.16844>:
  __mono_io_portability_helpers = 0;
  env = monoeg_g_getenv ("MONO_IOMAP");
  if (env != 0B) goto <D.16845>; else goto <D.16846>;
  <D.16845>:
  {
    gchar * * options;
    int i;

    options = monoeg_g_strsplit (env, ":", 0);
    if (options == 0B) goto <D.16847>; else goto <D.16848>;
    <D.16847>:
    return;
    <D.16848>:
    i = 0;
    goto <D.16758>;
    <D.16757>:
    D.16849 = (long unsigned int) i;
    D.16850 = D.16849 * 8;
    D.16851 = options + D.16850;
    D.16852 = *D.16851;
    D.16853 = strncasecmp (D.16852, "drive", 5);
    if (D.16853 == 0) goto <D.16854>; else goto <D.16855>;
    <D.16854>:
    __mono_io_portability_helpers.0 = __mono_io_portability_helpers;
    __mono_io_portability_helpers.1 = __mono_io_portability_helpers.0 | 2;
    __mono_io_portability_helpers = __mono_io_portability_helpers.1;
    goto <D.16857>;
    <D.16855>:
    D.16849 = (long unsigned int) i;
    D.16850 = D.16849 * 8;
    D.16851 = options + D.16850;
    D.16852 = *D.16851;
    D.16858 = strncasecmp (D.16852, "case", 4);
    if (D.16858 == 0) goto <D.16859>; else goto <D.16860>;
    <D.16859>:
    __mono_io_portability_helpers.0 = __mono_io_portability_helpers;
    __mono_io_portability_helpers.2 = __mono_io_portability_helpers.0 | 4;
    __mono_io_portability_helpers = __mono_io_portability_helpers.2;
    goto <D.16862>;
    <D.16860>:
    D.16849 = (long unsigned int) i;
    D.16850 = D.16849 * 8;
    D.16851 = options + D.16850;
    D.16852 = *D.16851;
    D.16863 = strncasecmp (D.16852, "all", 3);
    if (D.16863 == 0) goto <D.16864>; else goto <D.16865>;
    <D.16864>:
    __mono_io_portability_helpers.0 = __mono_io_portability_helpers;
    __mono_io_portability_helpers.3 = __mono_io_portability_helpers.0 | 6;
    __mono_io_portability_helpers = __mono_io_portability_helpers.3;
    <D.16865>:
    <D.16862>:
    <D.16857>:
    i = i + 1;
    <D.16758>:
    D.16849 = (long unsigned int) i;
    D.16850 = D.16849 * 8;
    D.16851 = options + D.16850;
    D.16852 = *D.16851;
    if (D.16852 != 0B) goto <D.16757>; else goto <D.16759>;
    <D.16759>:
  }
  <D.16846>:
}


mono_portability_find_file (const gchar * pathname, gboolean last_exists)
{
  char D.16871;
  gchar * D.16872;
  struct GString * report.4;
  struct GString * report;
  gchar * ret;

  try
    {
      report = 0B;
      if (pathname == 0B) goto <D.16868>; else goto <D.16870>;
      <D.16870>:
      D.16871 = *pathname;
      if (D.16871 == 0) goto <D.16868>; else goto <D.16869>;
      <D.16868>:
      D.16872 = 0B;
      return D.16872;
      <D.16869>:
      ret = mono_portability_find_file_internal (&report, pathname, last_exists);
      report.4 = report;
      if (report.4 != 0B) goto <D.16874>; else goto <D.16875>;
      <D.16874>:
      report.4 = report;
      monoeg_g_string_free (report.4, 1);
      <D.16875>:
      D.16872 = ret;
      return D.16872;
    }
  finally
    {
      report = {CLOBBER};
    }
}


mono_portability_find_file_internal (struct GString * * report, const gchar * pathname, gboolean last_exists)
{
  <unnamed type> D.16878;
  unsigned int D.16879;
  _Bool D.16880;
  gchar * D.16883;
  int D.16888;
  int __mono_io_portability_helpers.5;
  int D.16892;
  const short unsigned int * * D.16895;
  const short unsigned int * D.16896;
  char D.16897;
  long unsigned int D.16898;
  long unsigned int D.16899;
  const short unsigned int * D.16900;
  short unsigned int D.16901;
  int D.16902;
  int D.16903;
  gchar * D.16906;
  char D.16907;
  long unsigned int D.16910;
  int D.16911;
  long unsigned int D.16912;
  const void * D.16913;
  sizetype D.16914;
  sizetype D.16915;
  gchar * D.16916;
  sizetype D.16921;
  gchar * D.16922;
  char D.16923;
  int D.16928;
  _Bool D.16931;
  _Bool D.16932;
  _Bool D.16933;
  int D.16936;
  long unsigned int D.16941;
  long unsigned int D.16942;
  gchar * * D.16943;
  gchar * D.16944;
  int D.16947;
  long unsigned int D.16948;
  long unsigned int D.16949;
  int D.16813;
  int iftmp.6;
  int D.16812;
  const char[1] * D.16955;
  unsigned char D.16956;
  int D.16957;
  unsigned char D.16958;
  int D.16959;
  _Bool D.16960;
  _Bool D.16961;
  _Bool D.16962;
  const unsigned char * D.16965;
  unsigned char D.16966;
  int D.16967;
  const unsigned char * D.16968;
  unsigned char D.16969;
  int D.16970;
  _Bool D.16971;
  _Bool D.16972;
  const unsigned char * D.16975;
  unsigned char D.16976;
  int D.16977;
  const unsigned char * D.16978;
  unsigned char D.16979;
  int D.16980;
  _Bool D.16981;
  _Bool D.16982;
  const unsigned char * D.16985;
  unsigned char D.16986;
  int D.16987;
  const unsigned char * D.16988;
  unsigned char D.16989;
  int D.16990;
  gchar * D.16992;
  unsigned char D.16993;
  int component.7;
  long unsigned int D.16999;
  long unsigned int D.17000;
  gchar * * D.17001;
  gchar * D.17002;
  int component.8;
  long unsigned int D.17011;
  long unsigned int D.17012;
  gchar * * D.17013;
  int D.16824;
  int iftmp.9;
  int D.16823;
  unsigned char D.17020;
  int D.17021;
  _Bool D.17022;
  _Bool D.17023;
  _Bool D.17024;
  const unsigned char * D.17027;
  unsigned char D.17028;
  int D.17029;
  _Bool D.17030;
  _Bool D.17031;
  const unsigned char * D.17034;
  unsigned char D.17035;
  int D.17036;
  _Bool D.17037;
  _Bool D.17038;
  const unsigned char * D.17041;
  unsigned char D.17042;
  int D.17043;
  int component.10;
  long unsigned int D.17048;
  long unsigned int D.17049;
  gchar * * D.17050;
  gchar * D.17051;
  int component.11;
  long unsigned int D.17058;
  long unsigned int D.17059;
  gchar * * D.17060;
  int component.12;
  long unsigned int D.17063;
  long unsigned int D.17064;
  gchar * * D.17065;
  gchar * D.17066;
  _Bool D.17067;
  long int D.17068;
  long int D.17069;
  int D.17075;
  long unsigned int D.17077;
  long unsigned int D.17078;
  gchar * * D.17079;
  gchar * D.17080;
  gchar * * D.17083;
  int D.17092;
  int D.16840;
  gchar * new_pathname;
  gchar * * components;
  gchar * * new_components;
  int num_components;
  int component;
  struct DIR * scanning;
  size_t len;
  gboolean drive_stripped;
  gboolean do_report;

  num_components = 0;
  component = 0;
  scanning = 0B;
  drive_stripped = 0;
  D.16878 = mono_profiler_get_events ();
  D.16879 = D.16878 & 262144;
  D.16880 = D.16879 != 0;
  do_report = (gboolean) D.16880;
  if (0 != 0) goto <D.16881>; else goto <D.16882>;
  <D.16881>:
  D.16883 = 0B;
  return D.16883;
  <D.16882>:
  if (do_report != 0) goto <D.16884>; else goto <D.16885>;
  <D.16884>:
  append_report (report, " - Requested file path: \'%s\'\n", pathname);
  <D.16885>:
  new_pathname = monoeg_strdup (pathname);
  if (last_exists != 0) goto <D.16886>; else goto <D.16887>;
  <D.16886>:
  D.16888 = access (new_pathname, 0);
  if (D.16888 == 0) goto <D.16889>; else goto <D.16890>;
  <D.16889>:
  D.16883 = new_pathname;
  return D.16883;
  <D.16890>:
  <D.16887>:
  monoeg_g_strdelimit (new_pathname, "\\", 47);
  __mono_io_portability_helpers.5 = __mono_io_portability_helpers;
  D.16892 = __mono_io_portability_helpers.5 & 2;
  if (D.16892 != 0) goto <D.16893>; else goto <D.16894>;
  <D.16893>:
  D.16895 = __ctype_b_loc ();
  D.16896 = *D.16895;
  D.16897 = *new_pathname;
  D.16898 = (long unsigned int) D.16897;
  D.16899 = D.16898 * 2;
  D.16900 = D.16896 + D.16899;
  D.16901 = *D.16900;
  D.16902 = (int) D.16901;
  D.16903 = D.16902 & 1024;
  if (D.16903 != 0) goto <D.16904>; else goto <D.16905>;
  <D.16904>:
  D.16906 = new_pathname + 1;
  D.16907 = *D.16906;
  if (D.16907 == 58) goto <D.16908>; else goto <D.16909>;
  <D.16908>:
  {
    int len;

    D.16910 = strlen (new_pathname);
    len = (int) D.16910;
    D.16911 = len + -2;
    D.16912 = (long unsigned int) D.16911;
    D.16913 = new_pathname + 2;
    memmove (new_pathname, D.16913, D.16912);
    D.16914 = (sizetype) len;
    D.16915 = D.16914 + 18446744073709551614;
    D.16916 = new_pathname + D.16915;
    *D.16916 = 0;
    if (do_report != 0) goto <D.16917>; else goto <D.16918>;
    <D.16917>:
    append_report (report, " - Stripped drive letter.\n");
    drive_stripped = 1;
    <D.16918>:
  }
  <D.16909>:
  <D.16905>:
  <D.16894>:
  len = strlen (new_pathname);
  if (len > 1) goto <D.16919>; else goto <D.16920>;
  <D.16919>:
  D.16921 = len + 18446744073709551615;
  D.16922 = new_pathname + D.16921;
  D.16923 = *D.16922;
  if (D.16923 == 47) goto <D.16924>; else goto <D.16925>;
  <D.16924>:
  D.16921 = len + 18446744073709551615;
  D.16922 = new_pathname + D.16921;
  *D.16922 = 0;
  <D.16925>:
  <D.16920>:
  if (last_exists != 0) goto <D.16926>; else goto <D.16927>;
  <D.16926>:
  D.16928 = access (new_pathname, 0);
  if (D.16928 == 0) goto <D.16929>; else goto <D.16930>;
  <D.16929>:
  D.16931 = do_report != 0;
  D.16932 = drive_stripped != 0;
  D.16933 = D.16931 & D.16932;
  if (D.16933 != 0) goto <D.16934>; else goto <D.16935>;
  <D.16934>:
  do_mono_profiler_iomap (report, pathname, new_pathname);
  <D.16935>:
  D.16883 = new_pathname;
  return D.16883;
  <D.16930>:
  <D.16927>:
  __mono_io_portability_helpers.5 = __mono_io_portability_helpers;
  D.16936 = __mono_io_portability_helpers.5 & 4;
  if (D.16936 == 0) goto <D.16937>; else goto <D.16938>;
  <D.16937>:
  monoeg_g_free (new_pathname);
  D.16883 = 0B;
  return D.16883;
  <D.16938>:
  components = monoeg_g_strsplit (new_pathname, "/", 0);
  if (components == 0B) goto <D.16939>; else goto <D.16940>;
  <D.16939>:
  monoeg_g_free (new_pathname);
  D.16883 = 0B;
  return D.16883;
  <D.16940>:
  goto <D.16803>;
  <D.16802>:
  num_components = num_components + 1;
  <D.16803>:
  D.16941 = (long unsigned int) num_components;
  D.16942 = D.16941 * 8;
  D.16943 = components + D.16942;
  D.16944 = *D.16943;
  if (D.16944 != 0B) goto <D.16802>; else goto <D.16804>;
  <D.16804>:
  monoeg_g_free (new_pathname);
  if (num_components == 0) goto <D.16945>; else goto <D.16946>;
  <D.16945>:
  D.16883 = 0B;
  return D.16883;
  <D.16946>:
  D.16947 = num_components + 1;
  D.16948 = (long unsigned int) D.16947;
  D.16949 = D.16948 * 8;
  new_components = monoeg_malloc0 (D.16949);
  if (num_components > 1) goto <D.16950>; else goto <D.16951>;
  <D.16950>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 0;
    if (__s2_len <= 3) goto <D.16953>; else goto <D.16954>;
    <D.16953>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = *components;
      D.16955 = "";
      D.16956 = MEM[(const unsigned char *)D.16955];
      D.16957 = (int) D.16956;
      D.16958 = *__s2;
      D.16959 = (int) D.16958;
      __result = D.16957 - D.16959;
      {
        D.16960 = __s2_len != 0;
        D.16961 = __result == 0;
        D.16962 = D.16960 & D.16961;
        if (D.16962 != 0) goto <D.16963>; else goto <D.16964>;
        <D.16963>:
        D.16965 = &MEM[(void *)"" + 1B];
        D.16966 = *D.16965;
        D.16967 = (int) D.16966;
        D.16968 = __s2 + 1;
        D.16969 = *D.16968;
        D.16970 = (int) D.16969;
        __result = D.16967 - D.16970;
        D.16971 = __s2_len > 1;
        D.16961 = __result == 0;
        D.16972 = D.16971 & D.16961;
        if (D.16972 != 0) goto <D.16973>; else goto <D.16974>;
        <D.16973>:
        D.16975 = &MEM[(void *)"" + 2B];
        D.16976 = *D.16975;
        D.16977 = (int) D.16976;
        D.16978 = __s2 + 2;
        D.16979 = *D.16978;
        D.16980 = (int) D.16979;
        __result = D.16977 - D.16980;
        D.16981 = __s2_len > 2;
        D.16961 = __result == 0;
        D.16982 = D.16981 & D.16961;
        if (D.16982 != 0) goto <D.16983>; else goto <D.16984>;
        <D.16983>:
        D.16985 = &MEM[(void *)"" + 3B];
        D.16986 = *D.16985;
        D.16987 = (int) D.16986;
        D.16988 = __s2 + 3;
        D.16989 = *D.16988;
        D.16990 = (int) D.16989;
        __result = D.16987 - D.16990;
        <D.16984>:
        <D.16974>:
        <D.16964>:
      }
      D.16812 = __result;
    }
    iftmp.6 = -D.16812;
    goto <D.16991>;
    <D.16954>:
    D.16992 = *components;
    D.16993 = MEM[(const unsigned char * {ref-all})D.16992];
    iftmp.6 = (int) D.16993;
    <D.16991>:
    D.16813 = iftmp.6;
  }
  if (D.16813 == 0) goto <D.16994>; else goto <D.16995>;
  <D.16994>:
  scanning = opendir ("/");
  if (scanning == 0B) goto <D.16996>; else goto <D.16997>;
  <D.16996>:
  monoeg_g_strfreev (new_components);
  monoeg_g_strfreev (components);
  D.16883 = 0B;
  return D.16883;
  <D.16997>:
  component.7 = component;
  component = component.7 + 1;
  D.16999 = (long unsigned int) component.7;
  D.17000 = D.16999 * 8;
  D.17001 = new_components + D.17000;
  D.17002 = monoeg_strdup ("");
  *D.17001 = D.17002;
  goto <D.17003>;
  <D.16995>:
  {
    struct DIR * current;
    gchar * entry;

    current = opendir (".");
    if (current == 0B) goto <D.17004>; else goto <D.17005>;
    <D.17004>:
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17005>:
    D.16992 = *components;
    entry = find_in_dir (current, D.16992);
    if (entry == 0B) goto <D.17006>; else goto <D.17007>;
    <D.17006>:
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17007>:
    scanning = opendir (entry);
    if (scanning == 0B) goto <D.17008>; else goto <D.17009>;
    <D.17008>:
    monoeg_g_free (entry);
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17009>:
    component.8 = component;
    component = component.8 + 1;
    D.17011 = (long unsigned int) component.8;
    D.17012 = D.17011 * 8;
    D.17013 = new_components + D.17012;
    *D.17013 = entry;
  }
  <D.17003>:
  goto <D.17014>;
  <D.16951>:
  if (last_exists != 0) goto <D.17015>; else goto <D.17016>;
  <D.17015>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 0;
    if (__s2_len <= 3) goto <D.17018>; else goto <D.17019>;
    <D.17018>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = *components;
      D.16955 = "";
      D.16956 = MEM[(const unsigned char *)D.16955];
      D.16957 = (int) D.16956;
      D.17020 = *__s2;
      D.17021 = (int) D.17020;
      __result = D.16957 - D.17021;
      {
        D.17022 = __s2_len != 0;
        D.17023 = __result == 0;
        D.17024 = D.17022 & D.17023;
        if (D.17024 != 0) goto <D.17025>; else goto <D.17026>;
        <D.17025>:
        D.16965 = &MEM[(void *)"" + 1B];
        D.16966 = *D.16965;
        D.16967 = (int) D.16966;
        D.17027 = __s2 + 1;
        D.17028 = *D.17027;
        D.17029 = (int) D.17028;
        __result = D.16967 - D.17029;
        D.17030 = __s2_len > 1;
        D.17023 = __result == 0;
        D.17031 = D.17030 & D.17023;
        if (D.17031 != 0) goto <D.17032>; else goto <D.17033>;
        <D.17032>:
        D.16975 = &MEM[(void *)"" + 2B];
        D.16976 = *D.16975;
        D.16977 = (int) D.16976;
        D.17034 = __s2 + 2;
        D.17035 = *D.17034;
        D.17036 = (int) D.17035;
        __result = D.16977 - D.17036;
        D.17037 = __s2_len > 2;
        D.17023 = __result == 0;
        D.17038 = D.17037 & D.17023;
        if (D.17038 != 0) goto <D.17039>; else goto <D.17040>;
        <D.17039>:
        D.16985 = &MEM[(void *)"" + 3B];
        D.16986 = *D.16985;
        D.16987 = (int) D.16986;
        D.17041 = __s2 + 3;
        D.17042 = *D.17041;
        D.17043 = (int) D.17042;
        __result = D.16987 - D.17043;
        <D.17040>:
        <D.17033>:
        <D.17026>:
      }
      D.16823 = __result;
    }
    iftmp.9 = -D.16823;
    goto <D.17044>;
    <D.17019>:
    D.16992 = *components;
    D.16993 = MEM[(const unsigned char * {ref-all})D.16992];
    iftmp.9 = (int) D.16993;
    <D.17044>:
    D.16824 = iftmp.9;
  }
  if (D.16824 == 0) goto <D.17045>; else goto <D.17046>;
  <D.17045>:
  component.10 = component;
  component = component.10 + 1;
  D.17048 = (long unsigned int) component.10;
  D.17049 = D.17048 * 8;
  D.17050 = new_components + D.17049;
  D.17051 = monoeg_strdup ("");
  *D.17050 = D.17051;
  goto <D.17052>;
  <D.17046>:
  {
    struct DIR * current;
    gchar * entry;

    current = opendir (".");
    if (current == 0B) goto <D.17053>; else goto <D.17054>;
    <D.17053>:
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17054>:
    D.16992 = *components;
    entry = find_in_dir (current, D.16992);
    if (entry == 0B) goto <D.17055>; else goto <D.17056>;
    <D.17055>:
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17056>:
    component.11 = component;
    component = component.11 + 1;
    D.17058 = (long unsigned int) component.11;
    D.17059 = D.17058 * 8;
    D.17060 = new_components + D.17059;
    *D.17060 = entry;
  }
  <D.17052>:
  goto <D.17061>;
  <D.17016>:
  component.12 = component;
  component = component.12 + 1;
  D.17063 = (long unsigned int) component.12;
  D.17064 = D.17063 * 8;
  D.17065 = new_components + D.17064;
  D.16992 = *components;
  D.17066 = monoeg_strdup (D.16992);
  *D.17065 = D.17066;
  <D.17061>:
  <D.17014>:
  D.17067 = component != 1;
  D.17068 = (long int) D.17067;
  D.17069 = __builtin_expect (D.17068, 0);
  if (D.17069 != 0) goto <D.17070>; else goto <D.17071>;
  <D.17070>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "mono-io-portability.c", 343, "component == 1");
  <D.17071>:
  goto <D.16830>;
  <D.16829>:
  {
    gchar * entry;
    gchar * path_so_far;

    if (last_exists == 0) goto <D.17074>; else goto <D.17072>;
    <D.17074>:
    D.17075 = num_components + -1;
    if (D.17075 == component) goto <D.17076>; else goto <D.17072>;
    <D.17076>:
    D.17077 = (long unsigned int) component;
    D.17078 = D.17077 * 8;
    D.17079 = components + D.17078;
    D.17080 = *D.17079;
    entry = monoeg_strdup (D.17080);
    closedir (scanning);
    goto <D.17073>;
    <D.17072>:
    D.17077 = (long unsigned int) component;
    D.17078 = D.17077 * 8;
    D.17079 = components + D.17078;
    D.17080 = *D.17079;
    entry = find_in_dir (scanning, D.17080);
    if (entry == 0B) goto <D.17081>; else goto <D.17082>;
    <D.17081>:
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17082>:
    <D.17073>:
    D.17077 = (long unsigned int) component;
    D.17078 = D.17077 * 8;
    D.17083 = new_components + D.17078;
    *D.17083 = entry;
    D.17075 = num_components + -1;
    if (D.17075 > component) goto <D.17084>; else goto <D.17085>;
    <D.17084>:
    path_so_far = monoeg_g_strjoinv ("/", new_components);
    scanning = opendir (path_so_far);
    monoeg_g_free (path_so_far);
    if (scanning == 0B) goto <D.17086>; else goto <D.17087>;
    <D.17086>:
    monoeg_g_strfreev (new_components);
    monoeg_g_strfreev (components);
    D.16883 = 0B;
    return D.16883;
    <D.17087>:
    <D.17085>:
  }
  component = component + 1;
  <D.16830>:
  if (component < num_components) goto <D.16829>; else goto <D.16831>;
  <D.16831>:
  monoeg_g_strfreev (components);
  new_pathname = monoeg_g_strjoinv ("/", new_components);
  monoeg_g_strfreev (new_components);
  if (last_exists != 0) goto <D.17091>; else goto <D.17088>;
  <D.17091>:
  D.17092 = access (new_pathname, 0);
  if (D.17092 == 0) goto <D.17089>; else goto <D.17088>;
  <D.17088>:
  if (last_exists == 0) goto <D.17089>; else goto <D.17090>;
  <D.17089>:
  if (do_report != 0) goto <D.17093>; else goto <D.17094>;
  <D.17093>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.16840 = __builtin_strcmp (pathname, new_pathname);
  }
  if (D.16840 != 0) goto <D.17095>; else goto <D.17096>;
  <D.17095>:
  do_mono_profiler_iomap (report, pathname, new_pathname);
  <D.17096>:
  <D.17094>:
  D.16883 = new_pathname;
  return D.16883;
  <D.17090>:
  monoeg_g_free (new_pathname);
  D.16883 = 0B;
  return D.16883;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.17098;
  long unsigned int D.17099;

  D.17099 = __builtin_object_size (__dest, 0);
  D.17098 = __builtin___memmove_chk (__dest, __src, __len, D.17099);
  return D.17098;
}


append_report (struct GString * * report, const gchar * format)
{
  struct GString * D.17101;
  struct GString * D.17104;
  struct  ap[1];

  try
    {
      D.17101 = *report;
      if (D.17101 == 0B) goto <D.17102>; else goto <D.17103>;
      <D.17102>:
      D.17104 = monoeg_g_string_new ("");
      *report = D.17104;
      <D.17103>:
      __builtin_va_start (&ap, 0);
      D.17101 = *report;
      monoeg_g_string_append_vprintf (D.17101, format, &ap);
      __builtin_va_end (&ap);
    }
  finally
    {
      ap = {CLOBBER};
    }
}


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

  if (str != 0B) goto <D.17105>; else goto <D.17106>;
  <D.17105>:
  D.17107 = __strdup (str);
  return D.17107;
  <D.17106>:
  D.17107 = 0B;
  return D.17107;
}


find_in_dir (struct DIR * current, const gchar * name)
{
  char[256] * D.17109;
  int D.17110;
  gchar * D.17113;
  struct dirent * entry;

  goto <D.16767>;
  <D.16766>:
  D.17109 = &entry->d_name;
  D.17110 = monoeg_ascii_strcasecmp (name, D.17109);
  if (D.17110 == 0) goto <D.17111>; else goto <D.17112>;
  <D.17111>:
  {
    char * ret;

    D.17109 = &entry->d_name;
    ret = monoeg_strdup (D.17109);
    closedir (current);
    D.17113 = ret;
    return D.17113;
  }
  <D.17112>:
  <D.16767>:
  entry = readdir (current);
  if (entry != 0B) goto <D.16766>; else goto <D.16768>;
  <D.16768>:
  closedir (current);
  D.17113 = 0B;
  return D.17113;
}


do_mono_profiler_iomap (struct GString * * report, const char * pathname, const char * new_pathname)
{
  struct GString * iftmp.13;
  long unsigned int D.17121;
  char * rep;
  struct GString * tmp;

  rep = 0B;
  if (report != 0B) goto <D.17116>; else goto <D.17117>;
  <D.17116>:
  iftmp.13 = *report;
  goto <D.17118>;
  <D.17117>:
  iftmp.13 = 0B;
  <D.17118>:
  tmp = iftmp.13;
  if (tmp != 0B) goto <D.17119>; else goto <D.17120>;
  <D.17119>:
  D.17121 = tmp->len;
  if (D.17121 != 0) goto <D.17122>; else goto <D.17123>;
  <D.17122>:
  rep = monoeg_g_string_free (tmp, 0);
  goto <D.17124>;
  <D.17123>:
  monoeg_g_string_free (tmp, 1);
  <D.17124>:
  *report = 0B;
  <D.17120>:
  mono_profiler_iomap (rep, pathname, new_pathname);
  monoeg_g_free (rep);
}


