summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2001-06-10 22:19:15 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2001-06-10 22:19:15 +0000
commitb0f75f79a2afe3f82e17ac2c55989ed34d061c38 (patch)
treec6588deabef3298d0c44849eafd0c39b74a8ba75 /src
parent5aa56a08f9e7e709f5e669cdd4fe1d587715821e (diff)
downloadirssi-b0f75f79a2afe3f82e17ac2c55989ed34d061c38.zip
Getting optional channel parameter was buggy - it used already free'd memory
and assumed the command handler was given CHANNEL_REC even while it could have been any other WI_ITEM_REC ..though it used only the WI_ITEM_REC parts so it didn't really matter.. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1544 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src')
-rw-r--r--src/core/commands.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/core/commands.c b/src/core/commands.c
index b6fb8a74..08f1c1b9 100644
--- a/src/core/commands.c
+++ b/src/core/commands.c
@@ -23,6 +23,7 @@
#include "commands.h"
#include "misc.h"
#include "special-vars.h"
+#include "window-item-def.h"
#include "servers.h"
#include "servers-redirect.h"
@@ -619,12 +620,12 @@ typedef struct {
GHashTable *options;
} CMD_TEMP_REC;
-static char *get_optional_channel(CHANNEL_REC *active_channel, char **data)
+static char *get_optional_channel(WI_ITEM_REC *active_item, char **data)
{
CHANNEL_REC *chanrec;
char *tmp, *origtmp, *channel, *ret;
- if (active_channel == NULL) {
+ if (active_item == NULL) {
/* no active channel in window, channel required */
return cmd_get_param(data);
}
@@ -633,14 +634,15 @@ static char *get_optional_channel(CHANNEL_REC *active_channel, char **data)
channel = cmd_get_param(&tmp);
if (strcmp(channel, "*") == 0 ||
- !active_channel->server->ischannel(channel))
- ret = active_channel->name;
+ !active_item->server->ischannel(channel))
+ ret = active_item->name;
else {
/* Find the channel first and use it's name if found.
This allows automatic !channel -> !XXXXXchannel replaces. */
- chanrec = channel_find(active_channel->server, channel);
+ channel = cmd_get_param(data);
+
+ chanrec = channel_find(active_item->server, channel);
ret = chanrec == NULL ? channel : chanrec->name;
- cmd_get_param(data);
}
g_free(origtmp);
@@ -649,7 +651,7 @@ static char *get_optional_channel(CHANNEL_REC *active_channel, char **data)
int cmd_get_params(const char *data, gpointer *free_me, int count, ...)
{
- CHANNEL_REC *chanrec;
+ WI_ITEM_REC *item;
CMD_TEMP_REC *rec;
GHashTable **opthash;
char **str, *arg, *datad;
@@ -667,8 +669,8 @@ int cmd_get_params(const char *data, gpointer *free_me, int count, ...)
datad = rec->data;
error = FALSE;
- chanrec = (count & PARAM_FLAG_OPTCHAN) == 0 ? NULL:
- (CHANNEL_REC *) va_arg(args, CHANNEL_REC *);
+ item = (count & PARAM_FLAG_OPTCHAN) == 0 ? NULL:
+ (WI_ITEM_REC *) va_arg(args, WI_ITEM_REC *);
if (count & PARAM_FLAG_OPTIONS) {
arg = (char *) va_arg(args, char *);
@@ -688,7 +690,7 @@ int cmd_get_params(const char *data, gpointer *free_me, int count, ...)
cnt = PARAM_WITHOUT_FLAGS(count);
if (count & PARAM_FLAG_OPTCHAN) {
/* optional channel as first parameter */
- arg = get_optional_channel(chanrec, &datad);
+ arg = get_optional_channel(item, &datad);
str = (char **) va_arg(args, char **);
if (str != NULL) *str = arg;