Exemple #1
0
void
str_repr_encode_append(GString *escaped_string, const gchar *str, gssize str_len, const gchar *forbidden_chars)
{
  const gchar *apostrophe, *quote;

  if (str_len < 0)
    str_len = strlen(str);

  if (str_len == 0)
    {
      g_string_append_len(escaped_string, "\"\"", 2);
      return;
    }

  apostrophe = memchr(str, '\'', str_len);
  quote = memchr(str, '"', str_len);

  if (!apostrophe && !quote)
    {
      gboolean quoting_needed = FALSE;

      if ((strcspn(str, "\b\f\n\r\t\\ ")) != str_len ||
          (forbidden_chars && strcspn(str, forbidden_chars) != str_len))
        quoting_needed = TRUE;

      if (!quoting_needed)
        {
          g_string_append_len(escaped_string, str, str_len);
          return;
        }
    }

  if (!apostrophe && quote)
    {
      g_string_append_c(escaped_string, '\'');
      append_unsafe_utf8_as_escaped_binary(escaped_string, str, str_len, NULL);
      g_string_append_c(escaped_string, '\'');
    }
  else if (!quote && apostrophe)
    {
      g_string_append_c(escaped_string, '"');
      append_unsafe_utf8_as_escaped_binary(escaped_string, str, str_len, NULL);
      g_string_append_c(escaped_string, '"');
    }
  else
    {
      g_string_append_c(escaped_string, '"');
      append_unsafe_utf8_as_escaped_binary(escaped_string, str, str_len, "\"");
      g_string_append_c(escaped_string, '"');
    }
}
Exemple #2
0
gchar *
convert_unsafe_utf8_to_escaped_binary(const gchar *str, gssize str_len,
                                      const gchar *unsafe_chars)
{
  if (str_len < 0)
    str_len = strlen(str);
  GString *escaped_string = g_string_sized_new(str_len);

  append_unsafe_utf8_as_escaped_binary(escaped_string, str, str_len, unsafe_chars);
  return g_string_free(escaped_string, FALSE);
}