* Copyright (C) 2015 Red Hat, Inc.
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
#include "config.h"
#ifdef G_LOG_DOMAIN
#undef G_LOG_DOMAIN
#endif
#define G_LOG_DOMAIN "cockpit-protocol"
#include "cockpitunicode.h"
gboolean
cockpit_unicode_has_incomplete_ending (GBytes *input)
{
const gchar *data;
const gchar *end;
gsize length;
data = g_bytes_get_data (input, &length);
if (g_utf8_validate (data, length, &end))
return FALSE;
do
{
length -= (end - data) + 1;
data = end + 1;
}
while (!g_utf8_validate (data, length, &end));
return length == 0;
}
GBytes *
cockpit_unicode_force_utf8 (GBytes *input)
{
const gchar *data;
const gchar *end;
gsize length;
GString *string;
data = g_bytes_get_data (input, &length);
if (g_utf8_validate (data, length, &end))
return g_bytes_ref (input);
string = g_string_sized_new (length + 16);
do
{
g_string_append_len (string, data, end - data);
g_string_append (string, "\xef\xbf\xbd");
length -= (end - data) + 1;
data = end + 1;
}
while (!g_utf8_validate (data, length, &end));
if (length)
g_string_append_len (string, data, length);
return g_string_free_to_bytes (string);
}