aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--help.c13
-rw-r--r--help.h2
-rw-r--r--tests/Makefile2
-rw-r--r--tests/check.c4
-rw-r--r--tests/check_help.c30
-rw-r--r--unix.c2
6 files changed, 43 insertions, 10 deletions
diff --git a/help.c b/help.c
index 7c6d2dda..756eb12a 100644
--- a/help.c
+++ b/help.c
@@ -30,7 +30,7 @@
#define BUFSIZE 1100
-help_t *help_init( help_t **help )
+help_t *help_init( help_t **help, const char *helpfile )
{
int i, buflen = 0;
help_t *h;
@@ -40,7 +40,7 @@ help_t *help_init( help_t **help )
*help = h = g_new0 ( help_t, 1 );
- h->fd = open( global.helpfile, O_RDONLY
+ h->fd = open( helpfile, O_RDONLY
#ifdef _WIN32
| O_BINARY
#endif
@@ -108,12 +108,11 @@ char *help_get( help_t **help, char *string )
struct stat stat[1];
help_t *h;
- h=*help;
-
- while( h )
+ for( h = *help; h; h = h->next )
{
- if( g_strcasecmp( h->string, string ) == 0 ) break;
- h = h->next;
+ if( h->string != NULL &&
+ g_strcasecmp( h->string, string ) == 0 )
+ break;
}
if( h && h->length > 0 )
{
diff --git a/help.h b/help.h
index 7b8da39a..07182e9c 100644
--- a/help.h
+++ b/help.h
@@ -42,7 +42,7 @@ typedef struct help
struct help *next;
} help_t;
-help_t *help_init( help_t **help );
+help_t *help_init( help_t **help, const char *helpfile );
char *help_get( help_t **help, char *string );
#endif
diff --git a/tests/Makefile b/tests/Makefile
index 9dd3df7c..3ddd1570 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -10,7 +10,7 @@ clean:
main_objs = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_xml.o storage_text.o user.o
-test_objs = check.o check_util.o check_nick.o check_md5.o check_irc.o
+test_objs = check.o check_util.o check_nick.o check_md5.o check_irc.o check_help.o
check: $(test_objs) $(addprefix ../, $(main_objs)) ../protocols/protocols.o ../lib/lib.o
@echo '*' Linking $@
diff --git a/tests/check.c b/tests/check.c
index f70ccae7..069b3c57 100644
--- a/tests/check.c
+++ b/tests/check.c
@@ -40,6 +40,9 @@ Suite *md5_suite(void);
/* From check_irc.c */
Suite *irc_suite(void);
+/* From check_help.c */
+Suite *help_suite(void);
+
int main (int argc, char **argv)
{
int nf;
@@ -80,6 +83,7 @@ int main (int argc, char **argv)
srunner_add_suite(sr, nick_suite());
srunner_add_suite(sr, md5_suite());
srunner_add_suite(sr, irc_suite());
+ srunner_add_suite(sr, help_suite());
if (no_fork)
srunner_set_fork_status(sr, CK_NOFORK);
srunner_run_all (sr, verbose?CK_VERBOSE:CK_NORMAL);
diff --git a/tests/check_help.c b/tests/check_help.c
new file mode 100644
index 00000000..7e5283e3
--- /dev/null
+++ b/tests/check_help.c
@@ -0,0 +1,30 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <gmodule.h>
+#include <check.h>
+#include <string.h>
+#include <stdio.h>
+#include "help.h"
+
+START_TEST(test_help_none)
+ help_t *h, *r;
+ r = help_init(&h, "/dev/null");
+ fail_if(r == NULL);
+ fail_if(r != h);
+END_TEST
+
+START_TEST(test_help_nonexistent)
+ help_t *h, *r;
+ r = help_init(&h, "/dev/null");
+ fail_unless(help_get(&h, "nonexistent") == NULL);
+END_TEST
+
+Suite *help_suite (void)
+{
+ Suite *s = suite_create("Help");
+ TCase *tc_core = tcase_create("Core");
+ suite_add_tcase (s, tc_core);
+ tcase_add_test (tc_core, test_help_none);
+ tcase_add_test (tc_core, test_help_nonexistent);
+ return s;
+}
diff --git a/unix.c b/unix.c
index 23ae1b91..2be16b2b 100644
--- a/unix.c
+++ b/unix.c
@@ -111,7 +111,7 @@ int main( int argc, char *argv[], char **envp )
if( !getuid() || !geteuid() )
log_message( LOGLVL_WARNING, "BitlBee is running with root privileges. Why?" );
- if( help_init( &(global.help) ) == NULL )
+ if( help_init( &(global.help), global.helpfile ) == NULL )
log_message( LOGLVL_WARNING, "Error opening helpfile %s.", HELP_FILE );
b_main_run();