aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2006-06-25 21:43:14 +0200
committerWilmer van der Gaast <wilmer@gaast.net>2006-06-25 21:43:14 +0200
commitfd037705664ea03d7a0574c44161ae03b000fb2c (patch)
tree9a0ab46f16689de3005500db479fab7ab4ee5d95
parent6ee9d2d65ec05d3871e69c2b03b860c6bdd509e9 (diff)
parent9b63df67847e72abb00246fdfc82830137153c3c (diff)
Merging from devel/Jelmer.
-rw-r--r--.bzrignore1
-rw-r--r--Makefile3
-rwxr-xr-xconfigure23
-rw-r--r--lib/proxy.c4
-rw-r--r--nick.c4
-rw-r--r--protocols/msn/msn.c2
-rw-r--r--protocols/nogaim.c3
-rw-r--r--tests/Makefile16
-rw-r--r--tests/check.c32
-rw-r--r--tests/check_nick.c70
-rw-r--r--tests/check_util.c53
-rw-r--r--user.c7
12 files changed, 208 insertions, 10 deletions
diff --git a/.bzrignore b/.bzrignore
index 802cb1a0..cddd9fb1 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -11,3 +11,4 @@ decode
encode
bitlbee.pc
.gdb_history
+tests/check
diff --git a/Makefile b/Makefile
index 73fee984..36afa236 100644
--- a/Makefile
+++ b/Makefile
@@ -46,6 +46,9 @@ distclean: clean $(subdirs)
rm -f Makefile.settings config.h
find . -name 'DEADJOE' -o -name '*.orig' -o -name '*.rej' -o -name '*~' -exec rm -f {} \;
+check:
+ $(MAKE) -C tests
+
install-doc:
$(MAKE) -C doc install
diff --git a/configure b/configure
index 3a333029..fc9caffe 100755
--- a/configure
+++ b/configure
@@ -206,6 +206,29 @@ else
fi
echo 'EVENT_HANDLER=events_'$events'.o' >> Makefile.settings
+if [ "$events" = "libevent" ]; then
+ if ! [ -e "${libevent}include/event.h" ]; then
+ echo
+ echo 'Warning: Could not find event.h, you might have to install it and/or specify'
+ echo 'its location using the --libevent= argument. (Example: If event.h is in'
+ echo '/usr/local/include and binaries are in /usr/local/lib: --libevent=/usr/local)'
+ fi
+
+ echo '#define EVENTS_LIBEVENT' >> config.h
+ cat <<EOF>>Makefile.settings
+EFLAGS+=-levent -L${libevent}lib
+CFLAGS+=-I${libevent}include
+EOF
+elif [ "$events" = "glib" ]; then
+ ## We already use glib anyway, so this is all we need (and in fact not even this, but just to be sure...):
+ echo '#define EVENTS_GLIB' >> config.h
+else
+ echo
+ echo 'ERROR: Unknown event handler specified.'
+ exit 1
+fi
+echo 'EVENT_HANDLER=events_'$events'.o' >> Makefile.settings
+
detect_gnutls()
{
if libgnutls-config --version > /dev/null 2> /dev/null; then
diff --git a/lib/proxy.c b/lib/proxy.c
index 453cde91..7911b06f 100644
--- a/lib/proxy.c
+++ b/lib/proxy.c
@@ -538,10 +538,6 @@ int proxy_connect(const char *host, int port, b_event_handler func, gpointer dat
phb->func = func;
phb->data = data;
-#ifndef _WIN32
- sethostent(1);
-#endif
-
if ((proxytype == PROXY_NONE) || !proxyhost || !proxyhost[0] || !proxyport || (proxyport == -1))
return proxy_connect_none(host, port, phb);
else if (proxytype == PROXY_HTTP)
diff --git a/nick.c b/nick.c
index 771d2288..68dd9802 100644
--- a/nick.c
+++ b/nick.c
@@ -162,7 +162,7 @@ void nick_strip( char * nick )
{
int i, j;
- for( i = j = 0; nick[i] && i < MAX_NICK_LENGTH; i++ )
+ for( i = j = 0; nick[i] && j < MAX_NICK_LENGTH; i++ )
{
if( strchr( nick_lc_chars, nick[i] ) ||
strchr( nick_uc_chars, nick[i] ) )
@@ -171,7 +171,7 @@ void nick_strip( char * nick )
j++;
}
}
- while( j < MAX_NICK_LENGTH )
+ while( j <= MAX_NICK_LENGTH )
nick[j++] = '\0';
}
diff --git a/protocols/msn/msn.c b/protocols/msn/msn.c
index bac9c427..6393f31d 100644
--- a/protocols/msn/msn.c
+++ b/protocols/msn/msn.c
@@ -94,6 +94,8 @@ static void msn_close( struct gaim_connection *gc )
g_slist_free( md->msgq );
}
+ g_free( md->grouplist );
+
g_free( md );
}
diff --git a/protocols/nogaim.c b/protocols/nogaim.c
index d4ccc3f1..04d1ee3e 100644
--- a/protocols/nogaim.c
+++ b/protocols/nogaim.c
@@ -293,9 +293,10 @@ void signoff( struct gaim_connection *gc )
account_t *a;
serv_got_crap( gc, "Signing off.." );
- gc->flags |= OPT_LOGGING_OUT;
b_event_remove( gc->keepalive );
+ gc->flags |= OPT_LOGGING_OUT;
+
gc->keepalive = 0;
gc->prpl->close( gc );
b_event_remove( gc->inpa );
diff --git a/tests/Makefile b/tests/Makefile
new file mode 100644
index 00000000..ce8ed690
--- /dev/null
+++ b/tests/Makefile
@@ -0,0 +1,16 @@
+include ../Makefile.settings
+
+LFLAGS +=-lcheck
+
+all: check
+ ./check
+
+main_objs = account.o bitlbee.o conf.o crypting.o help.o ini.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_text.o url.o user.o util.o
+
+check: check.o check_util.o check_nick.o $(addprefix ../, $(main_objs)) ../protocols/protocols.o
+ @echo '*' Linking $@
+ @$(CC) $(CFLAGS) -o $@ $^ $(LFLAGS) $(EFLAGS)
+
+%.o: %.c
+ @echo '*' Compiling $<
+ @$(CC) -c $(CFLAGS) $< -o $@
diff --git a/tests/check.c b/tests/check.c
new file mode 100644
index 00000000..5cfb7dfd
--- /dev/null
+++ b/tests/check.c
@@ -0,0 +1,32 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <check.h>
+#include "bitlbee.h"
+
+global_t global; /* Against global namespace pollution */
+
+double gettime()
+{
+ struct timeval time[1];
+
+ gettimeofday( time, 0 );
+ return( (double) time->tv_sec + (double) time->tv_usec / 1000000 );
+}
+
+/* From check_util.c */
+Suite *util_suite(void);
+
+/* From check_nick.c */
+Suite *nick_suite(void);
+
+int main (void)
+{
+ int nf;
+ SRunner *sr = srunner_create(util_suite());
+ srunner_add_suite(sr, nick_suite());
+ srunner_run_all (sr, CK_NORMAL);
+ nf = srunner_ntests_failed(sr);
+ srunner_free(sr);
+ return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/tests/check_nick.c b/tests/check_nick.c
new file mode 100644
index 00000000..5858e512
--- /dev/null
+++ b/tests/check_nick.c
@@ -0,0 +1,70 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <check.h>
+#include <string.h>
+#include "irc.h"
+#include "set.h"
+#include "util.h"
+
+START_TEST(test_nick_strip)
+{
+ int i;
+ const char *get[] = { "test:", "test", "test\n",
+ "thisisaveryveryveryverylongnick",
+ "thisisave:ryveryveryverylongnick",
+ "t::::est",
+ NULL };
+ const char *expected[] = { "test", "test", "test",
+ "thisisaveryveryveryveryl",
+ "thisisaveryveryveryveryl",
+ "test",
+ NULL };
+
+ for (i = 0; get[i]; i++) {
+ char copy[30];
+ strcpy(copy, get[i]);
+ nick_strip(copy);
+ fail_unless (strcmp(copy, expected[i]) == 0,
+ "(%d) nick_strip broken: %s -> %s (expected: %s)",
+ i, get[i], copy, expected[i]);
+ }
+}
+END_TEST
+
+START_TEST(test_nick_ok_ok)
+{
+ const char *nicks[] = { "foo", "bar", "bla[", "blie]",
+ "BreEZaH", "\\od^~", NULL };
+ int i;
+
+ for (i = 0; nicks[i]; i++) {
+ fail_unless (nick_ok(nicks[i]) == 1,
+ "nick_ok() failed: %s", nicks[i]);
+ }
+}
+END_TEST
+
+START_TEST(test_nick_ok_notok)
+{
+ const char *nicks[] = { "thisisaveryveryveryveryveryveryverylongnick",
+ "\nillegalchar", "", "nick%", NULL };
+ int i;
+
+ for (i = 0; nicks[i]; i++) {
+ fail_unless (nick_ok(nicks[i]) == 0,
+ "nick_ok() succeeded for invalid: %s", nicks[i]);
+ }
+}
+END_TEST
+
+Suite *nick_suite (void)
+{
+ Suite *s = suite_create("Nick");
+ TCase *tc_core = tcase_create("Core");
+ suite_add_tcase (s, tc_core);
+ tcase_add_test (tc_core, test_nick_ok_ok);
+ tcase_add_test (tc_core, test_nick_ok_notok);
+ tcase_add_test (tc_core, test_nick_strip);
+ return s;
+}
diff --git a/tests/check_util.c b/tests/check_util.c
new file mode 100644
index 00000000..e771238f
--- /dev/null
+++ b/tests/check_util.c
@@ -0,0 +1,53 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <check.h>
+#include <string.h>
+#include "irc.h"
+#include "set.h"
+#include "util.h"
+
+START_TEST(test_strip_linefeed)
+{
+ int i;
+ const char *get[] = { "Test", "Test\r", "Test\rX\r", NULL };
+ const char *expected[] = { "Test", "Test", "TestX", NULL };
+
+ for (i = 0; get[i]; i++) {
+ char copy[20];
+ strcpy(copy, get[i]);
+ strip_linefeed(copy);
+ fail_unless (strcmp(copy, expected[i]) == 0,
+ "(%d) strip_linefeed broken: %s -> %s (expected: %s)",
+ i, get[i], copy, expected[i]);
+ }
+}
+END_TEST
+
+START_TEST(test_strip_newlines)
+{
+ int i;
+ const char *get[] = { "Test", "Test\r\n", "Test\nX\n", NULL };
+ const char *expected[] = { "Test", "Test ", "Test X ", NULL };
+
+ for (i = 0; get[i]; i++) {
+ char copy[20], *ret;
+ strcpy(copy, get[i]);
+ ret = strip_newlines(copy);
+ fail_unless (strcmp(copy, expected[i]) == 0,
+ "(%d) strip_newlines broken: %s -> %s (expected: %s)",
+ i, get[i], copy, expected[i]);
+ fail_unless (copy == ret, "Original string not returned");
+ }
+}
+END_TEST
+
+Suite *util_suite (void)
+{
+ Suite *s = suite_create("Util");
+ TCase *tc_core = tcase_create("Core");
+ suite_add_tcase (s, tc_core);
+ tcase_add_test (tc_core, test_strip_linefeed);
+ tcase_add_test (tc_core, test_strip_newlines);
+ return s;
+}
diff --git a/user.c b/user.c
index b412a42d..5f0952f5 100644
--- a/user.c
+++ b/user.c
@@ -105,9 +105,10 @@ int user_del( irc_t *irc, char *nick )
if( u->nick != u->user ) g_free( u->user );
if( u->nick != u->host ) g_free( u->host );
if( u->nick != u->realname ) g_free( u->realname );
- if( u->away ) g_free( u->away );
- if( u->handle ) g_free( u->handle );
- if( u->sendbuf ) g_free( u->sendbuf );
+ g_free( u->group );
+ g_free( u->away );
+ g_free( u->handle );
+ g_free( u->sendbuf );
if( u->sendbuf_timer ) b_event_remove( u->sendbuf_timer );
g_free( u );