diff options
author | Marius Halden <marius.h@lden.org> | 2016-04-12 13:23:28 +0200 |
---|---|---|
committer | Marius Halden <marius.h@lden.org> | 2016-05-07 14:31:03 +0200 |
commit | 762067ea952f8b985f3704d5256c73fb7fb9af13 (patch) | |
tree | 0cd969426686bb1049f632b0698f40fa22a72b83 /irc_channel.c | |
parent | 6a75f2c17d647d4890406936f8c2b9a2b56b5a97 (diff) |
Revert "Better handling of set account"
This reverts commit 8ad3c8517ecb1d9ac7cf04236f8634c16b9adde0.
Diffstat (limited to 'irc_channel.c')
-rw-r--r-- | irc_channel.c | 49 |
1 files changed, 37 insertions, 12 deletions
diff --git a/irc_channel.c b/irc_channel.c index 739360de..583b6d20 100644 --- a/irc_channel.c +++ b/irc_channel.c @@ -871,9 +871,9 @@ static char *set_eval_by_account(set_t *set, char *value) struct irc_channel *ic = set->data; struct irc_control_channel *icc = ic->data; account_t *acc; - GSList *accl, *new_acc = NULL; - char **accounts, **account; + struct acclist *accl, *tmp, *new_acc = NULL; + char **accounts, **account; accounts = g_strsplit(value, ",", 0); if (accounts == NULL) { goto fail; @@ -883,14 +883,25 @@ static char *set_eval_by_account(set_t *set, char *value) if (!(acc = account_get(ic->irc->b, *account))) { goto fail; } else { - new_acc = g_slist_append(new_acc, account); + tmp = g_malloc(sizeof(struct account)); + if (tmp == NULL) { + goto fail; + } else { + tmp->acc = acc; + tmp->next = new_acc; + new_acc = tmp; + } } } - accl = icc->account; - g_slist_free(accl); + accl = (struct acclist *)icc->account; + while (accl) { + tmp = accl->next; + g_free(accl); + accl = tmp; + } - icc->account = new_acc; + icc->account = (struct account *)new_acc; if ((icc->type & IRC_CC_TYPE_MASK) == IRC_CC_TYPE_ACCOUNT) { bee_irc_channel_update(ic->irc, ic, NULL); } @@ -900,7 +911,13 @@ static char *set_eval_by_account(set_t *set, char *value) return g_strdup(value); fail: - g_slist_free(new_acc); + accl = new_acc; + while (accl) { + tmp = accl->next; + g_free(accl); + accl = tmp; + } + g_strfreev(accounts); return SET_INVALID; @@ -1027,7 +1044,7 @@ fail: gboolean irc_channel_wants_user(irc_channel_t *ic, irc_user_t *iu) { struct irc_control_channel *icc = ic->data; - GSList *accl; + struct acclist *accl; gboolean ret = FALSE; if (iu->bu == NULL) { @@ -1039,12 +1056,13 @@ gboolean irc_channel_wants_user(irc_channel_t *ic, irc_user_t *iu) ret = iu->bu->group == icc->group; break; case IRC_CC_TYPE_ACCOUNT: - for (accl = icc->account; accl; accl = accl->next) { - account_t *acc = accl->data; - if (iu->bu->ic->acc == acc) { + accl = (struct acclist *)icc->account; + while (accl) { + if (iu->bu->ic->acc == accl->acc) { ret = TRUE; break; } + accl = accl->next; } break; case IRC_CC_TYPE_PROTOCOL: @@ -1066,6 +1084,7 @@ gboolean irc_channel_wants_user(irc_channel_t *ic, irc_user_t *iu) static gboolean control_channel_free(irc_channel_t *ic) { struct irc_control_channel *icc = ic->data; + struct acclist *accl, *tmp; set_del(&ic->set, "account"); set_del(&ic->set, "fill_by"); @@ -1073,7 +1092,13 @@ static gboolean control_channel_free(irc_channel_t *ic) set_del(&ic->set, "protocol"); set_del(&ic->set, "show_users"); - g_slist_free(icc->account); + accl = (struct acclist *)icc->account; + while (accl) { + tmp = accl->next; + g_free(accl); + accl = tmp; + } + g_free(icc); ic->data = NULL; |