diff --git a/src/irc.c b/src/irc.c --- a/src/irc.c +++ b/src/irc.c @@ -25,7 +25,6 @@ "NOTICE", "MODE", "JOIN", "PART", "TOPIC", "PING", "ENOMEM", "ERROR", "VERSION", "PRIVMSG", "QUIT", "NICK", - NULL, }; FILE *irc_connect (char *server, unsigned int port) @@ -34,7 +33,7 @@ char *ip; struct sockaddr_in ca; int csocket; - FILE *stream = NULL; + FILE *stream; he = gethostbyname (server); if (he == NULL) { @@ -43,7 +42,7 @@ } if ((ip = inet_ntoa (*((struct in_addr *)he->h_addr_list[0]))) == NULL) { - perror ("GETHOSTBYNAME"); + perror ("INET_NTOA"); return NULL; } else printf ("IP: %s\n", ip); @@ -80,26 +79,31 @@ int irc_login (FILE * stream, char *server, char *nick, char *password) { - MSG message; + MSG message = { NULL, 0, 0, 0, 0, 0, 0 }; char msg[513]; char *user; - struct passwd *pwd = NULL; + struct passwd *pwd; - if ((user = getenv ("USER")) != NULL) - if ((pwd = getpwnam (user)) == NULL) - return IRC_GENERAL_ERROR; + if ((user = getenv ("USER")) == NULL) + return IRC_GENERAL_ERROR; + + if ((pwd = getpwnam (user)) == NULL) + return IRC_GENERAL_ERROR; if (password == NULL) return IRC_LOGIN_ERROR; if (stream == NULL) return IRC_GENERAL_ERROR; + else + message.stream = stream; fprintf (stream, "NICK %s\r\n", nick); fprintf (stream, "USER %s 0 %s %s\r\n", user, server, pwd->pw_gecos); fprintf (stream, "PRIVMSG NICKSERV :IDENTIFY %s\r\n", password); for (;;) { + *msg = 0; fgets (msg, 512, stream); if ((user = irc_parsemessage (msg, &message)) != NULL) printf ("%10s %s\n", user, message.line); @@ -283,6 +287,7 @@ fprintf (message->stream, "PRIVMSG %s :%s\r\n", message->current_channel, message->line); return command; case 320: + case 328: /* INFORMATION */ case 332: /* TOPIC OF CHANNEL */ case 333: /* NAMES IN CHANNEL */ message->channel = strtok (message->line, " "); @@ -311,8 +316,8 @@ return command; break; case 401: /* NO SUCH NICK/CHANNEL */ - case 403: /* That CHANNEL doesnt exist */ - case 441: /* They aren't on this channel */ + case 403: /* THAT CHANNEL DOESN'T EXIST */ + case 441: /* THEY AREN'T ON THIS CHANNEL */ return command; case 474: case 475: