monoeg_g_shell_parse_argv (const gchar * command_line, gint * argcp, gchar * * * argvp, struct GError * * error)
{
  gboolean D.5494;
  struct GError * D.5497;
  int D.5500;
  void * * D.5503;
  unsigned int D.5504;
  unsigned int D.5509;
  int D.5510;
  struct GPtrArray * array;
  gint argc;
  gchar * * argv;

  if (command_line == 0B) goto <D.5492>; else goto <D.5493>;
  <D.5492>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 113, "command_line");
  D.5494 = 0;
  return D.5494;
  <D.5493>:
  if (error != 0B) goto <D.5495>; else goto <D.5496>;
  <D.5495>:
  D.5497 = *error;
  if (D.5497 != 0B) goto <D.5498>; else goto <D.5499>;
  <D.5498>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 114, "error == NULL || *error == NULL");
  D.5494 = 0;
  return D.5494;
  <D.5499>:
  <D.5496>:
  array = monoeg_g_ptr_array_new ();
  D.5500 = split_cmdline (command_line, array, error);
  if (D.5500 != 0) goto <D.5501>; else goto <D.5502>;
  <D.5501>:
  monoeg_g_ptr_array_add (array, 0B);
  D.5503 = array->pdata;
  monoeg_g_strfreev (D.5503);
  monoeg_g_ptr_array_free (array, 0);
  D.5494 = 0;
  return D.5494;
  <D.5502>:
  D.5504 = array->len;
  argc = (gint) D.5504;
  argv = array->pdata;
  if (argc == 1) goto <D.5505>; else goto <D.5506>;
  <D.5505>:
  monoeg_g_strfreev (argv);
  monoeg_g_ptr_array_free (array, 0);
  D.5494 = 0;
  return D.5494;
  <D.5506>:
  if (argcp != 0B) goto <D.5507>; else goto <D.5508>;
  <D.5507>:
  D.5504 = array->len;
  D.5509 = D.5504 + 4294967295;
  D.5510 = (int) D.5509;
  *argcp = D.5510;
  <D.5508>:
  if (argvp != 0B) goto <D.5511>; else goto <D.5512>;
  <D.5511>:
  *argvp = argv;
  goto <D.5513>;
  <D.5512>:
  monoeg_g_strfreev (argv);
  <D.5513>:
  monoeg_g_ptr_array_free (array, 0);
  D.5494 = 1;
  return D.5494;
}


split_cmdline (const gchar * cmdline, struct GPtrArray * array, struct GError * * error)
{
  const short unsigned int * * D.5528;
  const short unsigned int * D.5529;
  long unsigned int D.5530;
  long unsigned int D.5531;
  const short unsigned int * D.5532;
  short unsigned int D.5533;
  int D.5534;
  int D.5535;
  char D.5547;
  long unsigned int D.5548;
  long unsigned int D.5549;
  const short unsigned int * D.5550;
  short unsigned int D.5551;
  int D.5552;
  int D.5553;
  gchar * D.5555;
  long unsigned int D.5563;
  gchar * D.5566;
  _Bool D.5575;
  gchar * ptr.0;
  struct GError * D.5581;
  int D.5582;
  struct GError * D.5587;
  gchar * D.5590;
  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.5446>;
  <D.5445>:
  if (escaped != 0) goto <D.5515>; else goto <D.5516>;
  <D.5515>:
  if (quote_char == 34) goto <D.5517>; else goto <D.5518>;
  <D.5517>:
  if (c != 36) goto <D.5519>; else goto <D.5520>;
  <D.5519>:
  if (c != 96) goto <D.5521>; else goto <D.5522>;
  <D.5521>:
  if (c != 34) goto <D.5523>; else goto <D.5524>;
  <D.5523>:
  if (c != 92) goto <D.5525>; else goto <D.5526>;
  <D.5525>:
  monoeg_g_string_append_c (str, 92);
  <D.5526>:
  <D.5524>:
  <D.5522>:
  <D.5520>:
  monoeg_g_string_append_c (str, c);
  goto <D.5527>;
  <D.5518>:
  D.5528 = __ctype_b_loc ();
  D.5529 = *D.5528;
  D.5530 = (long unsigned int) c;
  D.5531 = D.5530 * 2;
  D.5532 = D.5529 + D.5531;
  D.5533 = *D.5532;
  D.5534 = (int) D.5533;
  D.5535 = D.5534 & 8192;
  if (D.5535 == 0) goto <D.5536>; else goto <D.5537>;
  <D.5536>:
  monoeg_g_string_append_c (str, c);
  <D.5537>:
  <D.5527>:
  escaped = 0;
  goto <D.5538>;
  <D.5516>:
  if (quote_char != 0) goto <D.5539>; else goto <D.5540>;
  <D.5539>:
  if (c == quote_char) goto <D.5541>; else goto <D.5542>;
  <D.5541>:
  quote_char = 0;
  if (fresh != 0) goto <D.5545>; else goto <D.5546>;
  <D.5545>:
  D.5528 = __ctype_b_loc ();
  D.5529 = *D.5528;
  D.5547 = *ptr;
  D.5548 = (long unsigned int) D.5547;
  D.5549 = D.5548 * 2;
  D.5550 = D.5529 + D.5549;
  D.5551 = *D.5550;
  D.5552 = (int) D.5551;
  D.5553 = D.5552 & 8192;
  if (D.5553 != 0) goto <D.5543>; else goto <D.5554>;
  <D.5554>:
  D.5547 = *ptr;
  if (D.5547 == 0) goto <D.5543>; else goto <D.5544>;
  <D.5543>:
  D.5555 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5555);
  str = monoeg_g_string_new ("");
  <D.5544>:
  <D.5546>:
  goto <D.5556>;
  <D.5542>:
  if (c == 92) goto <D.5557>; else goto <D.5558>;
  <D.5557>:
  escaped = 1;
  goto <D.5559>;
  <D.5558>:
  monoeg_g_string_append_c (str, c);
  <D.5559>:
  <D.5556>:
  goto <D.5560>;
  <D.5540>:
  D.5528 = __ctype_b_loc ();
  D.5529 = *D.5528;
  D.5530 = (long unsigned int) c;
  D.5531 = D.5530 * 2;
  D.5532 = D.5529 + D.5531;
  D.5533 = *D.5532;
  D.5534 = (int) D.5533;
  D.5535 = D.5534 & 8192;
  if (D.5535 != 0) goto <D.5561>; else goto <D.5562>;
  <D.5561>:
  D.5563 = str->len;
  if (D.5563 != 0) goto <D.5564>; else goto <D.5565>;
  <D.5564>:
  D.5566 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5566);
  str = monoeg_g_string_new ("");
  <D.5565>:
  goto <D.5567>;
  <D.5562>:
  if (c == 92) goto <D.5568>; else goto <D.5569>;
  <D.5568>:
  escaped = 1;
  goto <D.5570>;
  <D.5569>:
  if (c == 39) goto <D.5571>; else goto <D.5574>;
  <D.5574>:
  if (c == 34) goto <D.5571>; else goto <D.5572>;
  <D.5571>:
  D.5563 = str->len;
  D.5575 = D.5563 == 0;
  fresh = (gboolean) D.5575;
  quote_char = c;
  goto <D.5573>;
  <D.5572>:
  monoeg_g_string_append_c (str, c);
  <D.5573>:
  <D.5570>:
  <D.5567>:
  <D.5560>:
  <D.5538>:
  <D.5446>:
  ptr.0 = ptr;
  ptr = ptr.0 + 1;
  c = *ptr.0;
  if (c != 0) goto <D.5445>; else goto <D.5447>;
  <D.5447>:
  if (escaped != 0) goto <D.5577>; else goto <D.5578>;
  <D.5577>:
  if (error != 0B) goto <D.5579>; else goto <D.5580>;
  <D.5579>:
  D.5581 = monoeg_g_error_new (0B, 0, "Unfinished escape.");
  *error = D.5581;
  <D.5580>:
  monoeg_g_string_free (str, 1);
  D.5582 = -1;
  return D.5582;
  <D.5578>:
  if (quote_char != 0) goto <D.5583>; else goto <D.5584>;
  <D.5583>:
  if (error != 0B) goto <D.5585>; else goto <D.5586>;
  <D.5585>:
  D.5587 = monoeg_g_error_new (0B, 0, "Unfinished quote.");
  *error = D.5587;
  <D.5586>:
  monoeg_g_string_free (str, 1);
  D.5582 = -1;
  return D.5582;
  <D.5584>:
  D.5563 = str->len;
  if (D.5563 != 0) goto <D.5588>; else goto <D.5589>;
  <D.5588>:
  D.5590 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.5590);
  goto <D.5591>;
  <D.5589>:
  monoeg_g_string_free (str, 1);
  <D.5591>:
  monoeg_g_ptr_array_add (array, 0B);
  D.5582 = 0;
  return D.5582;
}


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

  result = monoeg_g_string_new ("\'");
  p = unquoted_string;
  goto <D.5463>;
  <D.5462>:
  D.5593 = *p;
  if (D.5593 == 39) goto <D.5594>; else goto <D.5595>;
  <D.5594>:
  monoeg_g_string_append (result, "\'\\\'");
  <D.5595>:
  D.5593 = *p;
  monoeg_g_string_append_c (result, D.5593);
  p = p + 1;
  <D.5463>:
  D.5593 = *p;
  if (D.5593 != 0) goto <D.5462>; else goto <D.5464>;
  <D.5464>:
  monoeg_g_string_append_c (result, 39);
  D.5596 = monoeg_g_string_free (result, 0);
  return D.5596;
}


monoeg_g_shell_unquote (const gchar * quoted_string, struct GError * * error)
{
  gchar * D.5600;
  char D.5603;
  int D.5621;
  struct GString * result;
  const char * p;
  int do_unquote;

  do_unquote = 0;
  if (quoted_string == 0B) goto <D.5598>; else goto <D.5599>;
  <D.5598>:
  D.5600 = 0B;
  return D.5600;
  <D.5599>:
  p = quoted_string;
  goto <D.5474>;
  <D.5473>:
  D.5603 = *p;
  if (D.5603 == 39) goto <D.5601>; else goto <D.5604>;
  <D.5604>:
  D.5603 = *p;
  if (D.5603 == 34) goto <D.5601>; else goto <D.5605>;
  <D.5605>:
  D.5603 = *p;
  if (D.5603 == 92) goto <D.5601>; else goto <D.5602>;
  <D.5601>:
  do_unquote = 1;
  goto <D.5472>;
  <D.5602>:
  p = p + 1;
  <D.5474>:
  D.5603 = *p;
  if (D.5603 != 0) goto <D.5473>; else goto <D.5472>;
  <D.5472>:
  if (do_unquote == 0) goto <D.5606>; else goto <D.5607>;
  <D.5606>:
  D.5600 = monoeg_strdup (quoted_string);
  return D.5600;
  <D.5607>:
  result = monoeg_g_string_new ("");
  p = quoted_string;
  goto <D.5490>;
  <D.5489>:
  D.5603 = *p;
  if (D.5603 == 39) goto <D.5608>; else goto <D.5609>;
  <D.5608>:
  p = p + 1;
  goto <D.5477>;
  <D.5476>:
  D.5603 = *p;
  if (D.5603 == 39) goto <D.5475>; else goto <D.5610>;
  <D.5610>:
  D.5603 = *p;
  monoeg_g_string_append_c (result, D.5603);
  p = p + 1;
  <D.5477>:
  D.5603 = *p;
  if (D.5603 != 0) goto <D.5476>; else goto <D.5475>;
  <D.5475>:
  D.5603 = *p;
  if (D.5603 == 0) goto <D.5611>; else goto <D.5612>;
  <D.5611>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5600 = 0B;
  return D.5600;
  <D.5612>:
  goto <D.5613>;
  <D.5609>:
  D.5603 = *p;
  if (D.5603 == 34) goto <D.5614>; else goto <D.5615>;
  <D.5614>:
  p = p + 1;
  goto <D.5486>;
  <D.5485>:
  D.5603 = *p;
  if (D.5603 == 34) goto <D.5478>; else goto <D.5616>;
  <D.5616>:
  D.5603 = *p;
  if (D.5603 == 92) goto <D.5617>; else goto <D.5618>;
  <D.5617>:
  p = p + 1;
  D.5603 = *p;
  if (D.5603 == 0) goto <D.5619>; else goto <D.5620>;
  <D.5619>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5600 = 0B;
  return D.5600;
  <D.5620>:
  D.5603 = *p;
  D.5621 = (int) D.5603;
  switch (D.5621) <default: <D.5484>, case 34: <D.5480>, case 36: <D.5479>, case 92: <D.5481>, case 96: <D.5482>>
  <D.5479>:
  <D.5480>:
  <D.5481>:
  <D.5482>:
  goto <D.5483>;
  <D.5484>:
  monoeg_g_string_append_c (result, 92);
  goto <D.5483>;
  <D.5483>:
  <D.5618>:
  D.5603 = *p;
  monoeg_g_string_append_c (result, D.5603);
  p = p + 1;
  <D.5486>:
  D.5603 = *p;
  if (D.5603 != 0) goto <D.5485>; else goto <D.5478>;
  <D.5478>:
  D.5603 = *p;
  if (D.5603 == 0) goto <D.5622>; else goto <D.5623>;
  <D.5622>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.5600 = 0B;
  return D.5600;
  <D.5623>:
  goto <D.5624>;
  <D.5615>:
  D.5603 = *p;
  if (D.5603 == 92) goto <D.5625>; else goto <D.5626>;
  <D.5625>:
  {
    char c;

    p = p + 1;
    c = *p;
    if (c != 36) goto <D.5627>; else goto <D.5628>;
    <D.5627>:
    if (c != 34) goto <D.5629>; else goto <D.5630>;
    <D.5629>:
    if (c != 92) goto <D.5631>; else goto <D.5632>;
    <D.5631>:
    if (c != 96) goto <D.5633>; else goto <D.5634>;
    <D.5633>:
    if (c != 39) goto <D.5635>; else goto <D.5636>;
    <D.5635>:
    if (c != 0) goto <D.5637>; else goto <D.5638>;
    <D.5637>:
    monoeg_g_string_append_c (result, 92);
    <D.5638>:
    <D.5636>:
    <D.5634>:
    <D.5632>:
    <D.5630>:
    <D.5628>:
    if (c == 0) goto <D.5488>; else goto <D.5639>;
    <D.5639>:
    monoeg_g_string_append_c (result, c);
  }
  goto <D.5640>;
  <D.5626>:
  D.5603 = *p;
  monoeg_g_string_append_c (result, D.5603);
  <D.5640>:
  <D.5624>:
  <D.5613>:
  p = p + 1;
  <D.5490>:
  D.5603 = *p;
  if (D.5603 != 0) goto <D.5489>; else goto <D.5488>;
  <D.5488>:
  D.5600 = monoeg_g_string_free (result, 0);
  return D.5600;
}


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

  if (str != 0B) goto <D.5643>; else goto <D.5644>;
  <D.5643>:
  D.5645 = __strdup (str);
  return D.5645;
  <D.5644>:
  D.5645 = 0B;
  return D.5645;
}


