1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
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 <stdio.h>
+#include <string>
#include <string.h>
#include <stdlib.h>
#include <glib.h>
@@ -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);
|