Mercurial > pidgin.yaz
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; |