[Spice-commits] 2 commits - src/channel-main.c src/spice-file-transfer-task.h

Victor Toso de Carvalho victortoso at kemper.freedesktop.org
Mon May 30 09:08:05 UTC 2016


 src/channel-main.c             |  226 ++++++++++++++++++-----------------------
 src/spice-file-transfer-task.h |    1 
 2 files changed, 101 insertions(+), 126 deletions(-)

New commits:
commit e99d4909ee99a5d2acaf477c7a87e757142afa7a
Author: Marc-André Lureau <marcandre.lureau at gmail.com>
Date:   Wed May 25 17:33:03 2016 +0200

    main: remove unneeded gtk-doc comments
    
    They are no longer in the doc, and not really useful anyway
    
    Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>

diff --git a/src/channel-main.c b/src/channel-main.c
index 72bb146..2f29312 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -72,11 +72,6 @@ typedef struct spice_migrate spice_migrate;
  * Since: 0.31
  */
 
-/**
- * SpiceFileTransferTask:
- *
- * The #SpiceFileTransferTask struct is opaque and should not be accessed directly.
- */
 struct _SpiceFileTransferTask
 {
     GObject parent;
@@ -100,12 +95,6 @@ struct _SpiceFileTransferTask
     GError                         *error;
 };
 
-/**
- * SpiceFileTransferTaskClass:
- * @parent_class: Parent class.
- *
- * Class structure for #SpiceFileTransferTask.
- */
 struct _SpiceFileTransferTaskClass
 {
     GObjectClass parent_class;
commit fed7098c21f446d13df4750f60e168ab86537ba7
Author: Marc-André Lureau <marcandre.lureau at gmail.com>
Date:   Wed May 25 17:33:02 2016 +0200

    main: remove SpiceFileTransferTaskPrivate
    
    The struct is already private
    
    Signed-off-by: Marc-André Lureau <marcandre.lureau at gmail.com>

diff --git a/src/channel-main.c b/src/channel-main.c
index dc93168..72bb146 100644
--- a/src/channel-main.c
+++ b/src/channel-main.c
@@ -81,30 +81,6 @@ struct _SpiceFileTransferTask
 {
     GObject parent;
 
-    SpiceFileTransferTaskPrivate *priv;
-};
-
-/**
- * SpiceFileTransferTaskClass:
- * @parent_class: Parent class.
- *
- * Class structure for #SpiceFileTransferTask.
- */
-struct _SpiceFileTransferTaskClass
-{
-    GObjectClass parent_class;
-};
-
-G_DEFINE_TYPE(SpiceFileTransferTask, spice_file_transfer_task, G_TYPE_OBJECT)
-
-#define FILE_TRANSFER_TASK_PRIVATE(o) \
-        (G_TYPE_INSTANCE_GET_PRIVATE((o), SPICE_TYPE_FILE_TRANSFER_TASK, SpiceFileTransferTaskPrivate))
-
-#define FILE_XFER_CHUNK_SIZE (VD_AGENT_MAX_DATA_SIZE * 32)
-struct _SpiceFileTransferTaskPrivate
-
-/* private */
-{
     uint32_t                       id;
     gboolean                       pending;
     GFile                          *file;
@@ -124,6 +100,21 @@ struct _SpiceFileTransferTaskPrivate
     GError                         *error;
 };
 
+/**
+ * SpiceFileTransferTaskClass:
+ * @parent_class: Parent class.
+ *
+ * Class structure for #SpiceFileTransferTask.
+ */
+struct _SpiceFileTransferTaskClass
+{
+    GObjectClass parent_class;
+};
+
+G_DEFINE_TYPE(SpiceFileTransferTask, spice_file_transfer_task, G_TYPE_OBJECT)
+
+#define FILE_XFER_CHUNK_SIZE (VD_AGENT_MAX_DATA_SIZE * 32)
+
 enum {
     PROP_TASK_ID = 1,
     PROP_TASK_CHANNEL,
@@ -1837,23 +1828,23 @@ static void file_xfer_close_cb(GObject      *object,
 
     /* Notify to user that files have been transferred or something error
        happened. */
-    task = g_task_new(self->priv->channel,
-                      self->priv->cancellable,
-                      self->priv->callback,
-                      self->priv->user_data);
+    task = g_task_new(self->channel,
+                      self->cancellable,
+                      self->callback,
+                      self->user_data);
 
-    if (self->priv->error) {
-        g_task_return_error(task, self->priv->error);
+    if (self->error) {
+        g_task_return_error(task, self->error);
     } else {
         g_task_return_boolean(task, TRUE);
         if (spice_util_get_debug()) {
             gint64 now = g_get_monotonic_time();
-            gchar *basename = g_file_get_basename(self->priv->file);
-            double seconds = (double) (now - self->priv->start_time) / G_TIME_SPAN_SECOND;
-            gchar *file_size_str = g_format_size(self->priv->file_size);
-            gchar *transfer_speed_str = g_format_size(self->priv->file_size / seconds);
+            gchar *basename = g_file_get_basename(self->file);
+            double seconds = (double) (now - self->start_time) / G_TIME_SPAN_SECOND;
+            gchar *file_size_str = g_format_size(self->file_size);
+            gchar *transfer_speed_str = g_format_size(self->file_size / seconds);
 
-            g_warn_if_fail(self->priv->read_bytes == self->priv->file_size);
+            g_warn_if_fail(self->read_bytes == self->file_size);
             SPICE_DEBUG("transferred file %s of %s size in %.1f seconds (%s/s)",
                         basename, file_size_str, seconds, transfer_speed_str);
 
@@ -1875,9 +1866,9 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
     SpiceMainChannel *channel = (SpiceMainChannel *)source_object;
     GError *error = NULL;
 
-    self->priv->pending = FALSE;
+    self->pending = FALSE;
     file_xfer_flush_finish(channel, res, &error);
-    if (error || self->priv->error) {
+    if (error || self->error) {
         spice_file_transfer_task_completed(self, error);
         return;
     }
@@ -1886,19 +1877,19 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
         const GTimeSpan interval = 20 * G_TIME_SPAN_SECOND;
         gint64 now = g_get_monotonic_time();
 
-        if (interval < now - self->priv->last_update) {
-            gchar *basename = g_file_get_basename(self->priv->file);
-            self->priv->last_update = now;
+        if (interval < now - self->last_update) {
+            gchar *basename = g_file_get_basename(self->file);
+            self->last_update = now;
             SPICE_DEBUG("transferred %.2f%% of the file %s",
-                        100.0 * self->priv->read_bytes / self->priv->file_size, basename);
+                        100.0 * self->read_bytes / self->file_size, basename);
             g_free(basename);
         }
     }
 
-    if (self->priv->progress_callback) {
+    if (self->progress_callback) {
         goffset read = 0;
         goffset total = 0;
-        SpiceMainChannel *main_channel = self->priv->channel;
+        SpiceMainChannel *main_channel = self->channel;
         GHashTableIter iter;
         gpointer key, value;
 
@@ -1908,11 +1899,11 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
         g_hash_table_iter_init(&iter, main_channel->priv->file_xfer_tasks);
         while (g_hash_table_iter_next(&iter, &key, &value)) {
             SpiceFileTransferTask *t = (SpiceFileTransferTask *)value;
-            read += t->priv->read_bytes;
-            total += t->priv->file_size;
+            read += t->read_bytes;
+            total += t->file_size;
         }
 
-        self->priv->progress_callback(read, total, self->priv->progress_callback_data);
+        self->progress_callback(read, total, self->progress_callback_data);
     }
 
     /* Read more data */
@@ -1922,13 +1913,13 @@ static void file_xfer_data_flushed_cb(GObject *source_object,
 static void file_xfer_queue(SpiceFileTransferTask *self, int data_size)
 {
     VDAgentFileXferDataMessage msg;
-    SpiceMainChannel *channel = SPICE_MAIN_CHANNEL(self->priv->channel);
+    SpiceMainChannel *channel = SPICE_MAIN_CHANNEL(self->channel);
 
-    msg.id = self->priv->id;
+    msg.id = self->id;
     msg.size = data_size;
     agent_msg_queue_many(channel, VD_AGENT_FILE_XFER_DATA,
                          &msg, sizeof(msg),
-                         self->priv->buffer, data_size, NULL);
+                         self->buffer, data_size, NULL);
     spice_channel_wakeup(SPICE_CHANNEL(channel), FALSE);
 }
 
@@ -1938,30 +1929,30 @@ static void file_xfer_read_cb(GObject *source_object,
                               gpointer user_data)
 {
     SpiceFileTransferTask *self = user_data;
-    SpiceMainChannel *channel = self->priv->channel;
+    SpiceMainChannel *channel = self->channel;
     gssize count;
     GError *error = NULL;
 
-    self->priv->pending = FALSE;
-    count = g_input_stream_read_finish(G_INPUT_STREAM(self->priv->file_stream),
+    self->pending = FALSE;
+    count = g_input_stream_read_finish(G_INPUT_STREAM(self->file_stream),
                                        res, &error);
     /* Check for pending earlier errors */
-    if (self->priv->error) {
+    if (self->error) {
         spice_file_transfer_task_completed(self, error);
         return;
     }
 
-    if (count > 0 || self->priv->file_size == 0) {
-        self->priv->read_bytes += count;
+    if (count > 0 || self->file_size == 0) {
+        self->read_bytes += count;
         g_object_notify(G_OBJECT(self), "progress");
         file_xfer_queue(self, count);
         if (count == 0)
             return;
-        file_xfer_flush_async(channel, self->priv->cancellable,
+        file_xfer_flush_async(channel, self->cancellable,
                               file_xfer_data_flushed_cb, self);
-        self->priv->pending = TRUE;
+        self->pending = TRUE;
     } else if (error) {
-        spice_channel_wakeup(SPICE_CHANNEL(self->priv->channel), FALSE);
+        spice_channel_wakeup(SPICE_CHANNEL(self->channel), FALSE);
         spice_file_transfer_task_completed(self, error);
     }
     /* else EOF, do nothing (wait for VD_AGENT_FILE_XFER_STATUS from agent) */
@@ -1970,14 +1961,14 @@ static void file_xfer_read_cb(GObject *source_object,
 /* coroutine context */
 static void file_xfer_continue_read(SpiceFileTransferTask *self)
 {
-    g_input_stream_read_async(G_INPUT_STREAM(self->priv->file_stream),
-                              self->priv->buffer,
+    g_input_stream_read_async(G_INPUT_STREAM(self->file_stream),
+                              self->buffer,
                               FILE_XFER_CHUNK_SIZE,
                               G_PRIORITY_DEFAULT,
-                              self->priv->cancellable,
+                              self->cancellable,
                               file_xfer_read_cb,
                               self);
-    self->priv->pending = TRUE;
+    self->pending = TRUE;
 }
 
 /* coroutine context */
@@ -1991,7 +1982,7 @@ static void spice_file_transfer_task_handle_status(SpiceFileTransferTask *task,
 
     switch (msg->result) {
     case VD_AGENT_FILE_XFER_STATUS_CAN_SEND_DATA:
-        if (task->priv->pending) {
+        if (task->pending) {
             error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
                            "transfer received CAN_SEND_DATA in pending state");
             break;
@@ -2007,7 +1998,7 @@ static void spice_file_transfer_task_handle_status(SpiceFileTransferTask *task,
                             "some errors occurred in the spice agent");
         break;
     case VD_AGENT_FILE_XFER_STATUS_SUCCESS:
-        if (task->priv->pending)
+        if (task->pending)
             error = g_error_new(SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_FAILED,
                                 "transfer received success in pending state");
         break;
@@ -2978,42 +2969,42 @@ static void spice_file_transfer_task_completed(SpiceFileTransferTask *self,
                                                GError *error)
 {
     /* In case of multiple errors we only report the first error */
-    if (self->priv->error)
+    if (self->error)
         g_clear_error(&error);
     if (error) {
-        gchar *path = g_file_get_path(self->priv->file);
+        gchar *path = g_file_get_path(self->file);
         SPICE_DEBUG("File %s xfer failed: %s",
                     path, error->message);
         g_free(path);
-        self->priv->error = error;
+        self->error = error;
     }
 
-    if (self->priv->error) {
+    if (self->error) {
         VDAgentFileXferStatusMessage msg = {
-            .id = self->priv->id,
-            .result = self->priv->error->code == G_IO_ERROR_CANCELLED ?
+            .id = self->id,
+            .result = self->error->code == G_IO_ERROR_CANCELLED ?
                     VD_AGENT_FILE_XFER_STATUS_CANCELLED : VD_AGENT_FILE_XFER_STATUS_ERROR,
         };
-        agent_msg_queue_many(self->priv->channel, VD_AGENT_FILE_XFER_STATUS,
+        agent_msg_queue_many(self->channel, VD_AGENT_FILE_XFER_STATUS,
                              &msg, sizeof(msg), NULL);
     }
 
-    if (self->priv->pending)
+    if (self->pending)
         return;
 
-    if (!self->priv->file_stream) {
+    if (!self->file_stream) {
         file_xfer_close_cb(NULL, NULL, self);
         goto signal;
     }
 
-    g_input_stream_close_async(G_INPUT_STREAM(self->priv->file_stream),
+    g_input_stream_close_async(G_INPUT_STREAM(self->file_stream),
                                G_PRIORITY_DEFAULT,
-                               self->priv->cancellable,
+                               self->cancellable,
                                file_xfer_close_cb,
                                self);
-    self->priv->pending = TRUE;
+    self->pending = TRUE;
 signal:
-    g_signal_emit(self, task_signals[SIGNAL_FINISHED], 0, self->priv->error);
+    g_signal_emit(self, task_signals[SIGNAL_FINISHED], 0, self->error);
 }
 
 
@@ -3029,12 +3020,12 @@ static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer da
     gchar *string;
     SpiceFileTransferTask *self = SPICE_FILE_TRANSFER_TASK(data);
 
-    self->priv->pending = FALSE;
+    self->pending = FALSE;
     info = g_file_query_info_finish(file, res, &error);
-    if (error || self->priv->error)
+    if (error || self->error)
         goto failed;
 
-    self->priv->file_size =
+    self->file_size =
         g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_STANDARD_SIZE);
     g_object_notify(G_OBJECT(self), "progress");
     keyfile = g_key_file_new();
@@ -3044,7 +3035,7 @@ static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer da
     g_key_file_set_string(keyfile, "vdagent-file-xfer", "name", basename);
     g_free(basename);
     /* File size */
-    g_key_file_set_uint64(keyfile, "vdagent-file-xfer", "size", self->priv->file_size);
+    g_key_file_set_uint64(keyfile, "vdagent-file-xfer", "size", self->file_size);
 
     /* Save keyfile content to memory. TODO: more file attributions
        need to be sent to guest */
@@ -3054,12 +3045,12 @@ static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer da
         goto failed;
 
     /* Create file-xfer start message */
-    msg.id = self->priv->id;
-    agent_msg_queue_many(self->priv->channel, VD_AGENT_FILE_XFER_START,
+    msg.id = self->id;
+    agent_msg_queue_many(self->channel, VD_AGENT_FILE_XFER_START,
                          &msg, sizeof(msg),
                          string, data_len + 1, NULL);
     g_free(string);
-    spice_channel_wakeup(SPICE_CHANNEL(self->priv->channel), FALSE);
+    spice_channel_wakeup(SPICE_CHANNEL(self->channel), FALSE);
     return;
 
 failed:
@@ -3072,21 +3063,21 @@ static void file_xfer_read_async_cb(GObject *obj, GAsyncResult *res, gpointer da
     SpiceFileTransferTask *self = SPICE_FILE_TRANSFER_TASK(data);
     GError *error = NULL;
 
-    self->priv->pending = FALSE;
-    self->priv->file_stream = g_file_read_finish(file, res, &error);
-    if (error || self->priv->error) {
+    self->pending = FALSE;
+    self->file_stream = g_file_read_finish(file, res, &error);
+    if (error || self->error) {
         spice_file_transfer_task_completed(self, error);
         return;
     }
 
-    g_file_query_info_async(self->priv->file,
+    g_file_query_info_async(self->file,
                             G_FILE_ATTRIBUTE_STANDARD_SIZE,
                             G_FILE_QUERY_INFO_NONE,
                             G_PRIORITY_DEFAULT,
-                            self->priv->cancellable,
+                            self->cancellable,
                             file_xfer_info_async_cb,
                             self);
-    self->priv->pending = TRUE;
+    self->pending = TRUE;
 }
 
 static SpiceFileTransferTask *spice_file_transfer_task_new(SpiceMainChannel *channel,
@@ -3098,7 +3089,7 @@ static void task_finished(SpiceFileTransferTask *task,
                           gpointer data)
 {
     SpiceMainChannel *channel = SPICE_MAIN_CHANNEL(data);
-    g_hash_table_remove(channel->priv->file_xfer_tasks, GUINT_TO_POINTER(task->priv->id));
+    g_hash_table_remove(channel->priv->file_xfer_tasks, GUINT_TO_POINTER(task->id));
 }
 
 static void file_xfer_send_start_msg_async(SpiceMainChannel *channel,
@@ -3123,16 +3114,15 @@ static void file_xfer_send_start_msg_async(SpiceMainChannel *channel,
             task_cancellable = g_cancellable_new();
 
         task = spice_file_transfer_task_new(channel, files[i], task_cancellable);
-        task->priv->flags = flags;
-        task->priv->progress_callback = progress_callback;
-        task->priv->progress_callback_data = progress_callback_data;
-        task->priv->callback = callback;
-        task->priv->user_data = user_data;
-
-        CHANNEL_DEBUG(channel, "Insert a xfer task:%d to task list",
-                      task->priv->id);
+        task->flags = flags;
+        task->progress_callback = progress_callback;
+        task->progress_callback_data = progress_callback_data;
+        task->callback = callback;
+        task->user_data = user_data;
+
+        CHANNEL_DEBUG(channel, "Insert a xfer task:%d to task list", task->id);
         g_hash_table_insert(c->file_xfer_tasks,
-                            GUINT_TO_POINTER(task->priv->id),
+                            GUINT_TO_POINTER(task->id),
                             task);
         g_signal_connect(task, "finished", G_CALLBACK(task_finished), channel);
         g_signal_emit(channel, signals[SPICE_MAIN_NEW_FILE_TRANSFER], 0, task);
@@ -3142,7 +3132,7 @@ static void file_xfer_send_start_msg_async(SpiceMainChannel *channel,
                           cancellable,
                           file_xfer_read_async_cb,
                           g_object_ref(task));
-        task->priv->pending = TRUE;
+        task->pending = TRUE;
 
         /* if we created a per-task cancellable above, free it */
         if (!cancellable)
@@ -3255,10 +3245,10 @@ spice_file_transfer_task_get_property(GObject *object,
     switch (property_id)
     {
         case PROP_TASK_ID:
-            g_value_set_uint(value, self->priv->id);
+            g_value_set_uint(value, self->id);
             break;
         case PROP_TASK_FILE:
-            g_value_set_object(value, self->priv->file);
+            g_value_set_object(value, self->file);
             break;
         case PROP_TASK_PROGRESS:
             g_value_set_double(value, spice_file_transfer_task_get_progress(self));
@@ -3279,16 +3269,16 @@ spice_file_transfer_task_set_property(GObject *object,
     switch (property_id)
     {
         case PROP_TASK_ID:
-            self->priv->id = g_value_get_uint(value);
+            self->id = g_value_get_uint(value);
             break;
         case PROP_TASK_FILE:
-            self->priv->file = g_value_dup_object(value);
+            self->file = g_value_dup_object(value);
             break;
         case PROP_TASK_CHANNEL:
-            self->priv->channel = g_value_dup_object(value);
+            self->channel = g_value_dup_object(value);
             break;
         case PROP_TASK_CANCELLABLE:
-            self->priv->cancellable = g_value_dup_object(value);
+            self->cancellable = g_value_dup_object(value);
             break;
         default:
             G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
@@ -3300,7 +3290,7 @@ spice_file_transfer_task_dispose(GObject *object)
 {
     SpiceFileTransferTask *self = SPICE_FILE_TRANSFER_TASK(object);
 
-    g_clear_object(&self->priv->file);
+    g_clear_object(&self->file);
 
     G_OBJECT_CLASS(spice_file_transfer_task_parent_class)->dispose(object);
 }
@@ -3310,7 +3300,7 @@ spice_file_transfer_task_finalize(GObject *object)
 {
     SpiceFileTransferTask *self = SPICE_FILE_TRANSFER_TASK(object);
 
-    g_free(self->priv->buffer);
+    g_free(self->buffer);
 
     G_OBJECT_CLASS(spice_file_transfer_task_parent_class)->finalize(object);
 }
@@ -3321,9 +3311,9 @@ spice_file_transfer_task_constructed(GObject *object)
     SpiceFileTransferTask *self = SPICE_FILE_TRANSFER_TASK(object);
 
     if (spice_util_get_debug()) {
-        gchar *basename = g_file_get_basename(self->priv->file);
-        self->priv->start_time = g_get_monotonic_time();
-        self->priv->last_update = self->priv->start_time;
+        gchar *basename = g_file_get_basename(self->file);
+        self->start_time = g_get_monotonic_time();
+        self->last_update = self->start_time;
 
         SPICE_DEBUG("transfer of file %s has started", basename);
         g_free(basename);
@@ -3335,8 +3325,6 @@ spice_file_transfer_task_class_init(SpiceFileTransferTaskClass *klass)
 {
     GObjectClass *object_class = G_OBJECT_CLASS(klass);
 
-    g_type_class_add_private(klass, sizeof(SpiceFileTransferTaskPrivate));
-
     object_class->get_property = spice_file_transfer_task_get_property;
     object_class->set_property = spice_file_transfer_task_set_property;
     object_class->finalize = spice_file_transfer_task_finalize;
@@ -3442,8 +3430,7 @@ spice_file_transfer_task_class_init(SpiceFileTransferTaskClass *klass)
 static void
 spice_file_transfer_task_init(SpiceFileTransferTask *self)
 {
-    self->priv = FILE_TRANSFER_TASK_PRIVATE(self);
-    self->priv->buffer = g_malloc0(FILE_XFER_CHUNK_SIZE);
+    self->buffer = g_malloc0(FILE_XFER_CHUNK_SIZE);
 }
 
 static SpiceFileTransferTask *
@@ -3472,10 +3459,10 @@ spice_file_transfer_task_new(SpiceMainChannel *channel, GFile *file, GCancellabl
  **/
 double spice_file_transfer_task_get_progress(SpiceFileTransferTask *self)
 {
-    if (self->priv->file_size == 0)
+    if (self->file_size == 0)
         return 0.0;
 
-    return (double)self->priv->read_bytes / self->priv->file_size;
+    return (double)self->read_bytes / self->file_size;
 }
 
 /**
@@ -3491,7 +3478,7 @@ double spice_file_transfer_task_get_progress(SpiceFileTransferTask *self)
  **/
 void spice_file_transfer_task_cancel(SpiceFileTransferTask *self)
 {
-    g_cancellable_cancel(self->priv->cancellable);
+    g_cancellable_cancel(self->cancellable);
 }
 
 /**
@@ -3506,5 +3493,5 @@ void spice_file_transfer_task_cancel(SpiceFileTransferTask *self)
  **/
 char* spice_file_transfer_task_get_filename(SpiceFileTransferTask *self)
 {
-    return g_file_get_basename(self->priv->file);
+    return g_file_get_basename(self->file);
 }
diff --git a/src/spice-file-transfer-task.h b/src/spice-file-transfer-task.h
index 389668e..4f179fb 100644
--- a/src/spice-file-transfer-task.h
+++ b/src/spice-file-transfer-task.h
@@ -38,7 +38,6 @@ G_BEGIN_DECLS
 
 typedef struct _SpiceFileTransferTask SpiceFileTransferTask;
 typedef struct _SpiceFileTransferTaskClass SpiceFileTransferTaskClass;
-typedef struct _SpiceFileTransferTaskPrivate SpiceFileTransferTaskPrivate;
 
 GType spice_file_transfer_task_get_type(void) G_GNUC_CONST;
 


More information about the Spice-commits mailing list