monoeg_g_shell_parse_argv (const gchar * command_line, gint * argcp, gchar * * * argvp, struct GError * * error)
{
  gboolean D.5083;
  struct GError * D.5086;
  int D.5089;
  void * * D.5092;
  unsigned int D.5093;
  unsigned int D.5098;
  int D.5099;
  struct GPtrArray * array;
  gint argc;
  gchar * * argv;

  if (command_line == 0B) goto <D.5081>; else goto <D.5082>;
  <D.5081>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 113, "command_line");
  D.5083 = 0;
  return D.5083;
  <D.5082>:
  if (error != 0B) goto <D.5084>; else goto <D.5085>;
  <D.5084>:
  D.5086 = *error;
  if (D.5086 != 0B) goto <D.5087>; else goto <D.5088>;
  <D.5087>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 114, "error == NULL || *error == NULL");
  D.5083 = 0;
  return D.5083;
  <D.5088>:
  <D.5085>:
  array = monoeg_g_ptr_array_new ();
  D.5089 = split_cmdline (command_line, array, error);
  if (D.5089 != 0) goto <D.5090>; else goto <D.5091>;
  <D.5090>:
  monoeg_g_ptr_array_add (array, 0B);
  D.5092 = array->pdata;
  monoeg_g_strfreev (D.5092);
  monoeg_g_ptr_array_free (array, 0);
  D.5083 = 0;
  return D.5083;
  <D.5091>:
  D.5093 = array->len;
  argc = (gint) D.5093;
  argv = array->pdata;
  if (argc == 1) goto <D.5094>; else goto <D.5095>;
  <D.5094>:
  monoeg_g_strfreev (argv);
  monoeg_g_ptr_array_free (array, 0);
  D.5083 = 0;
  return D.5083;
  <D.5095>:
  if (argcp != 0B) goto <D.5096>; else goto <D.5097>;
  <D.5096>:
  D.5093 = array->len;
  D.5098 = D.5093 + 4294967295;
  D.5099 = (int) D.5098;
  *argcp = D.5099;
  <D.5097>:
  if (argvp != 0B) goto <D.5100>; else goto <D.5101>;
  <D.5100>:
  *argvp = argv;
  goto <D.5102>;
  <D.5101>:
  monoeg_g_strfreev (argv);
  <D.5102>:
  monoeg_g_ptr_array_free (array, 0);
  D.5083 = 1;
  return D.5083;
}


split_cmdline (const gchar * cmdline, struct GPtrArray * array, struct GError * * error)
{
  const short unsigned int * * D.5117;
  const short unsigned int * D.5118;
  long unsigned int D.5119;
  long unsigned int D.5120;
  const short unsigned int * D.5121;
  short unsigned int D.5122;
  int D.5123;
  int D.5124;
  char D.5136;
  long unsigned int D.5137;
  long unsigned int D.5138;
  const short unsigned int * D.5139;
  short unsigned int D.5140;
  int D.5141;
  int D.5142;
  gchar * D.5144;
  long unsigned int D.5152;
  gchar * D.5155;
  _Bool D.5164;
  gchar * ptr.0;
  struct GError * D.5170;
  int D.5171;
  struct GError * D.5176;
  gchar * D.5179;
  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.5035>;
  <D.5034>:
  if (escaped != 0) goto <D.5104>; else goto <D.5105>;
  <D.5104>:
  if (quote_char == 34) goto <D.5106>; else goto <D.5107>;
  <D.5106>:
  if (c != 36) goto <D.5108>; else goto <D.5109>;
  <D.5108>:
  if (c != 96) goto <D.5110>; else goto <D.5111>;
  <D.5110>:
  if (c != 34) goto <D.5112>; else goto <D.5113>;
  <D.5112>:
  if (c != 92) goto <D.5114>; else goto <D.5115>;
  <D.5114>:
  monoeg_g_string_append_c (str, 92);
  <D.5115>:
  <D.5113>:
  <D.5111>:
  <D.5109>:
  monoeg_g_string_append_c (str, c);
  goto <D.5116>;
  <D.5107>:
  D.5117 = __ctype_b_loc ();
  D.5118 = *D.5117;
  D.5119 = (long unsigned int) c;
  D.5120 = D.5119 * 2;
  D.5121 = D.5118 + D.5120;
  D.5122 = *D.5121;
  D.5123 = (int) D.5122;
  D.5124 = D.5123 & 32;
  if (D.5124 == 0) goto <D.5125>; else goto <D.5126>;
  <D.5125>:
  monoeg_g_string_append_c (str, c);
  <D.5126>:
  <D.5116>:
  escaped = 0;
  goto <D.5127>;
  <D.5105>:
  if (quote_char != 0) goto <D.5128>; else goto <D.5129>;
  <D.5128>:
  if (c == quote_char) goto <D.5130>; else goto <D.5131>;
  <D.5130>:
  quote_char = 0;
  if (fresh != 0) goto <D.5134>; else goto <D.5135>;
  <D.5134>:
  D.5117 = __ctype_b_loc ();
  D.5118 = *D.5117;
  D.5136 = *ptr;
  D.5137 = (long unsigned int) D.5136;
  D.5138 = D.5137 * 2;
  D.5139 = D.5118 + D.5138;
  D.5140 = *D.5139;
  D.5141 = (int) D.5140;
  D.5142 = D.5141 & 32;
  if (D.5142 != 0) goto <D.5132>; else goto <D.5143>;
  <D.5143>:
  D.5136 = *ptr;
  if (D.5136 == 0) goto <D.5132>; else goto <D.5133>;
  <D.5132>:
  D.5144 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5144);
  str = monoeg_g_string_new ("");
  <D.5133>:
  <D.5135>:
  goto <D.5145>;
  <D.5131>:
  if (c == 92) goto <D.5146>; else goto <D.5147>;
  <D.5146>:
  escaped = 1;
  goto <D.5148>;
  <D.5147>:
  monoeg_g_string_append_c (str, c);
  <D.5148>:
  <D.5145>:
  goto <D.5149>;
  <D.5129>:
  D.5117 = __ctype_b_loc ();
  D.5118 = *D.5117;
  D.5119 = (long unsigned int) c;
  D.5120 = D.5119 * 2;
  D.5121 = D.5118 + D.5120;
  D.5122 = *D.5121;
  D.5123 = (int) D.5122;
  D.5124 = D.5123 & 32;
  if (D.5124 != 0) goto <D.5150>; else goto <D.5151>;
  <D.5150>:
  D.5152 = str->len;
  if (D.5152 != 0) goto <D.5153>; else goto <D.5154>;
  <D.5153>:
  D.5155 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5155);
  str = monoeg_g_string_new ("");
  <D.5154>:
  goto <D.5156>;
  <D.5151>:
  if (c == 92) goto <D.5157>; else goto <D.5158>;
  <D.5157>:
  escaped = 1;
  goto <D.5159>;
  <D.5158>:
  if (c == 39) goto <D.5160>; else goto <D.5163>;
  <D.5163>:
  if (c == 34) goto <D.5160>; else goto <D.5161>;
  <D.5160>:
  D.5152 = str->len;
  D.5164 = D.5152 == 0;
  fresh = (gboolean) D.5164;
  quote_char = c;
  goto <D.5162>;
  <D.5161>:
  monoeg_g_string_append_c (str, c);
  <D.5162>:
  <D.5159>:
  <D.5156>:
  <D.5149>:
  <D.5127>:
  <D.5035>:
  ptr.0 = ptr;
  ptr = ptr.0 + 1;
  c = *ptr.0;
  if (c != 0) goto <D.5034>; else goto <D.5036>;
  <D.5036>:
  if (escaped != 0) goto <D.5166>; else goto <D.5167>;
  <D.5166>:
  if (error != 0B) goto <D.5168>; else goto <D.5169>;
  <D.5168>:
  D.5170 = monoeg_g_error_new (0B, 0, "Unfinished escape.");
  *error = D.5170;
  <D.5169>:
  monoeg_g_string_free (str, 1);
  D.5171 = -1;
  return D.5171;
  <D.5167>:
  if (quote_char != 0) goto <D.5172>; else goto <D.5173>;
  <D.5172>:
  if (error != 0B) goto <D.5174>; else goto <D.5175>;
  <D.5174>:
  D.5176 = monoeg_g_error_new (0B, 0, "Unfinished quote.");
  *error = D.5176;
  <D.5175>:
  monoeg_g_string_free (str, 1);
  D.5171 = -1;
  return D.5171;
  <D.5173>:
  D.5152 = str->len;
  if (D.5152 != 0) goto <D.5177>; else goto <D.5178>;
  <D.5177>:
  D.5179 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5179);
  goto <D.5180>;
  <D.5178>:
  monoeg_g_string_free (str, 1);
  <D.5180>:
  monoeg_g_ptr_array_add (array, 0B);
  D.5171 = 0;
  return D.5171;
}


monoeg_g_shell_quote (const gchar * unquoted_string)
{
  char D.5182;
  gchar * D.5185;
  struct GString * result;
  const gchar * p;

  result = monoeg_g_string_new ("\'");
  p = unquoted_string;
  goto <D.5052>;
  <D.5051>:
  D.5182 = *p;
  if (D.5182 == 39) goto <D.5183>; else goto <D.5184>;
  <D.5183>:
  monoeg_g_string_append (result, "\'\\\'");
  <D.5184>:
  D.5182 = *p;
  monoeg_g_string_append_c (result, D.5182);
  p = p + 1;
  <D.5052>:
  D.5182 = *p;
  if (D.5182 != 0) goto <D.5051>; else goto <D.5053>;
  <D.5053>:
  monoeg_g_string_append_c (result, 39);
  D.5185 = monoeg_g_string_free (result, 0);
  return D.5185;
}


monoeg_g_shell_unquote (const gchar * quoted_string, struct GError * * error)
{
  gchar * D.5189;
  char D.5192;
  int D.5210;
  struct GString * result;
  const char * p;
  int do_unquote;

  do_unquote = 0;
  if (quoted_string == 0B) goto <D.5187>; else goto <D.5188>;
  <D.5187>:
  D.5189 = 0B;
  return D.5189;
  <D.5188>:
  p = quoted_string;
  goto <D.5063>;
  <D.5062>:
  D.5192 = *p;
  if (D.5192 == 39) goto <D.5190>; else goto <D.5193>;
  <D.5193>:
  D.5192 = *p;
  if (D.5192 == 34) goto <D.5190>; else goto <D.5194>;
  <D.5194>:
  D.5192 = *p;
  if (D.5192 == 92) goto <D.5190>; else goto <D.5191>;
  <D.5190>:
  do_unquote = 1;
  goto <D.5061>;
  <D.5191>:
  p = p + 1;
  <D.5063>:
  D.5192 = *p;
  if (D.5192 != 0) goto <D.5062>; else goto <D.5061>;
  <D.5061>:
  if (do_unquote == 0) goto <D.5195>; else goto <D.5196>;
  <D.5195>:
  D.5189 = monoeg_strdup (quoted_string);
  return D.5189;
  <D.5196>:
  result = monoeg_g_string_new ("");
  p = quoted_string;
  goto <D.5079>;
  <D.5078>:
  D.5192 = *p;
  if (D.5192 == 39) goto <D.5197>; else goto <D.5198>;
  <D.5197>:
  p = p + 1;
  goto <D.5066>;
  <D.5065>:
  D.5192 = *p;
  if (D.5192 == 39) goto <D.5064>; else goto <D.5199>;
  <D.5199>:
  D.5192 = *p;
  monoeg_g_string_append_c (result, D.5192);
  p = p + 1;
  <D.5066>:
  D.5192 = *p;
  if (D.5192 != 0) goto <D.5065>; else goto <D.5064>;
  <D.5064>:
  D.5192 = *p;
  if (D.5192 == 0) goto <D.5200>; else goto <D.5201>;
  <D.5200>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5189 = 0B;
  return D.5189;
  <D.5201>:
  goto <D.5202>;
  <D.5198>:
  D.5192 = *p;
  if (D.5192 == 34) goto <D.5203>; else goto <D.5204>;
  <D.5203>:
  p = p + 1;
  goto <D.5075>;
  <D.5074>:
  D.5192 = *p;
  if (D.5192 == 34) goto <D.5067>; else goto <D.5205>;
  <D.5205>:
  D.5192 = *p;
  if (D.5192 == 92) goto <D.5206>; else goto <D.5207>;
  <D.5206>:
  p = p + 1;
  D.5192 = *p;
  if (D.5192 == 0) goto <D.5208>; else goto <D.5209>;
  <D.5208>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5189 = 0B;
  return D.5189;
  <D.5209>:
  D.5192 = *p;
  D.5210 = (int) D.5192;
  switch (D.5210) <default: <D.5073>, case 34: <D.5069>, case 36: <D.5068>, case 92: <D.5070>, case 96: <D.5071>>
  <D.5068>:
  <D.5069>:
  <D.5070>:
  <D.5071>:
  goto <D.5072>;
  <D.5073>:
  monoeg_g_string_append_c (result, 92);
  goto <D.5072>;
  <D.5072>:
  <D.5207>:
  D.5192 = *p;
  monoeg_g_string_append_c (result, D.5192);
  p = p + 1;
  <D.5075>:
  D.5192 = *p;
  if (D.5192 != 0) goto <D.5074>; else goto <D.5067>;
  <D.5067>:
  D.5192 = *p;
  if (D.5192 == 0) goto <D.5211>; else goto <D.5212>;
  <D.5211>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5189 = 0B;
  return D.5189;
  <D.5212>:
  goto <D.5213>;
  <D.5204>:
  D.5192 = *p;
  if (D.5192 == 92) goto <D.5214>; else goto <D.5215>;
  <D.5214>:
  {
    char c;

    p = p + 1;
    c = *p;
    if (c != 36) goto <D.5216>; else goto <D.5217>;
    <D.5216>:
    if (c != 34) goto <D.5218>; else goto <D.5219>;
    <D.5218>:
    if (c != 92) goto <D.5220>; else goto <D.5221>;
    <D.5220>:
    if (c != 96) goto <D.5222>; else goto <D.5223>;
    <D.5222>:
    if (c != 39) goto <D.5224>; else goto <D.5225>;
    <D.5224>:
    if (c != 0) goto <D.5226>; else goto <D.5227>;
    <D.5226>:
    monoeg_g_string_append_c (result, 92);
    <D.5227>:
    <D.5225>:
    <D.5223>:
    <D.5221>:
    <D.5219>:
    <D.5217>:
    if (c == 0) goto <D.5077>; else goto <D.5228>;
    <D.5228>:
    monoeg_g_string_append_c (result, c);
  }
  goto <D.5229>;
  <D.5215>:
  D.5192 = *p;
  monoeg_g_string_append_c (result, D.5192);
  <D.5229>:
  <D.5213>:
  <D.5202>:
  p = p + 1;
  <D.5079>:
  D.5192 = *p;
  if (D.5192 != 0) goto <D.5078>; else goto <D.5077>;
  <D.5077>:
  D.5189 = monoeg_g_string_free (result, 0);
  return D.5189;
}


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

  if (str != 0B) goto <D.5232>; else goto <D.5233>;
  <D.5232>:
  D.5234 = __strdup (str);
  return D.5234;
  <D.5233>:
  D.5234 = 0B;
  return D.5234;
}


