a4ceb96566987f643bfe71544971c547bad816cf
[jelmer/ctrlproxy.git] / src / motd.c
1 /* 
2         ctrlproxy: A modular IRC proxy
3         (c) 2003,2006 Jelmer Vernooij <jelmer@nl.linux.org>
4
5         This program is free software; you can redistribute it and/or modify
6         it under the terms of the GNU General Public License as published by
7         the Free Software Foundation; either version 2 of the License, or
8         (at your option) any later version.
9
10         This program is distributed in the hope that it will be useful,
11         but WITHOUT ANY WARRANTY; without even the implied warranty of
12         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13         GNU General Public License for more details.
14
15         You should have received a copy of the GNU General Public License
16         along with this program; if not, write to the Free Software
17         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20 #include "ctrlproxy.h"
21 #include <string.h>
22 #include <errno.h>
23 #include <stdio.h>
24 #include "irc.h"
25
26 char ** get_motd_lines(struct client *c)
27 {
28         char **lines = NULL;
29         size_t nrlines = 0;
30         GIOChannel *fd;
31         GError *error = NULL;
32
33         if (!c->network->global->config->motd_file)
34                 return NULL;
35
36         if (!strcmp(c->network->global->config->motd_file, ""))
37                 return NULL;
38
39         fd = g_io_channel_new_file(c->network->global->config->motd_file, "r", &error);
40         if(!fd) {
41                 log_global(LOG_ERROR, "Can't open '%s'", c->network->global->config->motd_file);
42                 return NULL;
43         }
44
45         while (1) {
46                 GIOStatus status;
47                 char *buf;
48                 gsize eol;
49
50                 status = g_io_channel_read_line(fd, &buf, NULL, &eol, &error);
51                 if (status == G_IO_STATUS_EOF) break;
52                 if (buf[eol] == '\n' || buf[eol] == '\r') buf[eol] = '\0';
53                 lines = g_realloc(lines, (nrlines+2) * sizeof(char *));
54                 lines[nrlines] = buf;
55                 nrlines++;
56                 lines[nrlines] = NULL;
57         }
58
59         g_io_channel_close(fd);
60
61         return lines;
62 }