monoeg_g_shell_parse_argv (const gchar * command_line, gint * argcp, gchar * * * argvp, struct GError * * error)
{
  gboolean D.4980;
  struct GError * D.4983;
  int D.4986;
  void * * D.4989;
  unsigned int D.4990;
  unsigned int D.4995;
  int D.4996;
  struct GPtrArray * array;
  gint argc;
  gchar * * argv;

  if (command_line == 0B) goto <D.4978>; else goto <D.4979>;
  <D.4978>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 113, "command_line");
  D.4980 = 0;
  return D.4980;
  <D.4979>:
  if (error != 0B) goto <D.4981>; else goto <D.4982>;
  <D.4981>:
  D.4983 = *error;
  if (D.4983 != 0B) goto <D.4984>; else goto <D.4985>;
  <D.4984>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 114, "error == NULL || *error == NULL");
  D.4980 = 0;
  return D.4980;
  <D.4985>:
  <D.4982>:
  array = monoeg_g_ptr_array_new ();
  D.4986 = split_cmdline (command_line, array, error);
  if (D.4986 != 0) goto <D.4987>; else goto <D.4988>;
  <D.4987>:
  monoeg_g_ptr_array_add (array, 0B);
  D.4989 = array->pdata;
  monoeg_g_strfreev (D.4989);
  monoeg_g_ptr_array_free (array, 0);
  D.4980 = 0;
  return D.4980;
  <D.4988>:
  D.4990 = array->len;
  argc = (gint) D.4990;
  argv = array->pdata;
  if (argc == 1) goto <D.4991>; else goto <D.4992>;
  <D.4991>:
  monoeg_g_strfreev (argv);
  monoeg_g_ptr_array_free (array, 0);
  D.4980 = 0;
  return D.4980;
  <D.4992>:
  if (argcp != 0B) goto <D.4993>; else goto <D.4994>;
  <D.4993>:
  D.4990 = array->len;
  D.4995 = D.4990 + 4294967295;
  D.4996 = (int) D.4995;
  *argcp = D.4996;
  <D.4994>:
  if (argvp != 0B) goto <D.4997>; else goto <D.4998>;
  <D.4997>:
  *argvp = argv;
  goto <D.4999>;
  <D.4998>:
  monoeg_g_strfreev (argv);
  <D.4999>:
  monoeg_g_ptr_array_free (array, 0);
  D.4980 = 1;
  return D.4980;
}


split_cmdline (const gchar * cmdline, struct GPtrArray * array, struct GError * * error)
{
  _Bool D.5005;
  _Bool D.5006;
  _Bool D.5007;
  _Bool D.5010;
  _Bool D.5011;
  _Bool D.5012;
  int D.5015;
  const short unsigned int * * D.5017;
  const short unsigned int * D.5018;
  long unsigned int D.5019;
  long unsigned int D.5020;
  const short unsigned int * D.5021;
  short unsigned int D.5022;
  int D.5023;
  int D.5024;
  char D.5036;
  long unsigned int D.5037;
  long unsigned int D.5038;
  const short unsigned int * D.5039;
  short unsigned int D.5040;
  int D.5041;
  int D.5042;
  gchar * D.5044;
  long unsigned int D.5052;
  gchar * D.5055;
  _Bool D.5060;
  _Bool D.5061;
  _Bool D.5062;
  _Bool D.5065;
  gchar * ptr.0;
  struct GError * D.5072;
  int D.5073;
  struct GError * D.5078;
  gchar * D.5081;
  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.4932>;
  <D.4931>:
  if (escaped != 0) goto <D.5001>; else goto <D.5002>;
  <D.5001>:
  if (quote_char == 34) goto <D.5003>; else goto <D.5004>;
  <D.5003>:
  D.5005 = c != 36;
  D.5006 = c != 96;
  D.5007 = D.5005 & D.5006;
  if (D.5007 != 0) goto <D.5008>; else goto <D.5009>;
  <D.5008>:
  D.5010 = c != 34;
  D.5011 = c != 92;
  D.5012 = D.5010 & D.5011;
  if (D.5012 != 0) goto <D.5013>; else goto <D.5014>;
  <D.5013>:
  monoeg_g_string_append_c (str, 92);
  <D.5014>:
  <D.5009>:
  D.5015 = (int) c;
  monoeg_g_string_append_c (str, D.5015);
  goto <D.5016>;
  <D.5004>:
  D.5017 = __ctype_b_loc ();
  D.5018 = *D.5017;
  D.5019 = (long unsigned int) c;
  D.5020 = D.5019 * 2;
  D.5021 = D.5018 + D.5020;
  D.5022 = *D.5021;
  D.5023 = (int) D.5022;
  D.5024 = D.5023 & 8192;
  if (D.5024 == 0) goto <D.5025>; else goto <D.5026>;
  <D.5025>:
  D.5015 = (int) c;
  monoeg_g_string_append_c (str, D.5015);
  <D.5026>:
  <D.5016>:
  escaped = 0;
  goto <D.5027>;
  <D.5002>:
  if (quote_char != 0) goto <D.5028>; else goto <D.5029>;
  <D.5028>:
  if (c == quote_char) goto <D.5030>; else goto <D.5031>;
  <D.5030>:
  quote_char = 0;
  if (fresh != 0) goto <D.5034>; else goto <D.5035>;
  <D.5034>:
  D.5017 = __ctype_b_loc ();
  D.5018 = *D.5017;
  D.5036 = *ptr;
  D.5037 = (long unsigned int) D.5036;
  D.5038 = D.5037 * 2;
  D.5039 = D.5018 + D.5038;
  D.5040 = *D.5039;
  D.5041 = (int) D.5040;
  D.5042 = D.5041 & 8192;
  if (D.5042 != 0) goto <D.5032>; else goto <D.5043>;
  <D.5043>:
  D.5036 = *ptr;
  if (D.5036 == 0) goto <D.5032>; else goto <D.5033>;
  <D.5032>:
  D.5044 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5044);
  str = monoeg_g_string_new ("");
  <D.5033>:
  <D.5035>:
  goto <D.5045>;
  <D.5031>:
  if (c == 92) goto <D.5046>; else goto <D.5047>;
  <D.5046>:
  escaped = 1;
  goto <D.5048>;
  <D.5047>:
  D.5015 = (int) c;
  monoeg_g_string_append_c (str, D.5015);
  <D.5048>:
  <D.5045>:
  goto <D.5049>;
  <D.5029>:
  D.5017 = __ctype_b_loc ();
  D.5018 = *D.5017;
  D.5019 = (long unsigned int) c;
  D.5020 = D.5019 * 2;
  D.5021 = D.5018 + D.5020;
  D.5022 = *D.5021;
  D.5023 = (int) D.5022;
  D.5024 = D.5023 & 8192;
  if (D.5024 != 0) goto <D.5050>; else goto <D.5051>;
  <D.5050>:
  D.5052 = str->len;
  if (D.5052 != 0) goto <D.5053>; else goto <D.5054>;
  <D.5053>:
  D.5055 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5055);
  str = monoeg_g_string_new ("");
  <D.5054>:
  goto <D.5056>;
  <D.5051>:
  if (c == 92) goto <D.5057>; else goto <D.5058>;
  <D.5057>:
  escaped = 1;
  goto <D.5059>;
  <D.5058>:
  D.5060 = c == 39;
  D.5061 = c == 34;
  D.5062 = D.5060 | D.5061;
  if (D.5062 != 0) goto <D.5063>; else goto <D.5064>;
  <D.5063>:
  D.5052 = str->len;
  D.5065 = D.5052 == 0;
  fresh = (gboolean) D.5065;
  quote_char = c;
  goto <D.5066>;
  <D.5064>:
  D.5015 = (int) c;
  monoeg_g_string_append_c (str, D.5015);
  <D.5066>:
  <D.5059>:
  <D.5056>:
  <D.5049>:
  <D.5027>:
  <D.4932>:
  ptr.0 = ptr;
  ptr = ptr.0 + 1;
  c = *ptr.0;
  if (c != 0) goto <D.4931>; else goto <D.4933>;
  <D.4933>:
  if (escaped != 0) goto <D.5068>; else goto <D.5069>;
  <D.5068>:
  if (error != 0B) goto <D.5070>; else goto <D.5071>;
  <D.5070>:
  D.5072 = monoeg_g_error_new (0B, 0, "Unfinished escape.");
  *error = D.5072;
  <D.5071>:
  monoeg_g_string_free (str, 1);
  D.5073 = -1;
  return D.5073;
  <D.5069>:
  if (quote_char != 0) goto <D.5074>; else goto <D.5075>;
  <D.5074>:
  if (error != 0B) goto <D.5076>; else goto <D.5077>;
  <D.5076>:
  D.5078 = monoeg_g_error_new (0B, 0, "Unfinished quote.");
  *error = D.5078;
  <D.5077>:
  monoeg_g_string_free (str, 1);
  D.5073 = -1;
  return D.5073;
  <D.5075>:
  D.5052 = str->len;
  if (D.5052 != 0) goto <D.5079>; else goto <D.5080>;
  <D.5079>:
  D.5081 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5081);
  goto <D.5082>;
  <D.5080>:
  monoeg_g_string_free (str, 1);
  <D.5082>:
  monoeg_g_ptr_array_add (array, 0B);
  D.5073 = 0;
  return D.5073;
}


monoeg_g_shell_quote (const gchar * unquoted_string)
{
  char D.5084;
  int D.5087;
  gchar * D.5088;
  struct GString * result;
  const gchar * p;

  result = monoeg_g_string_new ("\'");
  p = unquoted_string;
  goto <D.4949>;
  <D.4948>:
  D.5084 = *p;
  if (D.5084 == 39) goto <D.5085>; else goto <D.5086>;
  <D.5085>:
  monoeg_g_string_append (result, "\'\\\'");
  <D.5086>:
  D.5084 = *p;
  D.5087 = (int) D.5084;
  monoeg_g_string_append_c (result, D.5087);
  p = p + 1;
  <D.4949>:
  D.5084 = *p;
  if (D.5084 != 0) goto <D.4948>; else goto <D.4950>;
  <D.4950>:
  monoeg_g_string_append_c (result, 39);
  D.5088 = monoeg_g_string_free (result, 0);
  return D.5088;
}


monoeg_g_shell_unquote (const gchar * quoted_string, struct GError * * error)
{
  gchar * D.5092;
  char D.5095;
  _Bool D.5096;
  _Bool D.5097;
  _Bool D.5098;
  int D.5105;
  _Bool D.5121;
  _Bool D.5122;
  _Bool D.5123;
  _Bool D.5126;
  _Bool D.5127;
  _Bool D.5128;
  _Bool D.5131;
  _Bool D.5132;
  _Bool D.5133;
  int D.5137;
  struct GString * result;
  const char * p;
  int do_unquote;

  do_unquote = 0;
  if (quoted_string == 0B) goto <D.5090>; else goto <D.5091>;
  <D.5090>:
  D.5092 = 0B;
  return D.5092;
  <D.5091>:
  p = quoted_string;
  goto <D.4960>;
  <D.4959>:
  D.5095 = *p;
  D.5096 = D.5095 == 39;
  D.5095 = *p;
  D.5097 = D.5095 == 34;
  D.5098 = D.5096 | D.5097;
  if (D.5098 != 0) goto <D.5093>; else goto <D.5099>;
  <D.5099>:
  D.5095 = *p;
  if (D.5095 == 92) goto <D.5093>; else goto <D.5094>;
  <D.5093>:
  do_unquote = 1;
  goto <D.4958>;
  <D.5094>:
  p = p + 1;
  <D.4960>:
  D.5095 = *p;
  if (D.5095 != 0) goto <D.4959>; else goto <D.4958>;
  <D.4958>:
  if (do_unquote == 0) goto <D.5100>; else goto <D.5101>;
  <D.5100>:
  D.5092 = monoeg_strdup (quoted_string);
  return D.5092;
  <D.5101>:
  result = monoeg_g_string_new ("");
  p = quoted_string;
  goto <D.4976>;
  <D.4975>:
  D.5095 = *p;
  if (D.5095 == 39) goto <D.5102>; else goto <D.5103>;
  <D.5102>:
  p = p + 1;
  goto <D.4963>;
  <D.4962>:
  D.5095 = *p;
  if (D.5095 == 39) goto <D.4961>; else goto <D.5104>;
  <D.5104>:
  D.5095 = *p;
  D.5105 = (int) D.5095;
  monoeg_g_string_append_c (result, D.5105);
  p = p + 1;
  <D.4963>:
  D.5095 = *p;
  if (D.5095 != 0) goto <D.4962>; else goto <D.4961>;
  <D.4961>:
  D.5095 = *p;
  if (D.5095 == 0) goto <D.5106>; else goto <D.5107>;
  <D.5106>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5092 = 0B;
  return D.5092;
  <D.5107>:
  goto <D.5108>;
  <D.5103>:
  D.5095 = *p;
  if (D.5095 == 34) goto <D.5109>; else goto <D.5110>;
  <D.5109>:
  p = p + 1;
  goto <D.4972>;
  <D.4971>:
  D.5095 = *p;
  if (D.5095 == 34) goto <D.4964>; else goto <D.5111>;
  <D.5111>:
  D.5095 = *p;
  if (D.5095 == 92) goto <D.5112>; else goto <D.5113>;
  <D.5112>:
  p = p + 1;
  D.5095 = *p;
  if (D.5095 == 0) goto <D.5114>; else goto <D.5115>;
  <D.5114>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5092 = 0B;
  return D.5092;
  <D.5115>:
  D.5095 = *p;
  D.5105 = (int) D.5095;
  switch (D.5105) <default: <D.4970>, case 34: <D.4966>, case 36: <D.4965>, case 92: <D.4967>, case 96: <D.4968>>
  <D.4965>:
  <D.4966>:
  <D.4967>:
  <D.4968>:
  goto <D.4969>;
  <D.4970>:
  monoeg_g_string_append_c (result, 92);
  goto <D.4969>;
  <D.4969>:
  <D.5113>:
  D.5095 = *p;
  D.5105 = (int) D.5095;
  monoeg_g_string_append_c (result, D.5105);
  p = p + 1;
  <D.4972>:
  D.5095 = *p;
  if (D.5095 != 0) goto <D.4971>; else goto <D.4964>;
  <D.4964>:
  D.5095 = *p;
  if (D.5095 == 0) goto <D.5116>; else goto <D.5117>;
  <D.5116>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5092 = 0B;
  return D.5092;
  <D.5117>:
  goto <D.5118>;
  <D.5110>:
  D.5095 = *p;
  if (D.5095 == 92) goto <D.5119>; else goto <D.5120>;
  <D.5119>:
  {
    char c;

    p = p + 1;
    c = *p;
    D.5121 = c != 36;
    D.5122 = c != 34;
    D.5123 = D.5121 & D.5122;
    if (D.5123 != 0) goto <D.5124>; else goto <D.5125>;
    <D.5124>:
    D.5126 = c != 92;
    D.5127 = c != 96;
    D.5128 = D.5126 & D.5127;
    if (D.5128 != 0) goto <D.5129>; else goto <D.5130>;
    <D.5129>:
    D.5131 = c != 39;
    D.5132 = c != 0;
    D.5133 = D.5131 & D.5132;
    if (D.5133 != 0) goto <D.5134>; else goto <D.5135>;
    <D.5134>:
    monoeg_g_string_append_c (result, 92);
    <D.5135>:
    <D.5130>:
    <D.5125>:
    if (c == 0) goto <D.4974>; else goto <D.5136>;
    <D.5136>:
    D.5137 = (int) c;
    monoeg_g_string_append_c (result, D.5137);
  }
  goto <D.5138>;
  <D.5120>:
  D.5095 = *p;
  D.5105 = (int) D.5095;
  monoeg_g_string_append_c (result, D.5105);
  <D.5138>:
  <D.5118>:
  <D.5108>:
  p = p + 1;
  <D.4976>:
  D.5095 = *p;
  if (D.5095 != 0) goto <D.4975>; else goto <D.4974>;
  <D.4974>:
  D.5092 = monoeg_g_string_free (result, 0);
  return D.5092;
}


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

  if (str != 0B) goto <D.5141>; else goto <D.5142>;
  <D.5141>:
  D.5143 = __strdup (str);
  return D.5143;
  <D.5142>:
  D.5143 = 0B;
  return D.5143;
}


