Fix chanopts not saving if /quit before exit

This is the C fix, unfortunately a proper fix, e.g.
 removing the dependency on session_name all together is a much vaster
 refactor outside the scope of this bugfix.

Closes #1111
This commit is contained in:
leeter 2014-12-10 14:40:42 -05:00 committed by TingPing
parent 10246f121a
commit 6aafc8e51d
3 changed files with 10 additions and 6 deletions

View File

@ -119,7 +119,7 @@ chanopt_command (session *sess, char *tbuf, char *word[], char *word_eol[])
if (!quiet) if (!quiet)
PrintTextf (sess, "\002Network\002: %s \002Channel\002: %s\n", PrintTextf (sess, "\002Network\002: %s \002Channel\002: %s\n",
sess->server->network ? server_get_network (sess->server, TRUE) : _("<none>"), sess->server->network ? server_get_network (sess->server, TRUE) : _("<none>"),
sess->channel[0] ? sess->channel : _("<none>")); sess->session_name[0] ? sess->session_name : _("<none>"));
while (i < sizeof (chanopt) / sizeof (channel_options)) while (i < sizeof (chanopt) / sizeof (channel_options))
{ {
@ -298,7 +298,7 @@ chanopt_load (session *sess)
chanopt_in_memory *co; chanopt_in_memory *co;
char *network; char *network;
if (sess->channel[0] == 0) if (sess->session_name[0] == 0)
return; return;
network = server_get_network (sess->server, FALSE); network = server_get_network (sess->server, FALSE);
@ -311,7 +311,7 @@ chanopt_load (session *sess)
chanopt_load_all (); chanopt_load_all ();
} }
co = chanopt_find (network, sess->channel, FALSE); co = chanopt_find (network, sess->session_name, FALSE);
if (!co) if (!co)
return; return;
@ -334,7 +334,7 @@ chanopt_save (session *sess)
chanopt_in_memory *co; chanopt_in_memory *co;
char *network; char *network;
if (sess->channel[0] == 0) if (sess->session_name[0] == 0)
return; return;
network = server_get_network (sess->server, FALSE); network = server_get_network (sess->server, FALSE);
@ -343,7 +343,7 @@ chanopt_save (session *sess)
/* 2. reconcile sess with what we loaded from disk */ /* 2. reconcile sess with what we loaded from disk */
co = chanopt_find (network, sess->channel, TRUE); co = chanopt_find (network, sess->session_name, TRUE);
i = 0; i = 0;
while (i < sizeof (chanopt) / sizeof (channel_options)) while (i < sizeof (chanopt) / sizeof (channel_options))

View File

@ -480,7 +480,10 @@ session_new (server *serv, char *from, int type, int focus)
sess->lastact_idx = LACT_NONE; sess->lastact_idx = LACT_NONE;
if (from != NULL) if (from != NULL)
safe_strcpy (sess->channel, from, CHANLEN); {
safe_strcpy(sess->channel, from, CHANLEN);
safe_strcpy(sess->session_name, from, CHANLEN);
}
sess_list = g_slist_prepend (sess_list, sess); sess_list = g_slist_prepend (sess_list, sess);

View File

@ -388,6 +388,7 @@ typedef struct session
char channel[CHANLEN]; char channel[CHANLEN];
char waitchannel[CHANLEN]; /* waiting to join channel (/join sent) */ char waitchannel[CHANLEN]; /* waiting to join channel (/join sent) */
char willjoinchannel[CHANLEN]; /* will issue /join for this channel */ char willjoinchannel[CHANLEN]; /* will issue /join for this channel */
char session_name[CHANLEN]; /* the name of the session, should not modified */
char channelkey[64]; /* XXX correct max length? */ char channelkey[64]; /* XXX correct max length? */
int limit; /* channel user limit */ int limit; /* channel user limit */
int logfd; int logfd;