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; |
