comparison libpurple/protocols/irc/parse.c @ 32827:4a34689eeb33 default tip

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Sat, 19 Nov 2011 14:42:54 +0900
parents 0f94ec89f0bc 3e7a7e14af62
children
comparison
equal deleted inserted replaced
32692:0f94ec89f0bc 32827:4a34689eeb33
183 { 183 {
184 PurpleConnection *gc; 184 PurpleConnection *gc;
185 struct irc_conn *irc; 185 struct irc_conn *irc;
186 struct _irc_user_cmd *cmdent; 186 struct _irc_user_cmd *cmdent;
187 187
188 gc = purple_conversation_get_gc(conv); 188 gc = purple_conversation_get_connection(conv);
189 if (!gc) 189 if (!gc)
190 return PURPLE_CMD_RET_FAILED; 190 return PURPLE_CMD_RET_FAILED;
191 191
192 irc = purple_connection_get_protocol_data(gc); 192 irc = purple_connection_get_protocol_data(gc);
193 193
907 args = g_new0(char *, strlen(msgent->format)); 907 args = g_new0(char *, strlen(msgent->format));
908 for (cur = end, fmt = msgent->format, i = 0; fmt[i] && *cur++; i++) { 908 for (cur = end, fmt = msgent->format, i = 0; fmt[i] && *cur++; i++) {
909 switch (fmt[i]) { 909 switch (fmt[i]) {
910 case 'v': 910 case 'v':
911 if (!(end = strchr(cur, ' '))) end = cur + strlen(cur); 911 if (!(end = strchr(cur, ' '))) end = cur + strlen(cur);
912 args[i] = g_strndup(cur, end - cur); 912 /* This is a string of unknown encoding which we do not
913 * want to transcode, but it may or may not be valid
914 * UTF-8, so we'll salvage it. If a nick/channel/target
915 * field has inadvertently been marked verbatim, this
916 * could cause weirdness. */
917 tmp = g_strndup(cur, end - cur);
918 args[i] = purple_utf8_salvage(tmp);
919 g_free(tmp);
913 cur += end - cur; 920 cur += end - cur;
914 break; 921 break;
915 case 't': 922 case 't':
916 case 'n': 923 case 'n':
917 case 'c': 924 case 'c':
925 if (*cur == ':') cur++; 932 if (*cur == ':') cur++;
926 args[i] = irc_recv_convert(irc, cur); 933 args[i] = irc_recv_convert(irc, cur);
927 cur = cur + strlen(cur); 934 cur = cur + strlen(cur);
928 break; 935 break;
929 case '*': 936 case '*':
930 args[i] = g_strdup(cur); 937 /* Ditto 'v' above; we're going to salvage this in case
938 * it leaks past the IRC prpl */
939 args[i] = purple_utf8_salvage(cur);
931 cur = cur + strlen(cur); 940 cur = cur + strlen(cur);
932 break; 941 break;
933 default: 942 default:
934 purple_debug(PURPLE_DEBUG_ERROR, "irc", "invalid message format character '%c'\n", fmt[i]); 943 purple_debug(PURPLE_DEBUG_ERROR, "irc", "invalid message format character '%c'\n", fmt[i]);
935 break; 944 break;