monoeg_g_shell_parse_argv (const gchar * command_line, gint * argcp, gchar * * * argvp, struct GError * * error)
{
  gboolean D.7239;
  struct GError * D.7242;
  int D.7245;
  void * * D.7248;
  unsigned int D.7249;
  unsigned int D.7254;
  int D.7255;
  struct GPtrArray * array;
  gint argc;
  gchar * * argv;

  if (command_line == 0B) goto <D.7237>; else goto <D.7238>;
  <D.7237>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 113, "command_line");
  D.7239 = 0;
  return D.7239;
  <D.7238>:
  if (error != 0B) goto <D.7240>; else goto <D.7241>;
  <D.7240>:
  D.7242 = *error;
  if (D.7242 != 0B) goto <D.7243>; else goto <D.7244>;
  <D.7243>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "gshell.c", 114, "error == NULL || *error == NULL");
  D.7239 = 0;
  return D.7239;
  <D.7244>:
  <D.7241>:
  array = monoeg_g_ptr_array_new ();
  D.7245 = split_cmdline (command_line, array, error);
  if (D.7245 != 0) goto <D.7246>; else goto <D.7247>;
  <D.7246>:
  monoeg_g_ptr_array_add (array, 0B);
  D.7248 = array->pdata;
  monoeg_g_strfreev (D.7248);
  monoeg_g_ptr_array_free (array, 0);
  D.7239 = 0;
  return D.7239;
  <D.7247>:
  D.7249 = array->len;
  argc = (gint) D.7249;
  argv = array->pdata;
  if (argc == 1) goto <D.7250>; else goto <D.7251>;
  <D.7250>:
  monoeg_g_strfreev (argv);
  monoeg_g_ptr_array_free (array, 0);
  D.7239 = 0;
  return D.7239;
  <D.7251>:
  if (argcp != 0B) goto <D.7252>; else goto <D.7253>;
  <D.7252>:
  D.7249 = array->len;
  D.7254 = D.7249 + 4294967295;
  D.7255 = (int) D.7254;
  *argcp = D.7255;
  <D.7253>:
  if (argvp != 0B) goto <D.7256>; else goto <D.7257>;
  <D.7256>:
  *argvp = argv;
  goto <D.7258>;
  <D.7257>:
  monoeg_g_strfreev (argv);
  <D.7258>:
  monoeg_g_ptr_array_free (array, 0);
  D.7239 = 1;
  return D.7239;
}


split_cmdline (const gchar * cmdline, struct GPtrArray * array, struct GError * * error)
{
  _Bool D.7264;
  _Bool D.7265;
  _Bool D.7266;
  _Bool D.7269;
  _Bool D.7270;
  _Bool D.7271;
  const short unsigned int * * D.7275;
  const short unsigned int * D.7276;
  unsigned int D.7277;
  unsigned int D.7278;
  const short unsigned int * D.7279;
  short unsigned int D.7280;
  int D.7281;
  int D.7282;
  char D.7294;
  unsigned int D.7295;
  unsigned int D.7296;
  const short unsigned int * D.7297;
  short unsigned int D.7298;
  int D.7299;
  int D.7300;
  gchar * D.7302;
  unsigned int D.7310;
  gchar * D.7313;
  _Bool D.7318;
  _Bool D.7319;
  _Bool D.7320;
  _Bool D.7323;
  gchar * ptr.0;
  struct GError * D.7330;
  int D.7331;
  struct GError * D.7336;
  gchar * D.7339;
  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.7189>;
  <D.7188>:
  if (escaped != 0) goto <D.7260>; else goto <D.7261>;
  <D.7260>:
  if (quote_char == 34) goto <D.7262>; else goto <D.7263>;
  <D.7262>:
  D.7264 = c != 36;
  D.7265 = c != 96;
  D.7266 = D.7264 & D.7265;
  if (D.7266 != 0) goto <D.7267>; else goto <D.7268>;
  <D.7267>:
  D.7269 = c != 34;
  D.7270 = c != 92;
  D.7271 = D.7269 & D.7270;
  if (D.7271 != 0) goto <D.7272>; else goto <D.7273>;
  <D.7272>:
  monoeg_g_string_append_c (str, 92);
  <D.7273>:
  <D.7268>:
  monoeg_g_string_append_c (str, c);
  goto <D.7274>;
  <D.7263>:
  D.7275 = __ctype_b_loc ();
  D.7276 = *D.7275;
  D.7277 = (unsigned int) c;
  D.7278 = D.7277 * 2;
  D.7279 = D.7276 + D.7278;
  D.7280 = *D.7279;
  D.7281 = (int) D.7280;
  D.7282 = D.7281 & 8192;
  if (D.7282 == 0) goto <D.7283>; else goto <D.7284>;
  <D.7283>:
  monoeg_g_string_append_c (str, c);
  <D.7284>:
  <D.7274>:
  escaped = 0;
  goto <D.7285>;
  <D.7261>:
  if (quote_char != 0) goto <D.7286>; else goto <D.7287>;
  <D.7286>:
  if (c == quote_char) goto <D.7288>; else goto <D.7289>;
  <D.7288>:
  quote_char = 0;
  if (fresh != 0) goto <D.7292>; else goto <D.7293>;
  <D.7292>:
  D.7275 = __ctype_b_loc ();
  D.7276 = *D.7275;
  D.7294 = *ptr;
  D.7295 = (unsigned int) D.7294;
  D.7296 = D.7295 * 2;
  D.7297 = D.7276 + D.7296;
  D.7298 = *D.7297;
  D.7299 = (int) D.7298;
  D.7300 = D.7299 & 8192;
  if (D.7300 != 0) goto <D.7290>; else goto <D.7301>;
  <D.7301>:
  D.7294 = *ptr;
  if (D.7294 == 0) goto <D.7290>; else goto <D.7291>;
  <D.7290>:
  D.7302 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.7302);
  str = monoeg_g_string_new ("");
  <D.7291>:
  <D.7293>:
  goto <D.7303>;
  <D.7289>:
  if (c == 92) goto <D.7304>; else goto <D.7305>;
  <D.7304>:
  escaped = 1;
  goto <D.7306>;
  <D.7305>:
  monoeg_g_string_append_c (str, c);
  <D.7306>:
  <D.7303>:
  goto <D.7307>;
  <D.7287>:
  D.7275 = __ctype_b_loc ();
  D.7276 = *D.7275;
  D.7277 = (unsigned int) c;
  D.7278 = D.7277 * 2;
  D.7279 = D.7276 + D.7278;
  D.7280 = *D.7279;
  D.7281 = (int) D.7280;
  D.7282 = D.7281 & 8192;
  if (D.7282 != 0) goto <D.7308>; else goto <D.7309>;
  <D.7308>:
  D.7310 = str->len;
  if (D.7310 != 0) goto <D.7311>; else goto <D.7312>;
  <D.7311>:
  D.7313 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.7313);
  str = monoeg_g_string_new ("");
  <D.7312>:
  goto <D.7314>;
  <D.7309>:
  if (c == 92) goto <D.7315>; else goto <D.7316>;
  <D.7315>:
  escaped = 1;
  goto <D.7317>;
  <D.7316>:
  D.7318 = c == 39;
  D.7319 = c == 34;
  D.7320 = D.7318 | D.7319;
  if (D.7320 != 0) goto <D.7321>; else goto <D.7322>;
  <D.7321>:
  D.7310 = str->len;
  D.7323 = D.7310 == 0;
  fresh = (gboolean) D.7323;
  quote_char = c;
  goto <D.7324>;
  <D.7322>:
  monoeg_g_string_append_c (str, c);
  <D.7324>:
  <D.7317>:
  <D.7314>:
  <D.7307>:
  <D.7285>:
  <D.7189>:
  ptr.0 = ptr;
  ptr = ptr.0 + 1;
  c = *ptr.0;
  if (c != 0) goto <D.7188>; else goto <D.7190>;
  <D.7190>:
  if (escaped != 0) goto <D.7326>; else goto <D.7327>;
  <D.7326>:
  if (error != 0B) goto <D.7328>; else goto <D.7329>;
  <D.7328>:
  D.7330 = monoeg_g_error_new (0B, 0, "Unfinished escape.");
  *error = D.7330;
  <D.7329>:
  monoeg_g_string_free (str, 1);
  D.7331 = -1;
  return D.7331;
  <D.7327>:
  if (quote_char != 0) goto <D.7332>; else goto <D.7333>;
  <D.7332>:
  if (error != 0B) goto <D.7334>; else goto <D.7335>;
  <D.7334>:
  D.7336 = monoeg_g_error_new (0B, 0, "Unfinished quote.");
  *error = D.7336;
  <D.7335>:
  monoeg_g_string_free (str, 1);
  D.7331 = -1;
  return D.7331;
  <D.7333>:
  D.7310 = str->len;
  if (D.7310 != 0) goto <D.7337>; else goto <D.7338>;
  <D.7337>:
  D.7339 = monoeg_g_string_free (str, 0);
  monoeg_g_ptr_array_add (array, D.7339);
  goto <D.7340>;
  <D.7338>:
  monoeg_g_string_free (str, 1);
  <D.7340>:
  monoeg_g_ptr_array_add (array, 0B);
  D.7331 = 0;
  return D.7331;
}


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

  result = monoeg_g_string_new ("\'");
  p = unquoted_string;
  goto <D.7206>;
  <D.7205>:
  D.7342 = *p;
  if (D.7342 == 39) goto <D.7343>; else goto <D.7344>;
  <D.7343>:
  monoeg_g_string_append (result, "\'\\\'");
  <D.7344>:
  D.7342 = *p;
  monoeg_g_string_append_c (result, D.7342);
  p = p + 1;
  <D.7206>:
  D.7342 = *p;
  if (D.7342 != 0) goto <D.7205>; else goto <D.7207>;
  <D.7207>:
  monoeg_g_string_append_c (result, 39);
  D.7345 = monoeg_g_string_free (result, 0);
  return D.7345;
}


monoeg_g_shell_unquote (const gchar * quoted_string, struct GError * * error)
{
  gchar * D.7349;
  char D.7352;
  _Bool D.7353;
  _Bool D.7354;
  _Bool D.7355;
  int D.7372;
  _Bool D.7378;
  _Bool D.7379;
  _Bool D.7380;
  _Bool D.7383;
  _Bool D.7384;
  _Bool D.7385;
  _Bool D.7388;
  _Bool D.7389;
  _Bool D.7390;
  struct GString * result;
  const char * p;
  int do_unquote;

  do_unquote = 0;
  if (quoted_string == 0B) goto <D.7347>; else goto <D.7348>;
  <D.7347>:
  D.7349 = 0B;
  return D.7349;
  <D.7348>:
  p = quoted_string;
  goto <D.7217>;
  <D.7216>:
  D.7352 = *p;
  D.7353 = D.7352 == 39;
  D.7352 = *p;
  D.7354 = D.7352 == 34;
  D.7355 = D.7353 | D.7354;
  if (D.7355 != 0) goto <D.7350>; else goto <D.7356>;
  <D.7356>:
  D.7352 = *p;
  if (D.7352 == 92) goto <D.7350>; else goto <D.7351>;
  <D.7350>:
  do_unquote = 1;
  goto <D.7215>;
  <D.7351>:
  p = p + 1;
  <D.7217>:
  D.7352 = *p;
  if (D.7352 != 0) goto <D.7216>; else goto <D.7215>;
  <D.7215>:
  if (do_unquote == 0) goto <D.7357>; else goto <D.7358>;
  <D.7357>:
  D.7349 = monoeg_strdup (quoted_string);
  return D.7349;
  <D.7358>:
  result = monoeg_g_string_new ("");
  p = quoted_string;
  goto <D.7233>;
  <D.7232>:
  D.7352 = *p;
  if (D.7352 == 39) goto <D.7359>; else goto <D.7360>;
  <D.7359>:
  p = p + 1;
  goto <D.7220>;
  <D.7219>:
  D.7352 = *p;
  if (D.7352 == 39) goto <D.7218>; else goto <D.7361>;
  <D.7361>:
  D.7352 = *p;
  monoeg_g_string_append_c (result, D.7352);
  p = p + 1;
  <D.7220>:
  D.7352 = *p;
  if (D.7352 != 0) goto <D.7219>; else goto <D.7218>;
  <D.7218>:
  D.7352 = *p;
  if (D.7352 == 0) goto <D.7362>; else goto <D.7363>;
  <D.7362>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.7349 = 0B;
  return D.7349;
  <D.7363>:
  goto <D.7364>;
  <D.7360>:
  D.7352 = *p;
  if (D.7352 == 34) goto <D.7365>; else goto <D.7366>;
  <D.7365>:
  p = p + 1;
  goto <D.7229>;
  <D.7228>:
  D.7352 = *p;
  if (D.7352 == 34) goto <D.7221>; else goto <D.7367>;
  <D.7367>:
  D.7352 = *p;
  if (D.7352 == 92) goto <D.7368>; else goto <D.7369>;
  <D.7368>:
  p = p + 1;
  D.7352 = *p;
  if (D.7352 == 0) goto <D.7370>; else goto <D.7371>;
  <D.7370>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.7349 = 0B;
  return D.7349;
  <D.7371>:
  D.7352 = *p;
  D.7372 = (int) D.7352;
  switch (D.7372) <default: <D.7227>, case 34: <D.7223>, case 36: <D.7222>, case 92: <D.7224>, case 96: <D.7225>>
  <D.7222>:
  <D.7223>:
  <D.7224>:
  <D.7225>:
  goto <D.7226>;
  <D.7227>:
  monoeg_g_string_append_c (result, 92);
  goto <D.7226>;
  <D.7226>:
  <D.7369>:
  D.7352 = *p;
  monoeg_g_string_append_c (result, D.7352);
  p = p + 1;
  <D.7229>:
  D.7352 = *p;
  if (D.7352 != 0) goto <D.7228>; else goto <D.7221>;
  <D.7221>:
  D.7352 = *p;
  if (D.7352 == 0) goto <D.7373>; else goto <D.7374>;
  <D.7373>:
  monoeg_g_set_error (error, 0B, 0, "Open quote");
  D.7349 = 0B;
  return D.7349;
  <D.7374>:
  goto <D.7375>;
  <D.7366>:
  D.7352 = *p;
  if (D.7352 == 92) goto <D.7376>; else goto <D.7377>;
  <D.7376>:
  {
    char c;

    p = p + 1;
    c = *p;
    D.7378 = c != 36;
    D.7379 = c != 34;
    D.7380 = D.7378 & D.7379;
    if (D.7380 != 0) goto <D.7381>; else goto <D.7382>;
    <D.7381>:
    D.7383 = c != 92;
    D.7384 = c != 96;
    D.7385 = D.7383 & D.7384;
    if (D.7385 != 0) goto <D.7386>; else goto <D.7387>;
    <D.7386>:
    D.7388 = c != 39;
    D.7389 = c != 0;
    D.7390 = D.7388 & D.7389;
    if (D.7390 != 0) goto <D.7391>; else goto <D.7392>;
    <D.7391>:
    monoeg_g_string_append_c (result, 92);
    <D.7392>:
    <D.7387>:
    <D.7382>:
    if (c == 0) goto <D.7231>; else goto <D.7393>;
    <D.7393>:
    monoeg_g_string_append_c (result, c);
  }
  goto <D.7394>;
  <D.7377>:
  D.7352 = *p;
  monoeg_g_string_append_c (result, D.7352);
  <D.7394>:
  <D.7375>:
  <D.7364>:
  p = p + 1;
  <D.7233>:
  D.7352 = *p;
  if (D.7352 != 0) goto <D.7232>; else goto <D.7231>;
  <D.7231>:
  D.7349 = monoeg_g_string_free (result, 0);
  return D.7349;
}


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

  if (str != 0B) goto <D.7397>; else goto <D.7398>;
  <D.7397>:
  D.7399 = __strdup (str);
  return D.7399;
  <D.7398>:
  D.7399 = 0B;
  return D.7399;
}


