aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-08-25 01:18:27 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2010-08-25 01:18:27 +0100
commita72af0dc9b76451f5aa57ac9443267a97c794f95 (patch)
tree0120458f36dc0ad4ec93582673d7f05073d6f90f
parentbd599b9aeabee36ac6fdb379ca09aec27cce13a4 (diff)
Fix /WHO on single nicks.
-rw-r--r--irc_commands.c8
-rw-r--r--irc_send.c4
2 files changed, 10 insertions, 2 deletions
diff --git a/irc_commands.c b/irc_commands.c
index 4b1bc741..7874f519 100644
--- a/irc_commands.c
+++ b/irc_commands.c
@@ -301,11 +301,19 @@ static void irc_cmd_who( irc_t *irc, char **cmd )
{
char *channel = cmd[1];
irc_channel_t *ic;
+ irc_user_t *iu;
if( !channel || *channel == '0' || *channel == '*' || !*channel )
irc_send_who( irc, irc->users, "**" );
else if( ( ic = irc_channel_by_name( irc, channel ) ) )
irc_send_who( irc, ic->users, channel );
+ else if( ( iu = irc_user_by_name( irc, channel ) ) )
+ {
+ /* Tiny hack! */
+ GSList *l = g_slist_append( NULL, iu );
+ irc_send_who( irc, l, channel );
+ g_slist_free( l );
+ }
else
irc_send_num( irc, 403, "%s :No such channel", channel );
}
diff --git a/irc_send.c b/irc_send.c
index 76b54dd1..fa4e6815 100644
--- a/irc_send.c
+++ b/irc_send.c
@@ -263,7 +263,7 @@ void irc_send_whois( irc_user_t *iu )
void irc_send_who( irc_t *irc, GSList *l, const char *channel )
{
- gboolean is_channel = strcmp( channel, "**" ) != 0;
+ gboolean is_channel = strchr( CTYPES, channel[0] ) != NULL;
while( l )
{
@@ -272,7 +272,7 @@ void irc_send_who( irc_t *irc, GSList *l, const char *channel )
iu = ((irc_channel_user_t*)iu)->iu;
/* TODO(wilmer): Restore away/channel information here */
irc_send_num( irc, 352, "%s %s %s %s %s %c :0 %s",
- channel ? : "*", iu->user, iu->host, irc->root->host,
+ is_channel ? channel : "*", iu->user, iu->host, irc->root->host,
iu->nick, iu->flags & IRC_USER_AWAY ? 'G' : 'H',
iu->fullname );
l = l->next;