monoeg_g_shell_parse_argv (const gchar * command_line, gint * argcp, gchar * * * argvp, struct GError * * error)
{
  gboolean D.4650;
  struct GError * D.4653;
  int D.4656;
  void * * D.4659;
  unsigned int D.4660;
  unsigned int D.4665;
  int D.4666;
  struct GPtrArray * array;
  gint argc;
  gchar * * argv;

  if (command_line == 0B) goto <D.4648>; else goto <D.4649>;
  <D.4648>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 113, "command_line");
  D.4650 = 0;
  return D.4650;
  <D.4649>:
  if (error != 0B) goto <D.4651>; else goto <D.4652>;
  <D.4651>:
  D.4653 = *error;
  if (D.4653 != 0B) goto <D.4654>; else goto <D.4655>;
  <D.4654>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 114, "error == NULL || *error == NULL");
  D.4650 = 0;
  return D.4650;
  <D.4655>:
  <D.4652>:
  array = monoeg_g_ptr_array_new ();
  D.4656 = split_cmdline (command_line, array, error);
  if (D.4656 != 0) goto <D.4657>; else goto <D.4658>;
  <D.4657>:
  monoeg_g_ptr_array_add (array, 0B);
  D.4659 = array->pdata;
  monoeg_g_strfreev (D.4659);
  monoeg_g_ptr_array_free (array, 0);
  D.4650 = 0;
  return D.4650;
  <D.4658>:
  D.4660 = array->len;
  argc = (gint) D.4660;
  argv = array->pdata;
  if (argc == 1) goto <D.4661>; else goto <D.4662>;
  <D.4661>:
  monoeg_g_strfreev (argv);
  monoeg_g_ptr_array_free (array, 0);
  D.4650 = 0;
  return D.4650;
  <D.4662>:
  if (argcp != 0B) goto <D.4663>; else goto <D.4664>;
  <D.4663>:
  D.4660 = array->len;
  D.4665 = D.4660 + 4294967295;
  D.4666 = (int) D.4665;
  *argcp = D.4666;
  <D.4664>:
  if (argvp != 0B) goto <D.4667>; else goto <D.4668>;
  <D.4667>:
  *argvp = argv;
  goto <D.4669>;
  <D.4668>:
  monoeg_g_strfreev (argv);
  <D.4669>:
  monoeg_g_ptr_array_free (array, 0);
  D.4650 = 1;
  return D.4650;
}


split_cmdline (const gchar * cmdline, struct GPtrArray * array, struct GError * * error)
{
  int D.4683;
  const short unsigned int * * D.4685;
  const short unsigned int * 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;
  char D.4704;
  unsigned int D.4705;
  unsigned int D.4706;
  const short unsigned int * D.4707;
  short unsigned int D.4708;
  int D.4709;
  int D.4710;
  gchar * D.4712;
  unsigned int D.4720;
  gchar * D.4723;
  _Bool D.4732;
  gchar * ptr.0;
  struct GError * D.4738;
  int D.4739;
  struct GError * D.4744;
  gchar * D.4747;
  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.4602>;
  <D.4601>:
  if (escaped != 0) goto <D.4671>; else goto <D.4672>;
  <D.4671>:
  if (quote_char == 34) goto <D.4673>; else goto <D.4674>;
  <D.4673>:
  if (c != 36) goto <D.4675>; else goto <D.4676>;
  <D.4675>:
  if (c != 96) goto <D.4677>; else goto <D.4678>;
  <D.4677>:
  if (c != 34) goto <D.4679>; else goto <D.4680>;
  <D.4679>:
  if (c != 92) goto <D.4681>; else goto <D.4682>;
  <D.4681>:
  monoeg_g_string_append_c (str, 92);
  <D.4682>:
  <D.4680>:
  <D.4678>:
  <D.4676>:
  D.4683 = (int) c;
  monoeg_g_string_append_c (str, D.4683);
  goto <D.4684>;
  <D.4674>:
  D.4685 = __ctype_b_loc ();
  D.4686 = *D.4685;
  D.4687 = (unsigned int) c;
  D.4688 = D.4687 * 2;
  D.4689 = D.4686 + D.4688;
  D.4690 = *D.4689;
  D.4691 = (int) D.4690;
  D.4692 = D.4691 & 8192;
  if (D.4692 == 0) goto <D.4693>; else goto <D.4694>;
  <D.4693>:
  D.4683 = (int) c;
  monoeg_g_string_append_c (str, D.4683);
  <D.4694>:
  <D.4684>:
  escaped = 0;
  goto <D.4695>;
  <D.4672>:
  if (quote_char != 0) goto <D.4696>; else goto <D.4697>;
  <D.4696>:
  if (c == quote_char) goto <D.4698>; else goto <D.4699>;
  <D.4698>:
  quote_char = 0;
  if (fresh != 0) goto <D.4702>; else goto <D.4703>;
  <D.4702>:
  D.4685 = __ctype_b_loc ();
  D.4686 = *D.4685;
  D.4704 = *ptr;
  D.4705 = (unsigned int) D.4704;
  D.4706 = D.4705 * 2;
  D.4707 = D.4686 + D.4706;
  D.4708 = *D.4707;
  D.4709 = (int) D.4708;
  D.4710 = D.4709 & 8192;
  if (D.4710 != 0) goto <D.4700>; else goto <D.4711>;
  <D.4711>:
  D.4704 = *ptr;
  if (D.4704 == 0) goto <D.4700>; else goto <D.4701>;
  <D.4700>:
  D.4712 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.4712);
  str = monoeg_g_string_new ("");
  <D.4701>:
  <D.4703>:
  goto <D.4713>;
  <D.4699>:
  if (c == 92) goto <D.4714>; else goto <D.4715>;
  <D.4714>:
  escaped = 1;
  goto <D.4716>;
  <D.4715>:
  D.4683 = (int) c;
  monoeg_g_string_append_c (str, D.4683);
  <D.4716>:
  <D.4713>:
  goto <D.4717>;
  <D.4697>:
  D.4685 = __ctype_b_loc ();
  D.4686 = *D.4685;
  D.4687 = (unsigned int) c;
  D.4688 = D.4687 * 2;
  D.4689 = D.4686 + D.4688;
  D.4690 = *D.4689;
  D.4691 = (int) D.4690;
  D.4692 = D.4691 & 8192;
  if (D.4692 != 0) goto <D.4718>; else goto <D.4719>;
  <D.4718>:
  D.4720 = str->len;
  if (D.4720 != 0) goto <D.4721>; else goto <D.4722>;
  <D.4721>:
  D.4723 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.4723);
  str = monoeg_g_string_new ("");
  <D.4722>:
  goto <D.4724>;
  <D.4719>:
  if (c == 92) goto <D.4725>; else goto <D.4726>;
  <D.4725>:
  escaped = 1;
  goto <D.4727>;
  <D.4726>:
  if (c == 39) goto <D.4728>; else goto <D.4731>;
  <D.4731>:
  if (c == 34) goto <D.4728>; else goto <D.4729>;
  <D.4728>:
  D.4720 = str->len;
  D.4732 = D.4720 == 0;
  fresh = (gboolean) D.4732;
  quote_char = c;
  goto <D.4730>;
  <D.4729>:
  D.4683 = (int) c;
  monoeg_g_string_append_c (str, D.4683);
  <D.4730>:
  <D.4727>:
  <D.4724>:
  <D.4717>:
  <D.4695>:
  <D.4602>:
  ptr.0 = ptr;
  ptr = ptr.0 + 1;
  c = *ptr.0;
  if (c != 0) goto <D.4601>; else goto <D.4603>;
  <D.4603>:
  if (escaped != 0) goto <D.4734>; else goto <D.4735>;
  <D.4734>:
  if (error != 0B) goto <D.4736>; else goto <D.4737>;
  <D.4736>:
  D.4738 = monoeg_g_error_new (0B, 0, "Unfinished escape.");
  *error = D.4738;
  <D.4737>:
  monoeg_g_string_free (str, 1);
  D.4739 = -1;
  return D.4739;
  <D.4735>:
  if (quote_char != 0) goto <D.4740>; else goto <D.4741>;
  <D.4740>:
  if (error != 0B) goto <D.4742>; else goto <D.4743>;
  <D.4742>:
  D.4744 = monoeg_g_error_new (0B, 0, "Unfinished quote.");
  *error = D.4744;
  <D.4743>:
  monoeg_g_string_free (str, 1);
  D.4739 = -1;
  return D.4739;
  <D.4741>:
  D.4720 = str->len;
  if (D.4720 != 0) goto <D.4745>; else goto <D.4746>;
  <D.4745>:
  D.4747 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.4747);
  goto <D.4748>;
  <D.4746>:
  monoeg_g_string_free (str, 1);
  <D.4748>:
  monoeg_g_ptr_array_add (array, 0B);
  D.4739 = 0;
  return D.4739;
}


monoeg_g_shell_quote (const gchar * unquoted_string)
{
  char D.4750;
  int D.4753;
  gchar * D.4754;
  struct GString * result;
  const gchar * p;

  result = monoeg_g_string_new ("\'");
  p = unquoted_string;
  goto <D.4619>;
  <D.4618>:
  D.4750 = *p;
  if (D.4750 == 39) goto <D.4751>; else goto <D.4752>;
  <D.4751>:
  monoeg_g_string_append (result, "\'\\\'");
  <D.4752>:
  D.4750 = *p;
  D.4753 = (int) D.4750;
  monoeg_g_string_append_c (result, D.4753);
  p = p + 1;
  <D.4619>:
  D.4750 = *p;
  if (D.4750 != 0) goto <D.4618>; else goto <D.4620>;
  <D.4620>:
  monoeg_g_string_append_c (result, 39);
  D.4754 = monoeg_g_string_free (result, 0);
  return D.4754;
}


monoeg_g_shell_unquote (const gchar * quoted_string, struct GError * * error)
{
  gchar * D.4758;
  char D.4761;
  int D.4769;
  int D.4798;
  struct GString * result;
  const char * p;
  int do_unquote;

  do_unquote = 0;
  if (quoted_string == 0B) goto <D.4756>; else goto <D.4757>;
  <D.4756>:
  D.4758 = 0B;
  return D.4758;
  <D.4757>:
  p = quoted_string;
  goto <D.4630>;
  <D.4629>:
  D.4761 = *p;
  if (D.4761 == 39) goto <D.4759>; else goto <D.4762>;
  <D.4762>:
  D.4761 = *p;
  if (D.4761 == 34) goto <D.4759>; else goto <D.4763>;
  <D.4763>:
  D.4761 = *p;
  if (D.4761 == 92) goto <D.4759>; else goto <D.4760>;
  <D.4759>:
  do_unquote = 1;
  goto <D.4628>;
  <D.4760>:
  p = p + 1;
  <D.4630>:
  D.4761 = *p;
  if (D.4761 != 0) goto <D.4629>; else goto <D.4628>;
  <D.4628>:
  if (do_unquote == 0) goto <D.4764>; else goto <D.4765>;
  <D.4764>:
  D.4758 = monoeg_strdup (quoted_string);
  return D.4758;
  <D.4765>:
  result = monoeg_g_string_new ("");
  p = quoted_string;
  goto <D.4646>;
  <D.4645>:
  D.4761 = *p;
  if (D.4761 == 39) goto <D.4766>; else goto <D.4767>;
  <D.4766>:
  p = p + 1;
  goto <D.4633>;
  <D.4632>:
  D.4761 = *p;
  if (D.4761 == 39) goto <D.4631>; else goto <D.4768>;
  <D.4768>:
  D.4761 = *p;
  D.4769 = (int) D.4761;
  monoeg_g_string_append_c (result, D.4769);
  p = p + 1;
  <D.4633>:
  D.4761 = *p;
  if (D.4761 != 0) goto <D.4632>; else goto <D.4631>;
  <D.4631>:
  D.4761 = *p;
  if (D.4761 == 0) goto <D.4770>; else goto <D.4771>;
  <D.4770>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.4758 = 0B;
  return D.4758;
  <D.4771>:
  goto <D.4772>;
  <D.4767>:
  D.4761 = *p;
  if (D.4761 == 34) goto <D.4773>; else goto <D.4774>;
  <D.4773>:
  p = p + 1;
  goto <D.4642>;
  <D.4641>:
  D.4761 = *p;
  if (D.4761 == 34) goto <D.4634>; else goto <D.4775>;
  <D.4775>:
  D.4761 = *p;
  if (D.4761 == 92) goto <D.4776>; else goto <D.4777>;
  <D.4776>:
  p = p + 1;
  D.4761 = *p;
  if (D.4761 == 0) goto <D.4778>; else goto <D.4779>;
  <D.4778>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.4758 = 0B;
  return D.4758;
  <D.4779>:
  D.4761 = *p;
  D.4769 = (int) D.4761;
  switch (D.4769) <default: <D.4640>, case 34: <D.4636>, case 36: <D.4635>, case 92: <D.4637>, case 96: <D.4638>>
  <D.4635>:
  <D.4636>:
  <D.4637>:
  <D.4638>:
  goto <D.4639>;
  <D.4640>:
  monoeg_g_string_append_c (result, 92);
  goto <D.4639>;
  <D.4639>:
  <D.4777>:
  D.4761 = *p;
  D.4769 = (int) D.4761;
  monoeg_g_string_append_c (result, D.4769);
  p = p + 1;
  <D.4642>:
  D.4761 = *p;
  if (D.4761 != 0) goto <D.4641>; else goto <D.4634>;
  <D.4634>:
  D.4761 = *p;
  if (D.4761 == 0) goto <D.4780>; else goto <D.4781>;
  <D.4780>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.4758 = 0B;
  return D.4758;
  <D.4781>:
  goto <D.4782>;
  <D.4774>:
  D.4761 = *p;
  if (D.4761 == 92) goto <D.4783>; else goto <D.4784>;
  <D.4783>:
  {
    char c;

    p = p + 1;
    c = *p;
    if (c != 36) goto <D.4785>; else goto <D.4786>;
    <D.4785>:
    if (c != 34) goto <D.4787>; else goto <D.4788>;
    <D.4787>:
    if (c != 92) goto <D.4789>; else goto <D.4790>;
    <D.4789>:
    if (c != 96) goto <D.4791>; else goto <D.4792>;
    <D.4791>:
    if (c != 39) goto <D.4793>; else goto <D.4794>;
    <D.4793>:
    if (c != 0) goto <D.4795>; else goto <D.4796>;
    <D.4795>:
    monoeg_g_string_append_c (result, 92);
    <D.4796>:
    <D.4794>:
    <D.4792>:
    <D.4790>:
    <D.4788>:
    <D.4786>:
    if (c == 0) goto <D.4644>; else goto <D.4797>;
    <D.4797>:
    D.4798 = (int) c;
    monoeg_g_string_append_c (result, D.4798);
  }
  goto <D.4799>;
  <D.4784>:
  D.4761 = *p;
  D.4769 = (int) D.4761;
  monoeg_g_string_append_c (result, D.4769);
  <D.4799>:
  <D.4782>:
  <D.4772>:
  p = p + 1;
  <D.4646>:
  D.4761 = *p;
  if (D.4761 != 0) goto <D.4645>; else goto <D.4644>;
  <D.4644>:
  D.4758 = monoeg_g_string_free (result, 0);
  return D.4758;
}


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

  if (str != 0B) goto <D.4802>; else goto <D.4803>;
  <D.4802>:
  D.4804 = __strdup (str);
  return D.4804;
  <D.4803>:
  D.4804 = 0B;
  return D.4804;
}


