diff -urNp freetalk-3.2.orig/src/callbacks.cc freetalk-3.2/src/callbacks.cc --- freetalk-3.2.orig/src/callbacks.cc 2009-02-25 01:31:29.826691032 +0530 +++ freetalk-3.2/src/callbacks.cc 2009-02-25 02:56:04.323962193 +0530 @@ -1,7 +1,7 @@ /* callbacks.c: Callback functions - Copyright (c) 2005, 2006, 2007 Freetalk Core Team + Copyright (c) 2005, 2006, 2007, 2009 Freetalk Core Team This file is part of GNU Freetalk. Freetalk is free software; you can redistribute it and/or modify @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -116,8 +117,9 @@ ft_msg_msg_handler (LmMessageHandler *ha LmMessage *msg, gpointer user_data) { LmMessageNode *root, *body, *x; - const char *from, *msg_str, *type; + const char *msg_str, *type; char *ts = NULL; + std::string from; root = lm_message_get_node (msg); body = lm_message_node_get_child (root, "body"); @@ -152,11 +154,12 @@ ft_msg_msg_handler (LmMessageHandler *ha set_hook_return (0); /* TBD : make the below stripping of /Resource configurable */ if (1) { - if (strchr (from, '/')) - *strchr (from, '/') = '\0'; + const size_t pos = from.find("/"); + if (pos != std::string::npos) + from.replace(pos, from.size() - pos, ""); } { - FtRosterItem *item = ft_roster_lookup (from); + FtRosterItem *item = ft_roster_lookup (from.c_str()); char *nickname; if (!item) @@ -166,17 +169,17 @@ ft_msg_msg_handler (LmMessageHandler *ha scm_run_hook (ex_message_receive_hook, scm_list_n (ts ? scm_from_locale_string (ts) : scm_from_locale_string (""), - scm_from_locale_string (from), + scm_from_locale_string (from.c_str()), nickname ? scm_from_locale_string (nickname) : scm_from_locale_string (""), scm_from_locale_string (msg_str), SCM_UNDEFINED)); } if (ts) g_free (ts); - if (get_hook_return () == 1) + if (get_hook_return () == 1) return LM_HANDLER_RESULT_REMOVE_MESSAGE; - PRINTF ("%s: %s", from, msg_str); + PRINTF ("%s: %s", from.c_str(), msg_str); } else { /* This logic should be looked into : FIXME */ ft_send_file_message_data (msg);