send_message (LightDMGreeter *greeter, guint8 *message, gsize message_length)
{
LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
- GIOStatus status;
+ gchar *data;
+ gsize data_length;
GError *error = NULL;
guint32 stated_length;
return FALSE;
}
- status = g_io_channel_write_chars (priv->to_server_channel, (gchar *) message, message_length, NULL, &error);
- if (error)
- g_warning ("Error writing to daemon: %s", error->message);
- g_clear_error (&error);
- if (status != G_IO_STATUS_NORMAL)
- return FALSE;
+ data = (gchar *) message;
+ data_length = message_length;
+ while (data_length > 0)
+ {
+ GIOStatus status;
+ gsize n_written;
+
+ status = g_io_channel_write_chars (priv->to_server_channel, data, data_length, &n_written, &error);
+ if (error)
+ g_warning ("Error writing to daemon: %s", error->message);
+ g_clear_error (&error);
+ if (status != G_IO_STATUS_NORMAL)
+ return FALSE;
+ data_length -= n_written;
+ data += n_written;
+ }
g_debug ("Wrote %zi bytes to daemon", message_length);
- g_io_channel_flush (priv->to_server_channel, NULL);
+ g_io_channel_flush (priv->to_server_channel, &error);
+ if (error)
+ g_warning ("Failed to flush data to daemon: %s", error->message);
+ g_clear_error (&error);
return TRUE;
}
static void
write_message (Greeter *greeter, guint8 *message, gsize message_length)
{
+ gchar *data;
+ gsize data_length;
GError *error = NULL;
- g_io_channel_write_chars (greeter->priv->to_greeter_channel, (gchar *) message, message_length, NULL, &error);
+ data = (gchar *) message;
+ data_length = message_length;
+ while (data_length > 0)
+ {
+ GIOStatus status;
+ gsize n_written;
+
+ status = g_io_channel_write_chars (greeter->priv->to_greeter_channel, data, data_length, &n_written, &error);
+ if (error)
+ l_warning (greeter, "Error writing to greeter: %s", error->message);
+ g_clear_error (&error);
+ if (status != G_IO_STATUS_NORMAL)
+ return;
+ data_length -= n_written;
+ data += n_written;
+ }
+
+ g_io_channel_flush (greeter->priv->to_greeter_channel, &error);
if (error)
- l_warning (greeter, "Error writing to greeter: %s", error->message);
+ l_warning (greeter, "Failed to flush data to greeter: %s", error->message);
g_clear_error (&error);
- g_io_channel_flush (greeter->priv->to_greeter_channel, NULL);
}
static void