From 77d90fc1bb25022341301f0ca9686b7769715276 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Fri, 24 Oct 2008 17:33:54 +0200 Subject: [PATCH] Save/restore buffer local variables during upgrade --- src/core/wee-upgrade.c | 36 +++++++++++++++++++++++++++++------- src/gui/gui-buffer.c | 28 +++++++++++++--------------- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/core/wee-upgrade.c b/src/core/wee-upgrade.c index c5d05c60f..51ff45ee0 100644 --- a/src/core/wee-upgrade.c +++ b/src/core/wee-upgrade.c @@ -279,13 +279,13 @@ int upgrade_weechat_read_cb (int object_id, struct t_infolist *infolist) { - char *type, *name, *prefix, *group_name, option_name[32], *key; - char *option_key; + char *type, *name, *prefix, *group_name, option_name[64], *key; + char *option_key, *var_name, *option_var; struct t_gui_nick_group *ptr_group; struct t_gui_buffer *ptr_buffer; struct timeval creation_time; void *buf; - int size, key_index, length; + int size, index, length; infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) @@ -338,11 +338,11 @@ upgrade_weechat_read_cb (int object_id, infolist_string (infolist, "highlight_words")); gui_buffer_set_highlight_tags (upgrade_current_buffer, infolist_string (infolist, "highlight_tags")); - key_index = 0; + index = 0; while (1) { snprintf (option_name, sizeof (option_name), - "key_%05d", key_index); + "key_%05d", index); key = infolist_string (infolist, option_name); if (!key) break; @@ -352,13 +352,35 @@ upgrade_weechat_read_cb (int object_id, { snprintf (option_key, length, "key_bind_%s", key); snprintf (option_name, sizeof (option_name), - "key_command_%05d", key_index); + "key_command_%05d", index); gui_buffer_set (upgrade_current_buffer, option_key, infolist_string (infolist, option_name)); free (option_key); } - key_index++; + index++; + } + index = 0; + while (1) + { + snprintf (option_name, sizeof (option_name), + "localvar_name_%05d", index); + var_name = infolist_string (infolist, option_name); + if (!var_name) + break; + length = 32 + strlen (var_name) + 1; + option_var = malloc (length); + if (option_var) + { + snprintf (option_var, length, "localvar_set_%s", var_name); + snprintf (option_name, sizeof (option_name), + "localvar_value_%05d", index); + gui_buffer_set (upgrade_current_buffer, + option_var, + infolist_string (infolist, option_name)); + free (option_var); + } + index++; } } } diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 7d65bb98e..d66f918c4 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -1437,8 +1437,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist, struct t_infolist_item *ptr_item; struct t_gui_key *ptr_key; struct t_gui_buffer_local_var *ptr_local_var; - char option_name[32], *var_name; - int i, length; + char option_name[64]; + int i; if (!infolist || !buffer) return 0; @@ -1494,23 +1494,21 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist, snprintf (option_name, sizeof (option_name), "key_command_%05d", i); if (!infolist_new_var_string (ptr_item, option_name, ptr_key->command)) return 0; + i++; } + i = 0; for (ptr_local_var = buffer->local_variables; ptr_local_var; ptr_local_var = ptr_local_var->next_var) { - length = strlen (ptr_local_var->name) + 16 + 1; - var_name = malloc (length); - if (var_name) - { - snprintf (var_name, length, "localvar_%s", ptr_local_var->name); - if (!infolist_new_var_string (ptr_item, var_name, - ptr_local_var->value)) - { - free (var_name); - return 0; - } - free (var_name); - } + snprintf (option_name, sizeof (option_name), "localvar_name_%05d", i); + if (!infolist_new_var_string (ptr_item, option_name, + ptr_local_var->name)) + return 0; + snprintf (option_name, sizeof (option_name), "localvar_value_%05d", i); + if (!infolist_new_var_string (ptr_item, option_name, + ptr_local_var->value)) + return 0; + i++; } return 1;