return FALSE;
old = *prefixes;
- *prefixes = g_strdup_printf("%s%c", *prefixes, prefix);
+ *prefixes = g_strdup_printf("%s%c", *prefixes?*prefixes:"", prefix);
g_free(old);
return TRUE;
memmove(p, p+1, strlen(p));
+ if (strlen(*prefixes) == 0) {
+ g_free(*prefixes);
+ *prefixes = NULL;
+ }
+
return TRUE;
}
G_MODULE_EXPORT gboolean client_send_state(struct client *, struct network_state *);
G_MODULE_EXPORT void network_state_log(enum log_level l, const struct network_state *st, const char *fmt, ...);
G_MODULE_EXPORT void network_state_set_log_fn(struct network_state *st, void (*fn) (enum log_level, void *, const char *), void *userdata);
+G_MODULE_EXPORT gboolean prefixes_add_prefix(char **prefixes, char prefix);
+G_MODULE_EXPORT gboolean prefixes_del_prefix(char **prefixes, char prefix);
#endif /* __CTRLPROXY_STATE_H__ */
gboolean network_nick_set_hostmask(struct network_nick *, const char *);
struct network_nick *find_add_network_nick(struct network_state *n, const char *name);
+START_TEST(state_prefixes_add_prefix)
+ char *in = NULL;
+ fail_unless (prefixes_add_prefix(&in, '@'));
+ fail_unless (strcmp(in, "@") == 0);
+ fail_unless (prefixes_add_prefix(&in, '%'));
+ fail_unless (strcmp(in, "@%") == 0);
+ fail_if (prefixes_add_prefix(&in, '%'));
+ fail_unless (strcmp(in, "@%") == 0);
+END_TEST
+
+START_TEST(state_prefixes_remove_prefix)
+ char *in = NULL;
+ fail_if (prefixes_del_prefix(&in, '@'));
+ fail_unless (in == NULL);
+ in = g_strdup("%@");
+ fail_unless (prefixes_del_prefix(&in, '%'));
+ fail_unless (strcmp(in, "@") == 0);
+ fail_if (prefixes_del_prefix(&in, '%'));
+ fail_unless (strcmp(in, "@") == 0);
+ fail_unless (prefixes_del_prefix(&in, '@'));
+ fail_unless (in == NULL);
+END_TEST
+
START_TEST(state_init)
struct network_state *ns = network_state_init("bla", "Gebruikersnaam", "Computernaam");
tcase_add_test(tc_core, state_find_network_nick);
tcase_add_test(tc_core, state_find_add_network_nick);
tcase_add_test(tc_core, state_handle_state_data);
+ tcase_add_test(tc_core, state_prefixes_add_prefix);
+ tcase_add_test(tc_core, state_prefixes_remove_prefix);
return s;
}