monoeg_g_module_open (const gchar * file, GModuleFlags flags)
{
  unsigned int D.5041;
  unsigned int D.5044;
  struct GModule * D.5049;
  int f;
  struct GModule * module;
  void * handle;

  f = 0;
  flags = flags & 3;
  D.5041 = flags & 1;
  if (D.5041 != 0) goto <D.5042>; else goto <D.5043>;
  <D.5042>:
  f = f | 1;
  <D.5043>:
  D.5044 = flags & 2;
  if (D.5044 != 0) goto <D.5045>; else goto <D.5046>;
  <D.5045>:
  f = f;
  <D.5046>:
  handle = dlopen (file, f);
  if (handle == 0B) goto <D.5047>; else goto <D.5048>;
  <D.5047>:
  D.5049 = 0B;
  return D.5049;
  <D.5048>:
  module = monoeg_malloc (8);
  module->handle = handle;
  D.5049 = module;
  return D.5049;
}


monoeg_g_module_symbol (struct GModule * module, const gchar * symbol_name, void * * symbol)
{
  _Bool D.5051;
  _Bool D.5052;
  _Bool D.5053;
  gboolean D.5056;
  void * D.5060;
  void * D.5061;
  void * D.5062;
  _Bool D.5063;

  D.5051 = symbol_name == 0B;
  D.5052 = symbol == 0B;
  D.5053 = D.5051 | D.5052;
  if (D.5053 != 0) goto <D.5054>; else goto <D.5055>;
  <D.5054>:
  D.5056 = 0;
  return D.5056;
  <D.5055>:
  if (module == 0B) goto <D.5057>; else goto <D.5059>;
  <D.5059>:
  D.5060 = module->handle;
  if (D.5060 == 0B) goto <D.5057>; else goto <D.5058>;
  <D.5057>:
  D.5056 = 0;
  return D.5056;
  <D.5058>:
  D.5060 = module->handle;
  D.5061 = dlsym (D.5060, symbol_name);
  *symbol = D.5061;
  D.5062 = *symbol;
  D.5063 = D.5062 != 0B;
  D.5056 = (gboolean) D.5063;
  return D.5056;
}


monoeg_g_module_error ()
{
  const gchar * D.5065;

  D.5065 = dlerror ();
  return D.5065;
}


monoeg_g_module_close (struct GModule * module)
{
  void * D.5070;
  gboolean D.5071;
  int D.5072;
  _Bool D.5073;
  void * handle;

  if (module == 0B) goto <D.5067>; else goto <D.5069>;
  <D.5069>:
  D.5070 = module->handle;
  if (D.5070 == 0B) goto <D.5067>; else goto <D.5068>;
  <D.5067>:
  D.5071 = 0;
  return D.5071;
  <D.5068>:
  handle = module->handle;
  module->handle = 0B;
  monoeg_g_free (module);
  D.5072 = dlclose (handle);
  D.5073 = D.5072 == 0;
  D.5071 = (gboolean) D.5073;
  return D.5071;
}


monoeg_g_module_build_path (const gchar * directory, const gchar * module_name)
{
  gchar * D.5077;
  int D.5078;
  char D.5083;
  char * lib_prefix;

  lib_prefix = "";
  if (module_name == 0B) goto <D.5075>; else goto <D.5076>;
  <D.5075>:
  D.5077 = 0B;
  return D.5077;
  <D.5076>:
  D.5078 = strncmp (module_name, "lib", 3);
  if (D.5078 != 0) goto <D.5079>; else goto <D.5080>;
  <D.5079>:
  lib_prefix = "lib";
  <D.5080>:
  if (directory != 0B) goto <D.5081>; else goto <D.5082>;
  <D.5081>:
  D.5083 = *directory;
  if (D.5083 != 0) goto <D.5084>; else goto <D.5085>;
  <D.5084>:
  D.5077 = monoeg_g_strdup_printf ("%s/%s%s.so", directory, lib_prefix, module_name);
  return D.5077;
  <D.5085>:
  <D.5082>:
  D.5077 = monoeg_g_strdup_printf ("%s%s.so", lib_prefix, module_name);
  return D.5077;
}


