See here: http://lists.freedesktop.org/archives/spice-devel/2014-August/017180.html
--- gtk/channel-main.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/gtk/channel-main.c b/gtk/channel-main.c index 7a299a4..26dad7f 100644 --- a/gtk/channel-main.c +++ b/gtk/channel-main.c @@ -2656,6 +2656,43 @@ static void file_xfer_completed(SpiceFileXferTask *task, GError *error) task->pending = TRUE; } +/** + * g_string_replace: + * @src: original string + * @old_string: substring you want to replace + * @new_string: string you want to replace with + * + * Replace all @old_string with @new_string in @src. + * + * Returns: %NULL if any of @src/@old_string/@new_string is illegal + **/ +gchar *g_string_replace(const gchar *src, const gchar *old_string, const gchar *new_string) +{ + if (!src || !old_string || !new_string || !g_strcmp0(src, "") || + !g_strcmp0(old_string, "")) + return NULL; + gchar *retstr = NULL; + gchar *srcstr = g_strdup(src); + gchar *ptr = g_strstr_len(srcstr, strlen(srcstr), old_string); + if (ptr != NULL){ + gchar *after = g_string_replace(ptr + strlen(old_string), old_string, new_string); + gchar *before = g_strndup(srcstr, ptr - srcstr); + retstr = g_strconcat(before, new_string, after, NULL); + g_free(after); + g_free(before); + g_free(srcstr); + return retstr; + } + return g_strdup(src); +} + +gchar *g_key_string_replace(const gchar *string, const gchar *group_name) +{ + gchar *old_group_name = g_strconcat("[", group_name, "]", NULL); + gchar *new_group_name = g_strconcat("<", group_name, ">", NULL); + return g_string_replace(string, old_group_name, new_group_name); +} + static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer data) { GFileInfo *info; @@ -2665,7 +2702,7 @@ static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer da gchar *basename = NULL; VDAgentFileXferStartMessage msg; gsize /*msg_size*/ data_len; - gchar *string; + gchar *string, *new_string; SpiceFileXferTask *task = (SpiceFileXferTask *)data; task->pending = FALSE; @@ -2687,6 +2724,9 @@ static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer da /* Save keyfile content to memory. TODO: more file attributions need to be sent to guest */ string = g_key_file_to_data(keyfile, &data_len, &error); + + /* For each group_name do this */ + new_string = g_key_string_replace(string, "vdagent-file-xfer"); g_key_file_free(keyfile); if (error) goto failed; @@ -2695,8 +2735,9 @@ static void file_xfer_info_async_cb(GObject *obj, GAsyncResult *res, gpointer da msg.id = task->id; agent_msg_queue_many(task->channel, VD_AGENT_FILE_XFER_START, &msg, sizeof(msg), - string, data_len + 1, NULL); + new_string, data_len + 1, NULL); g_free(string); + g_free(new_string); spice_channel_wakeup(SPICE_CHANNEL(task->channel), FALSE); return; -- -- QSBDT0RFUiBGUk9NIFJJRVNUIE9GIENUU0VV
_______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel