1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-04 16:53:14 +02:00

Save/restore buffer local variables during upgrade

This commit is contained in:
Sebastien Helleu
2008-10-24 17:33:54 +02:00
parent 9e0052f35f
commit 77d90fc1bb
2 changed files with 42 additions and 22 deletions
+29 -7
View File
@@ -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++;
}
}
}
+13 -15
View File
@@ -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;