monoeg_g_shell_parse_argv (const gchar * command_line, gint * argcp, gchar * * * argvp, struct GError * * error)
{
  gboolean D.4630;
  struct GError * D.4633;
  int D.4636;
  void * * D.4639;
  unsigned int D.4640;
  unsigned int D.4645;
  int D.4646;
  struct GPtrArray * array;
  gint argc;
  gchar * * argv;

  if (command_line == 0B) goto <D.4628>; else goto <D.4629>;
  <D.4628>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 113, "command_line");
  D.4630 = 0;
  return D.4630;
  <D.4629>:
  if (error != 0B) goto <D.4631>; else goto <D.4632>;
  <D.4631>:
  D.4633 = *error;
  if (D.4633 != 0B) goto <D.4634>; else goto <D.4635>;
  <D.4634>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 114, "error == NULL || *error == NULL");
  D.4630 = 0;
  return D.4630;
  <D.4635>:
  <D.4632>:
  array = monoeg_g_ptr_array_new ();
  D.4636 = split_cmdline (command_line, array, error);
  if (D.4636 != 0) goto <D.4637>; else goto <D.4638>;
  <D.4637>:
  monoeg_g_ptr_array_add (array, 0B);
  D.4639 = array->pdata;
  monoeg_g_strfreev (D.4639);
  monoeg_g_ptr_array_free (array, 0);
  D.4630 = 0;
  return D.4630;
  <D.4638>:
  D.4640 = array->len;
  argc = (gint) D.4640;
  argv = array->pdata;
  if (argc == 1) goto <D.4641>; else goto <D.4642>;
  <D.4641>:
  monoeg_g_strfreev (argv);
  monoeg_g_ptr_array_free (array, 0);
  D.4630 = 0;
  return D.4630;
  <D.4642>:
  if (argcp != 0B) goto <D.4643>; else goto <D.4644>;
  <D.4643>:
  D.4640 = array->len;
  D.4645 = D.4640 + 4294967295;
  D.4646 = (int) D.4645;
  *argcp = D.4646;
  <D.4644>:
  if (argvp != 0B) goto <D.4647>; else goto <D.4648>;
  <D.4647>:
  *argvp = argv;
  goto <D.4649>;
  <D.4648>:
  monoeg_g_strfreev (argv);
  <D.4649>:
  monoeg_g_ptr_array_free (array, 0);
  D.4630 = 1;
  return D.4630;
}


split_cmdline (const gchar * cmdline, struct GPtrArray * array, struct GError * * error)
{
  _Bool D.4655;
  _Bool D.4656;
  _Bool D.4657;
  _Bool D.4660;
  _Bool D.4661;
  _Bool D.4662;
  int D.4665;
  const short unsigned int * * D.4667;
  const short unsigned int * D.4668;
  unsigned int D.4669;
  unsigned int D.4670;
  const short unsigned int * D.4671;
  short unsigned int D.4672;
  int D.4673;
  int D.4674;
  char D.4686;
  unsigned int D.4687;
  unsigned int D.4688;
  const short unsigned int * D.4689;
  short unsigned int D.4690;
  int D.4691;
  int D.4692;
  gchar * D.4694;
  unsigned int D.4702;
  gchar * D.4705;
  _Bool D.4710;
  _Bool D.4711;
  _Bool D.4712;
  _Bool D.4715;
  gchar * ptr.0;
  struct GError * D.4722;
  int D.4723;
  struct GError * D.4728;
  gchar * D.4731;
  gchar * ptr;
  gchar c;
  gboolean escaped;
  gboolean fresh;
  gchar quote_char;
  struct GString * str;

  escaped = 0;
  fresh = 1;
  quote_char = 0;
  str = monoeg_g_string_new ("");
  ptr = cmdline;
  goto <D.4582>;
  <D.4581>:
  if (escaped != 0) goto <D.4651>; else goto <D.4652>;
  <D.4651>:
  if (quote_char == 34) goto <D.4653>; else goto <D.4654>;
  <D.4653>:
  D.4655 = c != 36;
  D.4656 = c != 96;
  D.4657 = D.4655 & D.4656;
  if (D.4657 != 0) goto <D.4658>; else goto <D.4659>;
  <D.4658>:
  D.4660 = c != 34;
  D.4661 = c != 92;
  D.4662 = D.4660 & D.4661;
  if (D.4662 != 0) goto <D.4663>; else goto <D.4664>;
  <D.4663>:
  monoeg_g_string_append_c (str, 92);
  <D.4664>:
  <D.4659>:
  D.4665 = (int) c;
  monoeg_g_string_append_c (str, D.4665);
  goto <D.4666>;
  <D.4654>:
  D.4667 = __ctype_b_loc ();
  D.4668 = *D.4667;
  D.4669 = (unsigned int) c;
  D.4670 = D.4669 * 2;
  D.4671 = D.4668 + D.4670;
  D.4672 = *D.4671;
  D.4673 = (int) D.4672;
  D.4674 = D.4673 & 8192;
  if (D.4674 == 0) goto <D.4675>; else goto <D.4676>;
  <D.4675>:
  D.4665 = (int) c;
  monoeg_g_string_append_c (str, D.4665);
  <D.4676>:
  <D.4666>:
  escaped = 0;
  goto <D.4677>;
  <D.4652>:
  if (quote_char != 0) goto <D.4678>; else goto <D.4679>;
  <D.4678>:
  if (c == quote_char) goto <D.4680>; else goto <D.4681>;
  <D.4680>:
  quote_char = 0;
  if (fresh != 0) goto <D.4684>; else goto <D.4685>;
  <D.4684>:
  D.4667 = __ctype_b_loc ();
  D.4668 = *D.4667;
  D.4686 = *ptr;
  D.4687 = (unsigned int) D.4686;
  D.4688 = D.4687 * 2;
  D.4689 = D.4668 + D.4688;
  D.4690 = *D.4689;
  D.4691 = (int) D.4690;
  D.4692 = D.4691 & 8192;
  if (D.4692 != 0) goto <D.4682>; else goto <D.4693>;
  <D.4693>:
  D.4686 = *ptr;
  if (D.4686 == 0) goto <D.4682>; else goto <D.4683>;
  <D.4682>:
  D.4694 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.4694);
  str = monoeg_g_string_new ("");
  <D.4683>:
  <D.4685>:
  goto <D.4695>;
  <D.4681>:
  if (c == 92) goto <D.4696>; else goto <D.4697>;
  <D.4696>:
  escaped = 1;
  goto <D.4698>;
  <D.4697>:
  D.4665 = (int) c;
  monoeg_g_string_append_c (str, D.4665);
  <D.4698>:
  <D.4695>:
  goto <D.4699>;
  <D.4679>:
  D.4667 = __ctype_b_loc ();
  D.4668 = *D.4667;
  D.4669 = (unsigned int) c;
  D.4670 = D.4669 * 2;
  D.4671 = D.4668 + D.4670;
  D.4672 = *D.4671;
  D.4673 = (int) D.4672;
  D.4674 = D.4673 & 8192;
  if (D.4674 != 0) goto <D.4700>; else goto <D.4701>;
  <D.4700>:
  D.4702 = str->len;
  if (D.4702 != 0) goto <D.4703>; else goto <D.4704>;
  <D.4703>:
  D.4705 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.4705);
  str = monoeg_g_string_new ("");
  <D.4704>:
  goto <D.4706>;
  <D.4701>:
  if (c == 92) goto <D.4707>; else goto <D.4708>;
  <D.4707>:
  escaped = 1;
  goto <D.4709>;
  <D.4708>:
  D.4710 = c == 39;
  D.4711 = c == 34;
  D.4712 = D.4710 | D.4711;
  if (D.4712 != 0) goto <D.4713>; else goto <D.4714>;
  <D.4713>:
  D.4702 = str->len;
  D.4715 = D.4702 == 0;
  fresh = (gboolean) D.4715;
  quote_char = c;
  goto <D.4716>;
  <D.4714>:
  D.4665 = (int) c;
  monoeg_g_string_append_c (str, D.4665);
  <D.4716>:
  <D.4709>:
  <D.4706>:
  <D.4699>:
  <D.4677>:
  <D.4582>:
  ptr.0 = ptr;
  ptr = ptr.0 + 1;
  c = *ptr.0;
  if (c != 0) goto <D.4581>; else goto <D.4583>;
  <D.4583>:
  if (escaped != 0) goto <D.4718>; else goto <D.4719>;
  <D.4718>:
  if (error != 0B) goto <D.4720>; else goto <D.4721>;
  <D.4720>:
  D.4722 = monoeg_g_error_new (0B, 0, "Unfinished escape.");
  *error = D.4722;
  <D.4721>:
  monoeg_g_string_free (str, 1);
  D.4723 = -1;
  return D.4723;
  <D.4719>:
  if (quote_char != 0) goto <D.4724>; else goto <D.4725>;
  <D.4724>:
  if (error != 0B) goto <D.4726>; else goto <D.4727>;
  <D.4726>:
  D.4728 = monoeg_g_error_new (0B, 0, "Unfinished quote.");
  *error = D.4728;
  <D.4727>:
  monoeg_g_string_free (str, 1);
  D.4723 = -1;
  return D.4723;
  <D.4725>:
  D.4702 = str->len;
  if (D.4702 != 0) goto <D.4729>; else goto <D.4730>;
  <D.4729>:
  D.4731 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.4731);
  goto <D.4732>;
  <D.4730>:
  monoeg_g_string_free (str, 1);
  <D.4732>:
  monoeg_g_ptr_array_add (array, 0B);
  D.4723 = 0;
  return D.4723;
}


monoeg_g_shell_quote (const gchar * unquoted_string)
{
  char D.4734;
  int D.4737;
  gchar * D.4738;
  struct GString * result;
  const gchar * p;

  result = monoeg_g_string_new ("\'");
  p = unquoted_string;
  goto <D.4599>;
  <D.4598>:
  D.4734 = *p;
  if (D.4734 == 39) goto <D.4735>; else goto <D.4736>;
  <D.4735>:
  monoeg_g_string_append (result, "\'\\\'");
  <D.4736>:
  D.4734 = *p;
  D.4737 = (int) D.4734;
  monoeg_g_string_append_c (result, D.4737);
  p = p + 1;
  <D.4599>:
  D.4734 = *p;
  if (D.4734 != 0) goto <D.4598>; else goto <D.4600>;
  <D.4600>:
  monoeg_g_string_append_c (result, 39);
  D.4738 = monoeg_g_string_free (result, 0);
  return D.4738;
}


monoeg_g_shell_unquote (const gchar * quoted_string, struct GError * * error)
{
  gchar * D.4742;
  char D.4745;
  _Bool D.4746;
  _Bool D.4747;
  _Bool D.4748;
  int D.4755;
  _Bool D.4771;
  _Bool D.4772;
  _Bool D.4773;
  _Bool D.4776;
  _Bool D.4777;
  _Bool D.4778;
  _Bool D.4781;
  _Bool D.4782;
  _Bool D.4783;
  int D.4787;
  struct GString * result;
  const char * p;
  int do_unquote;

  do_unquote = 0;
  if (quoted_string == 0B) goto <D.4740>; else goto <D.4741>;
  <D.4740>:
  D.4742 = 0B;
  return D.4742;
  <D.4741>:
  p = quoted_string;
  goto <D.4610>;
  <D.4609>:
  D.4745 = *p;
  D.4746 = D.4745 == 39;
  D.4745 = *p;
  D.4747 = D.4745 == 34;
  D.4748 = D.4746 | D.4747;
  if (D.4748 != 0) goto <D.4743>; else goto <D.4749>;
  <D.4749>:
  D.4745 = *p;
  if (D.4745 == 92) goto <D.4743>; else goto <D.4744>;
  <D.4743>:
  do_unquote = 1;
  goto <D.4608>;
  <D.4744>:
  p = p + 1;
  <D.4610>:
  D.4745 = *p;
  if (D.4745 != 0) goto <D.4609>; else goto <D.4608>;
  <D.4608>:
  if (do_unquote == 0) goto <D.4750>; else goto <D.4751>;
  <D.4750>:
  D.4742 = monoeg_strdup (quoted_string);
  return D.4742;
  <D.4751>:
  result = monoeg_g_string_new ("");
  p = quoted_string;
  goto <D.4626>;
  <D.4625>:
  D.4745 = *p;
  if (D.4745 == 39) goto <D.4752>; else goto <D.4753>;
  <D.4752>:
  p = p + 1;
  goto <D.4613>;
  <D.4612>:
  D.4745 = *p;
  if (D.4745 == 39) goto <D.4611>; else goto <D.4754>;
  <D.4754>:
  D.4745 = *p;
  D.4755 = (int) D.4745;
  monoeg_g_string_append_c (result, D.4755);
  p = p + 1;
  <D.4613>:
  D.4745 = *p;
  if (D.4745 != 0) goto <D.4612>; else goto <D.4611>;
  <D.4611>:
  D.4745 = *p;
  if (D.4745 == 0) goto <D.4756>; else goto <D.4757>;
  <D.4756>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.4742 = 0B;
  return D.4742;
  <D.4757>:
  goto <D.4758>;
  <D.4753>:
  D.4745 = *p;
  if (D.4745 == 34) goto <D.4759>; else goto <D.4760>;
  <D.4759>:
  p = p + 1;
  goto <D.4622>;
  <D.4621>:
  D.4745 = *p;
  if (D.4745 == 34) goto <D.4614>; else goto <D.4761>;
  <D.4761>:
  D.4745 = *p;
  if (D.4745 == 92) goto <D.4762>; else goto <D.4763>;
  <D.4762>:
  p = p + 1;
  D.4745 = *p;
  if (D.4745 == 0) goto <D.4764>; else goto <D.4765>;
  <D.4764>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.4742 = 0B;
  return D.4742;
  <D.4765>:
  D.4745 = *p;
  D.4755 = (int) D.4745;
  switch (D.4755) <default: <D.4620>, case 34: <D.4616>, case 36: <D.4615>, case 92: <D.4617>, case 96: <D.4618>>
  <D.4615>:
  <D.4616>:
  <D.4617>:
  <D.4618>:
  goto <D.4619>;
  <D.4620>:
  monoeg_g_string_append_c (result, 92);
  goto <D.4619>;
  <D.4619>:
  <D.4763>:
  D.4745 = *p;
  D.4755 = (int) D.4745;
  monoeg_g_string_append_c (result, D.4755);
  p = p + 1;
  <D.4622>:
  D.4745 = *p;
  if (D.4745 != 0) goto <D.4621>; else goto <D.4614>;
  <D.4614>:
  D.4745 = *p;
  if (D.4745 == 0) goto <D.4766>; else goto <D.4767>;
  <D.4766>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.4742 = 0B;
  return D.4742;
  <D.4767>:
  goto <D.4768>;
  <D.4760>:
  D.4745 = *p;
  if (D.4745 == 92) goto <D.4769>; else goto <D.4770>;
  <D.4769>:
  {
    char c;

    p = p + 1;
    c = *p;
    D.4771 = c != 36;
    D.4772 = c != 34;
    D.4773 = D.4771 & D.4772;
    if (D.4773 != 0) goto <D.4774>; else goto <D.4775>;
    <D.4774>:
    D.4776 = c != 92;
    D.4777 = c != 96;
    D.4778 = D.4776 & D.4777;
    if (D.4778 != 0) goto <D.4779>; else goto <D.4780>;
    <D.4779>:
    D.4781 = c != 39;
    D.4782 = c != 0;
    D.4783 = D.4781 & D.4782;
    if (D.4783 != 0) goto <D.4784>; else goto <D.4785>;
    <D.4784>:
    monoeg_g_string_append_c (result, 92);
    <D.4785>:
    <D.4780>:
    <D.4775>:
    if (c == 0) goto <D.4624>; else goto <D.4786>;
    <D.4786>:
    D.4787 = (int) c;
    monoeg_g_string_append_c (result, D.4787);
  }
  goto <D.4788>;
  <D.4770>:
  D.4745 = *p;
  D.4755 = (int) D.4745;
  monoeg_g_string_append_c (result, D.4755);
  <D.4788>:
  <D.4768>:
  <D.4758>:
  p = p + 1;
  <D.4626>:
  D.4745 = *p;
  if (D.4745 != 0) goto <D.4625>; else goto <D.4624>;
  <D.4624>:
  D.4742 = monoeg_g_string_free (result, 0);
  return D.4742;
}


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

  if (str != 0B) goto <D.4791>; else goto <D.4792>;
  <D.4791>:
  D.4793 = __strdup (str);
  return D.4793;
  <D.4792>:
  D.4793 = 0B;
  return D.4793;
}


