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:
+29
-7
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user