Mercurial > pidgin.yaz
annotate libpurple/util.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 5525312cf589 |
children |
rev | line source |
---|---|
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2 * @file util.h Utility Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * @ingroup core |
20074
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19680
diff
changeset
|
4 */ |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19680
diff
changeset
|
5 |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19680
diff
changeset
|
6 /* Purple is the legal property of its developers, whose names are too numerous |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 * to list here. Please refer to the COPYRIGHT file distributed with this |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 * source distribution. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 * This program is free software; you can redistribute it and/or modify |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 * it under the terms of the GNU General Public License as published by |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * the Free Software Foundation; either version 2 of the License, or |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 * This program is distributed in the hope that it will be useful, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
18 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
20 * You should have received a copy of the GNU General Public License |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 * along with this program; if not, write to the Free Software |
19680
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19661
diff
changeset
|
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
23 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
24 #include "internal.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
25 |
18039
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
26 #include "cipher.h" |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
27 #include "conversation.h" |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
28 #include "core.h" |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 #include "debug.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 #include "notify.h" |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
31 #include "ntlm.h" |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 #include "prpl.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 #include "prefs.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 #include "util.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 |
15823 | 36 struct _PurpleUtilFetchUrlData |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
37 { |
15823 | 38 PurpleUtilFetchUrlCallback callback; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
39 void *user_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
40 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 struct |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
42 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
43 char *user; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
44 char *passwd; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 char *address; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
46 int port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
47 char *page; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
48 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
49 } website; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
50 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
51 char *url; |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
52 int num_times_redirected; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
53 gboolean full; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
54 char *user_agent; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
55 gboolean http11; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
56 char *request; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
57 gsize request_written; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
58 gboolean include_headers; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
60 gboolean is_ssl; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
61 PurpleSslConnection *ssl_connection; |
15823 | 62 PurpleProxyConnectData *connect_data; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
63 int fd; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
64 guint inpa; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
65 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
66 gboolean got_headers; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 gboolean has_explicit_data_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
68 char *webdata; |
27521
065294d973b4
This fixes this compile warning:
Stu Tomlinson <stu@nosnilmot.com>
parents:
27486
diff
changeset
|
69 gsize len; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
70 unsigned long data_len; |
23742
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
71 gssize max_len; |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
72 gboolean chunked; |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
73 PurpleAccount *account; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
74 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
75 |
32466 | 76 struct _PurpleMenuAction |
77 { | |
78 char *label; | |
79 PurpleCallback callback; | |
80 gpointer data; | |
81 GList *children; | |
82 }; | |
83 | |
18147
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
84 static char *custom_user_dir = NULL; |
20091
2ab6b55ffa3d
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@wiktel.com>
parents:
20074
diff
changeset
|
85 static char *user_dir = NULL; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
86 |
21248
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
87 |
15823 | 88 PurpleMenuAction * |
89 purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data, | |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
90 GList *children) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
91 { |
15823 | 92 PurpleMenuAction *act = g_new0(PurpleMenuAction, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
93 act->label = g_strdup(label); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
94 act->callback = callback; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
95 act->data = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
96 act->children = children; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
97 return act; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
98 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
99 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
100 void |
15823 | 101 purple_menu_action_free(PurpleMenuAction *act) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
102 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
103 g_return_if_fail(act != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
104 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
105 g_free(act->label); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
106 g_free(act); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
107 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
108 |
32466 | 109 char * purple_menu_action_get_label(const PurpleMenuAction *act) |
110 { | |
111 g_return_val_if_fail(act != NULL, NULL); | |
112 | |
113 return act->label; | |
114 } | |
115 | |
32516
4d5e1dc93265
disapproval of revision '0d9c985d91b5de7f20f3443d7edbe22fb7ce80af'
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32471
diff
changeset
|
116 PurpleCallback purple_menu_action_get_callback(const PurpleMenuAction *act) |
32466 | 117 { |
118 g_return_val_if_fail(act != NULL, NULL); | |
119 | |
120 return act->callback; | |
121 } | |
122 | |
123 gpointer purple_menu_action_get_data(const PurpleMenuAction *act) | |
124 { | |
125 g_return_val_if_fail(act != NULL, NULL); | |
126 | |
127 return act->data; | |
128 } | |
129 | |
130 GList* purple_menu_action_get_children(const PurpleMenuAction *act) | |
131 { | |
132 g_return_val_if_fail(act != NULL, NULL); | |
133 | |
134 return act->children; | |
135 } | |
136 | |
137 void purple_menu_action_set_label(PurpleMenuAction *act, char *label) | |
138 { | |
139 g_return_if_fail(act != NULL); | |
140 | |
141 act-> label = label; | |
142 } | |
143 | |
144 void purple_menu_action_set_callback(PurpleMenuAction *act, PurpleCallback callback) | |
145 { | |
146 g_return_if_fail(act != NULL); | |
147 | |
148 act->callback = callback; | |
149 } | |
150 | |
151 void purple_menu_action_set_data(PurpleMenuAction *act, gpointer data) | |
152 { | |
153 g_return_if_fail(act != NULL); | |
154 | |
155 act->data = data; | |
156 } | |
157 | |
158 void purple_menu_action_set_children(PurpleMenuAction *act, GList *children) | |
159 { | |
160 g_return_if_fail(act != NULL); | |
161 | |
162 act->children = children; | |
163 } | |
164 | |
21248
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
165 void |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
166 purple_util_init(void) |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
167 { |
25415
584063555949
Remove trailing whitespace
Mark Doliner <mark@kingant.net>
parents:
25385
diff
changeset
|
168 /* This does nothing right now. It exists for symmetry with |
21248
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
169 * purple_util_uninit() and forwards compatibility. */ |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
170 } |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
171 |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
172 void |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
173 purple_util_uninit(void) |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
174 { |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
175 /* Free these so we don't have leaks at shutdown. */ |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
176 |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
177 g_free(custom_user_dir); |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
178 custom_user_dir = NULL; |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
179 |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
180 g_free(user_dir); |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
181 user_dir = NULL; |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
182 } |
5915ad785ee7
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@wiktel.com>
parents:
20917
diff
changeset
|
183 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
184 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
185 * Base16 Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
186 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
187 gchar * |
15823 | 188 purple_base16_encode(const guchar *data, gsize len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
189 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
190 int i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
191 gchar *ascii = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
192 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
193 g_return_val_if_fail(data != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
194 g_return_val_if_fail(len > 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
195 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
196 ascii = g_malloc(len * 2 + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
197 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
198 for (i = 0; i < len; i++) |
26967
8290e36a5a73
A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@wiktel.com>
parents:
26854
diff
changeset
|
199 g_snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
200 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
201 return ascii; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
202 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
203 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
204 guchar * |
15823 | 205 purple_base16_decode(const char *str, gsize *ret_len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
206 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
207 int len, i, accumulator = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
208 guchar *data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
209 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
210 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
211 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
212 len = strlen(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
213 |
32364
323876c34a96
Don't use strlen() when all you're trying to do is check if the string
Mark Doliner <mark@kingant.net>
parents:
32320
diff
changeset
|
214 g_return_val_if_fail(*str, 0); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
215 g_return_val_if_fail(len % 2 == 0, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
216 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
217 data = g_malloc(len / 2); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
218 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
219 for (i = 0; i < len; i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
220 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
221 if ((i % 2) == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
222 accumulator = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
223 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
224 accumulator <<= 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
225 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
226 if (isdigit(str[i])) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
227 accumulator |= str[i] - 48; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
228 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
229 { |
16153
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
230 switch(tolower(str[i])) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
231 { |
16153
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
232 case 'a': accumulator |= 10; break; |
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
233 case 'b': accumulator |= 11; break; |
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
234 case 'c': accumulator |= 12; break; |
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
235 case 'd': accumulator |= 13; break; |
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
236 case 'e': accumulator |= 14; break; |
6613fb7af427
Call strtolower() so that we don't have to check against the
Mark Doliner <mark@kingant.net>
parents:
16084
diff
changeset
|
237 case 'f': accumulator |= 15; break; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
238 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
239 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
240 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
241 if (i % 2) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
242 data[(i - 1) / 2] = accumulator; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
243 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
244 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
245 if (ret_len != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
246 *ret_len = len / 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
247 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
248 return data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
249 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
250 |
17412
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
251 gchar * |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
252 purple_base16_encode_chunked(const guchar *data, gsize len) |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
253 { |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
254 int i; |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
255 gchar *ascii = NULL; |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
256 |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
257 g_return_val_if_fail(data != NULL, NULL); |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
258 g_return_val_if_fail(len > 0, NULL); |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
259 |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
260 /* For each byte of input, we need 2 bytes for the hex representation |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
261 * and 1 for the colon. |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
262 * The final colon will be replaced by a terminating NULL |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
263 */ |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
264 ascii = g_malloc(len * 3 + 1); |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
265 |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
266 for (i = 0; i < len; i++) |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
267 g_snprintf(&ascii[i * 3], 4, "%02hhx:", data[i]); |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
268 |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
269 /* Replace the final colon with NULL */ |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
270 ascii[len * 3 - 1] = 0; |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
271 |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
272 return ascii; |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
273 } |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
274 |
ba768014f91f
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17244
diff
changeset
|
275 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
276 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
277 * Base64 Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
278 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
279 static const char alphabet[] = |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
280 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
281 "0123456789+/"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
282 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
283 static const char xdigits[] = |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
284 "0123456789abcdef"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
285 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
286 gchar * |
15823 | 287 purple_base64_encode(const guchar *data, gsize len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
288 { |
27299
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
289 return g_base64_encode(data, len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
290 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
291 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
292 guchar * |
15823 | 293 purple_base64_decode(const char *str, gsize *ret_len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
294 { |
27299
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
295 /* |
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
296 * We want to allow ret_len to be NULL for backward compatibility, |
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
297 * but g_base64_decode() requires a valid length variable. So if |
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
298 * ret_len is NULL then pass in a dummy variable. |
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
299 */ |
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
300 gsize unused; |
3d92b968d49f
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <mark@kingant.net>
parents:
27219
diff
changeset
|
301 return g_base64_decode(str, ret_len != NULL ? ret_len : &unused); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
302 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
303 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
304 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
305 * Quoted Printable Functions (see RFC 2045). |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
306 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
307 guchar * |
15823 | 308 purple_quotedp_decode(const char *str, gsize *ret_len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
309 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
310 char *n, *new; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
311 const char *end, *p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
312 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
313 n = new = g_malloc(strlen (str) + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
314 end = str + strlen(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
315 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
316 for (p = str; p < end; p++, n++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
317 if (*p == '=') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
318 if (p[1] == '\r' && p[2] == '\n') { /* 5.1 #5 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
319 n -= 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
320 p += 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
321 } else if (p[1] == '\n') { /* fuzzy case for 5.1 #5 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
322 n -= 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
323 p += 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
324 } else if (p[1] && p[2]) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
325 char *nibble1 = strchr(xdigits, tolower(p[1])); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
326 char *nibble2 = strchr(xdigits, tolower(p[2])); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
327 if (nibble1 && nibble2) { /* 5.1 #1 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
328 *n = ((nibble1 - xdigits) << 4) | (nibble2 - xdigits); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
329 p += 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
330 } else { /* This should never happen */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
331 *n = *p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
332 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
333 } else { /* This should never happen */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
334 *n = *p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
335 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
336 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
337 else if (*p == '_') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
338 *n = ' '; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
339 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
340 *n = *p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
341 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
342 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
343 *n = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
344 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
345 if (ret_len != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
346 *ret_len = n - new; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
347 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
348 /* Resize to take less space */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
349 /* new = realloc(new, n - new); */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
350 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
351 return (guchar *)new; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
352 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
353 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
354 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
355 * MIME Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
356 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
357 char * |
15823 | 358 purple_mime_decode_field(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
359 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
360 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
361 * This is wing's version, partially based on revo/shx's version |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
362 * See RFC2047 [which apparently obsoletes RFC1342] |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
363 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
364 typedef enum { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
365 state_start, state_equal1, state_question1, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
366 state_charset, state_question2, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
367 state_encoding, state_question3, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
368 state_encoded_text, state_question4, state_equal2 = state_start |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
369 } encoded_word_state_t; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
370 encoded_word_state_t state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
371 const char *cur, *mark; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
372 const char *charset0 = NULL, *encoding0 = NULL, *encoded_text0 = NULL; |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
373 GString *new; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
374 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
375 /* token can be any CHAR (supposedly ISO8859-1/ISO2022), not just ASCII */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
376 #define token_char_p(c) \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
377 (c != ' ' && !iscntrl(c) && !strchr("()<>@,;:\"/[]?.=", c)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
378 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
379 /* But encoded-text must be ASCII; alas, isascii() may not exist */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
380 #define encoded_text_char_p(c) \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
381 ((c & 0x80) == 0 && c != '?' && c != ' ' && isgraph(c)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
382 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
383 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
384 |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
385 new = g_string_new(NULL); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
386 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
387 /* Here we will be looking for encoded words and if they seem to be |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
388 * valid then decode them. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
389 * They are of this form: =?charset?encoding?text?= |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
390 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
391 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
392 for (cur = str, mark = NULL; *cur; cur += 1) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
393 switch (state) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
394 case state_equal1: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
395 if (*cur == '?') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
396 state = state_question1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
397 } else { |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
398 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
399 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
400 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
401 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
402 case state_question1: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
403 if (token_char_p(*cur)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
404 charset0 = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
405 state = state_charset; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
406 } else { /* This should never happen */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
407 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
408 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
409 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
410 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
411 case state_charset: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
412 if (*cur == '?') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
413 state = state_question2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
414 } else if (!token_char_p(*cur)) { /* This should never happen */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
415 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
416 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
417 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
418 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
419 case state_question2: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
420 if (token_char_p(*cur)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
421 encoding0 = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
422 state = state_encoding; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
423 } else { /* This should never happen */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
424 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
425 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
426 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
427 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
428 case state_encoding: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
429 if (*cur == '?') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
430 state = state_question3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
431 } else if (!token_char_p(*cur)) { /* This should never happen */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
432 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
433 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
434 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
435 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
436 case state_question3: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
437 if (encoded_text_char_p(*cur)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
438 encoded_text0 = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
439 state = state_encoded_text; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
440 } else if (*cur == '?') { /* empty string */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
441 encoded_text0 = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
442 state = state_question4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
443 } else { /* This should never happen */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
444 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
445 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
446 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
447 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
448 case state_encoded_text: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
449 if (*cur == '?') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
450 state = state_question4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
451 } else if (!encoded_text_char_p(*cur)) { |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
452 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
453 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
454 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
455 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
456 case state_question4: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
457 if (*cur == '=') { /* Got the whole encoded-word */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
458 char *charset = g_strndup(charset0, encoding0 - charset0 - 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
459 char *encoding = g_strndup(encoding0, encoded_text0 - encoding0 - 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
460 char *encoded_text = g_strndup(encoded_text0, cur - encoded_text0 - 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
461 guchar *decoded = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
462 gsize dec_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
463 if (g_ascii_strcasecmp(encoding, "Q") == 0) |
15823 | 464 decoded = purple_quotedp_decode(encoded_text, &dec_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
465 else if (g_ascii_strcasecmp(encoding, "B") == 0) |
15823 | 466 decoded = purple_base64_decode(encoded_text, &dec_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
467 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
468 decoded = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
469 if (decoded) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
470 gsize len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
471 char *converted = g_convert((const gchar *)decoded, dec_len, "utf-8", charset, NULL, &len, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
472 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
473 if (converted) { |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
474 g_string_append_len(new, converted, len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
475 g_free(converted); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
476 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
477 g_free(decoded); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
478 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
479 g_free(charset); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
480 g_free(encoding); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
481 g_free(encoded_text); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
482 state = state_equal2; /* Restart the FSM */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
483 } else { /* This should never happen */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
484 g_string_append_len(new, mark, cur - mark + 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
485 state = state_start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
486 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
487 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
488 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
489 if (*cur == '=') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
490 mark = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
491 state = state_equal1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
492 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
493 /* Some unencoded text. */ |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
494 g_string_append_c(new, *cur); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
495 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
496 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
497 } /* switch */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
498 } /* for */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
499 |
28252
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
500 if (state != state_start) |
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
501 g_string_append_len(new, mark, cur - mark + 1); |
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
502 |
9358464cdf6a
How about we just use a GString instead of this ridiculous
Mark Doliner <mark@kingant.net>
parents:
28203
diff
changeset
|
503 return g_string_free(new, FALSE);; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
504 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
505 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
506 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
507 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
508 * Date/Time Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
509 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
510 |
18259
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
511 const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
512 { |
18259
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
513 static char buf[7]; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
514 long off; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
515 gint8 min; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
516 gint8 hrs; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
517 struct tm new_tm = *tm; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
518 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
519 mktime(&new_tm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
520 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
521 if (new_tm.tm_isdst < 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
522 g_return_val_if_reached(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
523 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
524 #ifdef _WIN32 |
20503
905891855710
3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@hxbc.us>
parents:
19499
diff
changeset
|
525 if ((off = wpurple_get_tz_offset()) == -1) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
526 return ""; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
527 #else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
528 # ifdef HAVE_TM_GMTOFF |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
529 off = new_tm.tm_gmtoff; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
530 # else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
531 # ifdef HAVE_TIMEZONE |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
532 tzset(); |
18259
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
533 off = -1 * timezone; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
534 # endif /* HAVE_TIMEZONE */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
535 # endif /* !HAVE_TM_GMTOFF */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
536 #endif /* _WIN32 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
537 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
538 min = (off / 60) % 60; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
539 hrs = ((off / 60) - min) / 60; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
540 |
18259
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
541 if(iso) { |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
542 if (0 == off) { |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
543 strcpy(buf, "Z"); |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
544 } else { |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
545 /* please leave the colons...they're optional for iso, but jabber |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
546 * wants them */ |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
547 if(g_snprintf(buf, sizeof(buf), "%+03d:%02d", hrs, ABS(min)) > 6) |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
548 g_return_val_if_reached(""); |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
549 } |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
550 } else { |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
551 if (g_snprintf(buf, sizeof(buf), "%+03d%02d", hrs, ABS(min)) > 5) |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
552 g_return_val_if_reached(""); |
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
553 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
554 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
555 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
556 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
557 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
558 /* Windows doesn't HAVE_STRFTIME_Z_FORMAT, but this seems clearer. -- rlaager */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
559 #if !defined(HAVE_STRFTIME_Z_FORMAT) || defined(_WIN32) |
15823 | 560 static size_t purple_internal_strftime(char *s, size_t max, const char *format, const struct tm *tm) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
561 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
562 const char *start; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
563 const char *c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
564 char *fmt = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
565 |
15823 | 566 /* Yes, this is checked in purple_utf8_strftime(), |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
567 * but better safe than sorry. -- rlaager */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
568 g_return_val_if_fail(format != NULL, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
569 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
570 /* This is fairly efficient, and it only gets |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
571 * executed on Windows or if the underlying |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
572 * system doesn't support the %z format string, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
573 * for strftime() so I think it's good enough. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
574 * -- rlaager */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
575 for (c = start = format; *c ; c++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
576 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
577 if (*c != '%') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
578 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
579 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
580 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
581 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
582 #ifndef HAVE_STRFTIME_Z_FORMAT |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
583 if (*c == 'z') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
584 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
585 char *tmp = g_strdup_printf("%s%.*s%s", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
586 fmt ? fmt : "", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
587 c - start - 1, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
588 start, |
18259
c5c265dff90c
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18147
diff
changeset
|
589 purple_get_tzoff_str(tm, FALSE)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
590 g_free(fmt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
591 fmt = tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
592 start = c + 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
593 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
594 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
595 #ifdef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
596 if (*c == 'Z') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
597 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
598 char *tmp = g_strdup_printf("%s%.*s%s", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
599 fmt ? fmt : "", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
600 c - start - 1, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
601 start, |
15823 | 602 wpurple_get_timezone_abbreviation(tm)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
603 g_free(fmt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
604 fmt = tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
605 start = c + 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
606 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
607 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
608 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
609 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
610 if (fmt != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
611 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
612 size_t ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
613 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
614 if (*start) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
615 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
616 char *tmp = g_strconcat(fmt, start, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
617 g_free(fmt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
618 fmt = tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
619 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
620 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
621 ret = strftime(s, max, fmt, tm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
622 g_free(fmt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
623 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
624 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
625 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
626 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
627 return strftime(s, max, format, tm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
628 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
629 #else /* HAVE_STRFTIME_Z_FORMAT && !_WIN32 */ |
15823 | 630 #define purple_internal_strftime strftime |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
631 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
632 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
633 const char * |
15823 | 634 purple_utf8_strftime(const char *format, const struct tm *tm) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
635 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
636 static char buf[128]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
637 char *locale; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
638 GError *err = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
639 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
640 char *utf8; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
641 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
642 g_return_val_if_fail(format != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
643 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
644 if (tm == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
645 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
646 time_t now = time(NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
647 tm = localtime(&now); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
648 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
649 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
650 locale = g_locale_from_utf8(format, -1, NULL, NULL, &err); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
651 if (err != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
652 { |
19653
941965d6fd88
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19603
diff
changeset
|
653 purple_debug_error("util", "Format conversion failed in purple_utf8_strftime(): %s\n", err->message); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
654 g_error_free(err); |
30150
4e5cfb6ad471
util: Fix a crash in purple_utf8_strftime.
Florian Quèze <florian@instantbird.org>
parents:
30044
diff
changeset
|
655 err = NULL; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
656 locale = g_strdup(format); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
657 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
658 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
659 /* A return value of 0 is either an error (in |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
660 * which case, the contents of the buffer are |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
661 * undefined) or the empty string (in which |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
662 * case, no harm is done here). */ |
15823 | 663 if ((len = purple_internal_strftime(buf, sizeof(buf), locale, tm)) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
664 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
665 g_free(locale); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
666 return ""; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
667 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
668 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
669 g_free(locale); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
670 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
671 utf8 = g_locale_to_utf8(buf, len, NULL, NULL, &err); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
672 if (err != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
673 { |
19653
941965d6fd88
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19603
diff
changeset
|
674 purple_debug_error("util", "Result conversion failed in purple_utf8_strftime(): %s\n", err->message); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
675 g_error_free(err); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
676 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
677 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
678 { |
32315
c2fa3a76a0be
Get rid fo purple_strlcpy and purple_strlcat. These are convenience
Mark Doliner <mark@kingant.net>
parents:
32306
diff
changeset
|
679 g_strlcpy(buf, utf8, sizeof(buf)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
680 g_free(utf8); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
681 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
682 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
683 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
684 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
685 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
686 const char * |
15823 | 687 purple_date_format_short(const struct tm *tm) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
688 { |
15823 | 689 return purple_utf8_strftime("%x", tm); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
690 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
691 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
692 const char * |
15823 | 693 purple_date_format_long(const struct tm *tm) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
694 { |
23723
187a3649f04b
Add a note for translators, because they probably have no idea what
Mark Doliner <mark@kingant.net>
parents:
23709
diff
changeset
|
695 /* |
187a3649f04b
Add a note for translators, because they probably have no idea what
Mark Doliner <mark@kingant.net>
parents:
23709
diff
changeset
|
696 * This string determines how some dates are displayed. The default |
187a3649f04b
Add a note for translators, because they probably have no idea what
Mark Doliner <mark@kingant.net>
parents:
23709
diff
changeset
|
697 * string "%x %X" shows the date then the time. Translators can |
187a3649f04b
Add a note for translators, because they probably have no idea what
Mark Doliner <mark@kingant.net>
parents:
23709
diff
changeset
|
698 * change this to "%X %x" if they want the time to be shown first, |
187a3649f04b
Add a note for translators, because they probably have no idea what
Mark Doliner <mark@kingant.net>
parents:
23709
diff
changeset
|
699 * followed by the date. |
187a3649f04b
Add a note for translators, because they probably have no idea what
Mark Doliner <mark@kingant.net>
parents:
23709
diff
changeset
|
700 */ |
15823 | 701 return purple_utf8_strftime(_("%x %X"), tm); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
702 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
703 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
704 const char * |
15823 | 705 purple_date_format_full(const struct tm *tm) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
706 { |
15823 | 707 return purple_utf8_strftime("%c", tm); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
708 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
709 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
710 const char * |
15823 | 711 purple_time_format(const struct tm *tm) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
712 { |
15823 | 713 return purple_utf8_strftime("%X", tm); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
714 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
715 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
716 time_t |
15823 | 717 purple_time_build(int year, int month, int day, int hour, int min, int sec) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
718 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
719 struct tm tm; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
720 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
721 tm.tm_year = year - 1900; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
722 tm.tm_mon = month - 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
723 tm.tm_mday = day; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
724 tm.tm_hour = hour; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
725 tm.tm_min = min; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
726 tm.tm_sec = sec >= 0 ? sec : time(NULL) % 60; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
727 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
728 return mktime(&tm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
729 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
730 |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
731 /* originally taken from GLib trunk 1-6-11 */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
732 /* originally licensed as LGPL 2+ */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
733 static time_t |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
734 mktime_utc(struct tm *tm) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
735 { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
736 time_t retval; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
737 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
738 #ifndef HAVE_TIMEGM |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
739 static const gint days_before[] = |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
740 { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
741 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
742 }; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
743 #endif |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
744 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
745 #ifndef HAVE_TIMEGM |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
746 if (tm->tm_mon < 0 || tm->tm_mon > 11) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
747 return (time_t) -1; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
748 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
749 retval = (tm->tm_year - 70) * 365; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
750 retval += (tm->tm_year - 68) / 4; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
751 retval += days_before[tm->tm_mon] + tm->tm_mday - 1; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
752 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
753 if (tm->tm_year % 4 == 0 && tm->tm_mon < 2) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
754 retval -= 1; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
755 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
756 retval = ((((retval * 24) + tm->tm_hour) * 60) + tm->tm_min) * 60 + tm->tm_sec; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
757 #else |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
758 retval = timegm (tm); |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
759 #endif /* !HAVE_TIMEGM */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
760 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
761 return retval; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
762 } |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
763 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
764 time_t |
15823 | 765 purple_str_to_time(const char *timestamp, gboolean utc, |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
766 struct tm *tm, long *tz_off, const char **rest) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
767 { |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
768 struct tm t; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
769 const gchar *str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
770 gint year = 0; |
15823 | 771 long tzoff = PURPLE_NO_TZ_OFF; |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
772 time_t retval; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
773 gboolean mktime_with_utc = TRUE; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
774 |
23905
b789b54c5bb2
purple_str_to_time() didn't necessarily set "rest" under all circumstances.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23796
diff
changeset
|
775 if (rest != NULL) |
b789b54c5bb2
purple_str_to_time() didn't necessarily set "rest" under all circumstances.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23796
diff
changeset
|
776 *rest = NULL; |
b789b54c5bb2
purple_str_to_time() didn't necessarily set "rest" under all circumstances.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23796
diff
changeset
|
777 |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
778 g_return_val_if_fail(timestamp != NULL, 0); |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
779 |
31973
1e1b598c725e
Zero the struct tm used for purple_str_to_time().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31571
diff
changeset
|
780 memset(&t, 0, sizeof(struct tm)); |
1e1b598c725e
Zero the struct tm used for purple_str_to_time().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
31571
diff
changeset
|
781 |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
782 str = timestamp; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
783 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
784 /* Strip leading whitespace */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
785 while (g_ascii_isspace(*str)) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
786 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
787 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
788 if (*str == '\0') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
789 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
790 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
791 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
792 return 0; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
793 } |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
794 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
795 if (!g_ascii_isdigit(*str) && *str != '-' && *str != '+') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
796 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
797 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
798 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
799 return 0; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
800 } |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
801 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
802 /* 4 digit year */ |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
803 if (sscanf(str, "%04d", &year) && year >= 1900) { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
804 str += 4; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
805 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
806 if (*str == '-' || *str == '/') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
807 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
808 |
21613
31101e7d275f
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <stu@nosnilmot.com>
parents:
21612
diff
changeset
|
809 t.tm_year = year - 1900; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
810 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
811 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
812 /* 2 digit month */ |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
813 if (!sscanf(str, "%02d", &t.tm_mon)) { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
814 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
815 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
816 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
817 return 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
818 } |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
819 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
820 str += 2; |
21613
31101e7d275f
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <stu@nosnilmot.com>
parents:
21612
diff
changeset
|
821 t.tm_mon -= 1; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
822 |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
823 if (*str == '-' || *str == '/') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
824 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
825 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
826 /* 2 digit day */ |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
827 if (!sscanf(str, "%02d", &t.tm_mday)) { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
828 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
829 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
830 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
831 return 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
832 } |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
833 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
834 str += 2; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
835 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
836 /* Grab the year off the end if there's still stuff */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
837 if (*str == '/' || *str == '-') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
838 /* But make sure we don't read the year twice */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
839 if (year >= 1900) { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
840 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
841 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
842 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
843 return 0; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
844 } |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
845 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
846 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
847 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
848 if (!sscanf(str, "%04d", &t.tm_year)) { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
849 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
850 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
851 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
852 return 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
853 } |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
854 |
21613
31101e7d275f
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <stu@nosnilmot.com>
parents:
21612
diff
changeset
|
855 t.tm_year -= 1900; |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
856 } else if (*str == 'T' || *str == '.') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
857 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
858 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
859 /* Continue grabbing the hours/minutes/seconds */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
860 if ((sscanf(str, "%02d:%02d:%02d", &t.tm_hour, &t.tm_min, &t.tm_sec) == 3 && |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
861 (str += 8)) || |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
862 (sscanf(str, "%02d%02d%02d", &t.tm_hour, &t.tm_min, &t.tm_sec) == 3 && |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
863 (str += 6))) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
864 { |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
865 gint sign, tzhrs, tzmins; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
866 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
867 if (*str == '.') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
868 /* Cut off those pesky micro-seconds */ |
21611
87387eac4348
Fix a bug in purple_str_to_time() that could cause it to try reading past
Stu Tomlinson <stu@nosnilmot.com>
parents:
21580
diff
changeset
|
869 do { |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
870 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
871 } while (*str >= '0' && *str <= '9'); |
23367
ef4dbd2bb696
Allow a 'Z' (UTC) TZ in strings passed to purple_str_to_time. Used for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23250
diff
changeset
|
872 } |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
873 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
874 sign = (*str == '+') ? -1 : 1; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
875 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
876 /* Process the timezone */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
877 if (*str == '+' || *str == '-') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
878 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
879 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
880 if (((sscanf(str, "%02d:%02d", &tzhrs, &tzmins) == 2 && (str += 5)) || |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
881 (sscanf(str, "%02d%02d", &tzhrs, &tzmins) == 2 && (str += 4)))) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
882 { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
883 tzoff = tzhrs * 60 * 60 + tzmins * 60; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
884 tzoff *= sign; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
885 } else { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
886 if (rest != NULL && *str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
887 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
888 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
889 return 0; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
890 } |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
891 } else if (*str == 'Z') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
892 /* 'Z' = Zulu = UTC */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
893 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
894 utc = TRUE; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
895 } else if (!utc) { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
896 /* Local Time */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
897 t.tm_isdst = -1; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
898 mktime_with_utc = FALSE; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
899 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
900 |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
901 if (utc) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
902 tzoff = 0; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
903 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
904 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
905 |
31571
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
906 if (rest != NULL && *str != '\0') { |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
907 /* Strip trailing whitespace */ |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
908 while (g_ascii_isspace(*str)) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
909 str++; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
910 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
911 if (*str != '\0') |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
912 *rest = str; |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
913 } |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
914 |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
915 if (mktime_with_utc) |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
916 retval = mktime_utc(&t); |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
917 else |
c61d3e5ec1da
Fix purple_str_to_time(). Fixes #13131.
morshed.nader@gmail.com
parents:
31534
diff
changeset
|
918 retval = mktime(&t); |
22868
8dadddab10ed
Fix purple_str_to_time() to not break the returned value when we have given
Richard Laager <rlaager@wiktel.com>
parents:
22837
diff
changeset
|
919 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
920 if (tm != NULL) |
21621
b2aa68cdc8b9
I had used memcpy to copy the struct tm to where the caller wants it, but
Stu Tomlinson <stu@nosnilmot.com>
parents:
21613
diff
changeset
|
921 *tm = t; |
22868
8dadddab10ed
Fix purple_str_to_time() to not break the returned value when we have given
Richard Laager <rlaager@wiktel.com>
parents:
22837
diff
changeset
|
922 |
15823 | 923 if (tzoff != PURPLE_NO_TZ_OFF) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
924 retval += tzoff; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
925 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
926 if (tz_off != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
927 *tz_off = tzoff; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
928 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
929 return retval; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
930 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
931 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
932 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
933 * Markup Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
934 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
935 |
27475
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
936 /* |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
937 * This function is stolen from glib's gmarkup.c and modified to not |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
938 * replace ' with ' |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
939 */ |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
940 static void append_escaped_text(GString *str, |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
941 const gchar *text, gssize length) |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
942 { |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
943 const gchar *p; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
944 const gchar *end; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
945 gunichar c; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
946 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
947 p = text; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
948 end = text + length; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
949 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
950 while (p != end) |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
951 { |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
952 const gchar *next; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
953 next = g_utf8_next_char (p); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
954 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
955 switch (*p) |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
956 { |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
957 case '&': |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
958 g_string_append (str, "&"); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
959 break; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
960 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
961 case '<': |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
962 g_string_append (str, "<"); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
963 break; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
964 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
965 case '>': |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
966 g_string_append (str, ">"); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
967 break; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
968 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
969 case '"': |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
970 g_string_append (str, """); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
971 break; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
972 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
973 default: |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
974 c = g_utf8_get_char (p); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
975 if ((0x1 <= c && c <= 0x8) || |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
976 (0xb <= c && c <= 0xc) || |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
977 (0xe <= c && c <= 0x1f) || |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
978 (0x7f <= c && c <= 0x84) || |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
979 (0x86 <= c && c <= 0x9f)) |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
980 g_string_append_printf (str, "&#x%x;", c); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
981 else |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
982 g_string_append_len (str, p, next - p); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
983 break; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
984 } |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
985 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
986 p = next; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
987 } |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
988 } |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
989 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
990 /* This function is stolen from glib's gmarkup.c */ |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
991 gchar *purple_markup_escape_text(const gchar *text, gssize length) |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
992 { |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
993 GString *str; |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
994 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
995 g_return_val_if_fail(text != NULL, NULL); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
996 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
997 if (length < 0) |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
998 length = strlen(text); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
999 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1000 /* prealloc at least as long as original text */ |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1001 str = g_string_sized_new(length); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1002 append_escaped_text(str, text, length); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1003 |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1004 return g_string_free(str, FALSE); |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1005 } |
57fdb7853fc7
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
1006 |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1007 const char * |
16084 | 1008 purple_markup_unescape_entity(const char *text, int *length) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1009 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1010 const char *pln; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1011 int len, pound; |
21794
8f82dc5e0b76
Patch #3848 from Eion Robb: "purple_markup_unescape_entity doesn't escape hexadecimal references", with changes from QuLogic.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21621
diff
changeset
|
1012 char temp[2]; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1013 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1014 if (!text || *text != '&') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1015 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1016 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1017 #define IS_ENTITY(s) (!g_ascii_strncasecmp(text, s, (len = sizeof(s) - 1))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1018 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1019 if(IS_ENTITY("&")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1020 pln = "&"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1021 else if(IS_ENTITY("<")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1022 pln = "<"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1023 else if(IS_ENTITY(">")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1024 pln = ">"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1025 else if(IS_ENTITY(" ")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1026 pln = " "; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1027 else if(IS_ENTITY("©")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1028 pln = "\302\251"; /* or use g_unichar_to_utf8(0xa9); */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1029 else if(IS_ENTITY(""")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1030 pln = "\""; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1031 else if(IS_ENTITY("®")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1032 pln = "\302\256"; /* or use g_unichar_to_utf8(0xae); */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1033 else if(IS_ENTITY("'")) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1034 pln = "\'"; |
21794
8f82dc5e0b76
Patch #3848 from Eion Robb: "purple_markup_unescape_entity doesn't escape hexadecimal references", with changes from QuLogic.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21621
diff
changeset
|
1035 else if(*(text+1) == '#' && |
22876
bb1dc0095856
Revert some bits of the earlier patch not related to custom smileys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22875
diff
changeset
|
1036 (sscanf(text, "&#%u%1[;]", £, temp) == 2 || |
bb1dc0095856
Revert some bits of the earlier patch not related to custom smileys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22875
diff
changeset
|
1037 sscanf(text, "&#x%x%1[;]", £, temp) == 2) && |
21794
8f82dc5e0b76
Patch #3848 from Eion Robb: "purple_markup_unescape_entity doesn't escape hexadecimal references", with changes from QuLogic.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21621
diff
changeset
|
1038 pound != 0) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1039 static char buf[7]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1040 int buflen = g_unichar_to_utf8((gunichar)pound, buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1041 buf[buflen] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1042 pln = buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1043 |
27377
d4c6d2c6fb03
Fix purple_markup_unescape_entity to properly consume '\' and similar.
Paul Aurich <paul@darkrain42.org>
parents:
27363
diff
changeset
|
1044 len = (*(text+2) == 'x' ? 3 : 2); |
d4c6d2c6fb03
Fix purple_markup_unescape_entity to properly consume '\' and similar.
Paul Aurich <paul@darkrain42.org>
parents:
27363
diff
changeset
|
1045 while(isxdigit((gint) text[len])) len++; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1046 if(text[len] == ';') len++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1047 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1048 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1049 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1050 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1051 if (length) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1052 *length = len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1053 return pln; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1054 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1055 |
16084 | 1056 char * |
1057 purple_markup_get_css_property(const gchar *style, | |
1058 const gchar *opt) | |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1059 { |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1060 const gchar *css_str = style; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1061 const gchar *css_value_start; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1062 const gchar *css_value_end; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1063 gchar *tmp; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1064 gchar *ret; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1065 |
24364 | 1066 g_return_val_if_fail(opt != NULL, NULL); |
1067 | |
16084 | 1068 if (!css_str) |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1069 return NULL; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1070 |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1071 /* find the CSS property */ |
16084 | 1072 while (1) |
1073 { | |
1074 /* skip whitespace characters */ | |
1075 while (*css_str && g_ascii_isspace(*css_str)) | |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1076 css_str++; |
16084 | 1077 if (!g_ascii_isalpha(*css_str)) |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1078 return NULL; |
16084 | 1079 if (g_ascii_strncasecmp(css_str, opt, strlen(opt))) |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1080 { |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1081 /* go to next css property positioned after the next ';' */ |
16084 | 1082 while (*css_str && *css_str != '"' && *css_str != ';') |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1083 css_str++; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1084 if(*css_str != ';') |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1085 return NULL; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1086 css_str++; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1087 } |
16084 | 1088 else |
1089 break; | |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1090 } |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1091 |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1092 /* find the CSS value position in the string */ |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1093 css_str += strlen(opt); |
16084 | 1094 while (*css_str && g_ascii_isspace(*css_str)) |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1095 css_str++; |
16084 | 1096 if (*css_str != ':') |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1097 return NULL; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1098 css_str++; |
16084 | 1099 while (*css_str && g_ascii_isspace(*css_str)) |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1100 css_str++; |
16084 | 1101 if (*css_str == '\0' || *css_str == '"' || *css_str == ';') |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1102 return NULL; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1103 |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1104 /* mark the CSS value */ |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1105 css_value_start = css_str; |
16084 | 1106 while (*css_str && *css_str != '"' && *css_str != ';') |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1107 css_str++; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1108 css_value_end = css_str - 1; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1109 |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1110 /* Removes trailing whitespace */ |
16084 | 1111 while (css_value_end > css_value_start && g_ascii_isspace(*css_value_end)) |
16083
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1112 css_value_end--; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1113 |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1114 tmp = g_strndup(css_value_start, css_value_end - css_value_start + 1); |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1115 ret = purple_unescape_html(tmp); |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1116 g_free(tmp); |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1117 |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1118 return ret; |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1119 } |
f2a4b05407d7
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16063
diff
changeset
|
1120 |
27094
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1121 gboolean purple_markup_is_rtl(const char *html) |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1122 { |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1123 GData *attributes; |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1124 const gchar *start, *end; |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1125 gboolean res = FALSE; |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1126 |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1127 if (purple_markup_find_tag("span", html, &start, &end, &attributes)) |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1128 { |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1129 /* tmp is a member of attributes and is free with g_datalist_clear call */ |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1130 const char *tmp = g_datalist_get_data(&attributes, "dir"); |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1131 if (tmp && !g_ascii_strcasecmp(tmp, "RTL")) |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1132 res = TRUE; |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1133 if (!res) |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1134 { |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1135 tmp = g_datalist_get_data(&attributes, "style"); |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1136 if (tmp) |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1137 { |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1138 char *tmp2 = purple_markup_get_css_property(tmp, "direction"); |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1139 if (tmp2 && !g_ascii_strcasecmp(tmp2, "RTL")) |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1140 res = TRUE; |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1141 g_free(tmp2); |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1142 } |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1143 |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1144 } |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1145 g_datalist_clear(&attributes); |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1146 } |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1147 return res; |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1148 } |
af4a4ebc6441
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27051
diff
changeset
|
1149 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1150 gboolean |
15823 | 1151 purple_markup_find_tag(const char *needle, const char *haystack, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1152 const char **start, const char **end, GData **attributes) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1153 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1154 GData *attribs; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1155 const char *cur = haystack; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1156 char *name = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1157 gboolean found = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1158 gboolean in_tag = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1159 gboolean in_attr = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1160 const char *in_quotes = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1161 size_t needlelen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1162 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1163 g_return_val_if_fail( needle != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1164 g_return_val_if_fail( *needle != '\0', FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1165 g_return_val_if_fail( haystack != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1166 g_return_val_if_fail( start != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1167 g_return_val_if_fail( end != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1168 g_return_val_if_fail(attributes != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1169 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1170 needlelen = strlen(needle); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1171 g_datalist_init(&attribs); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1172 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1173 while (*cur && !found) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1174 if (in_tag) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1175 if (in_quotes) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1176 const char *close = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1177 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1178 while (*close && *close != *in_quotes) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1179 close++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1180 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1181 /* if we got the close quote, store the value and carry on from * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1182 * after it. if we ran to the end of the string, point to the NULL * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1183 * and we're outta here */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1184 if (*close) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1185 /* only store a value if we have an attribute name */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1186 if (name) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1187 size_t len = close - cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1188 char *val = g_strndup(cur, len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1189 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1190 g_datalist_set_data_full(&attribs, name, val, g_free); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1191 g_free(name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1192 name = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1193 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1194 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1195 in_quotes = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1196 cur = close + 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1197 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1198 cur = close; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1199 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1200 } else if (in_attr) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1201 const char *close = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1202 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1203 while (*close && *close != '>' && *close != '"' && |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1204 *close != '\'' && *close != ' ' && *close != '=') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1205 close++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1206 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1207 /* if we got the equals, store the name of the attribute. if we got |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1208 * the quote, save the attribute and go straight to quote mode. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1209 * otherwise the tag closed or we reached the end of the string, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1210 * so we can get outta here */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1211 switch (*close) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1212 case '"': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1213 case '\'': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1214 in_quotes = close; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1215 case '=': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1216 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1217 size_t len = close - cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1218 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1219 /* don't store a blank attribute name */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1220 if (len) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1221 g_free(name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1222 name = g_ascii_strdown(cur, len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1223 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1224 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1225 in_attr = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1226 cur = close + 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1227 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1228 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1229 case ' ': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1230 case '>': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1231 in_attr = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1232 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1233 cur = close; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1234 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1235 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1236 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1237 switch (*cur) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1238 case ' ': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1239 /* swallow extra spaces inside tag */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1240 while (*cur && *cur == ' ') cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1241 in_attr = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1242 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1243 case '>': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1244 found = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1245 *end = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1246 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1247 case '"': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1248 case '\'': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1249 in_quotes = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1250 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1251 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1252 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1253 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1254 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1255 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1256 /* if we hit a < followed by the name of our tag... */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1257 if (*cur == '<' && !g_ascii_strncasecmp(cur + 1, needle, needlelen)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1258 *start = cur; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1259 cur = cur + needlelen + 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1260 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1261 /* if we're pointing at a space or a >, we found the right tag. if * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1262 * we're not, we've found a longer tag, so we need to skip to the * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1263 * >, but not being distracted by >s inside quotes. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1264 if (*cur == ' ' || *cur == '>') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1265 in_tag = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1266 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1267 while (*cur && *cur != '"' && *cur != '\'' && *cur != '>') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1268 if (*cur == '"') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1269 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1270 while (*cur && *cur != '"') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1271 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1272 } else if (*cur == '\'') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1273 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1274 while (*cur && *cur != '\'') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1275 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1276 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1277 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1278 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1279 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1280 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1281 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1282 cur++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1283 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1284 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1285 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1286 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1287 /* clean up any attribute name from a premature termination */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1288 g_free(name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1289 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1290 if (found) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1291 *attributes = attribs; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1292 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1293 *start = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1294 *end = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1295 *attributes = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1296 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1297 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1298 return found; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1299 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1300 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1301 gboolean |
15823 | 1302 purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1303 const char *start_token, int skip, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1304 const char *end_token, char check_value, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1305 const char *no_value_token, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1306 const char *display_name, gboolean is_link, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1307 const char *link_prefix, |
15823 | 1308 PurpleInfoFieldFormatCallback format_cb) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1309 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1310 const char *p, *q; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1311 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1312 g_return_val_if_fail(str != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1313 g_return_val_if_fail(user_info != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1314 g_return_val_if_fail(start_token != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1315 g_return_val_if_fail(end_token != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1316 g_return_val_if_fail(display_name != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1317 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1318 p = strstr(str, start_token); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1319 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1320 if (p == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1321 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1322 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1323 p += strlen(start_token) + skip; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1324 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1325 if (p >= str + len) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1326 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1327 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1328 if (check_value != '\0' && *p == check_value) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1329 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1330 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1331 q = strstr(p, end_token); |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
1332 if(q == NULL) //yaz |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
1333 return FALSE; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1334 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1335 /* Trim leading blanks */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1336 while (*p != '\n' && g_ascii_isspace(*p)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1337 p += 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1338 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1339 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1340 /* Trim trailing blanks */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1341 while (q > p && g_ascii_isspace(*(q - 1))) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1342 q -= 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1343 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1344 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1345 /* Don't bother with null strings */ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
1346 if (p >= q) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1347 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1348 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1349 if (q != NULL && (!no_value_token || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1350 (no_value_token && strncmp(p, no_value_token, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1351 strlen(no_value_token))))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1352 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1353 GString *dest = g_string_new(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1354 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1355 if (is_link) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1356 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1357 g_string_append(dest, "<a href=\""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1358 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1359 if (link_prefix) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1360 g_string_append(dest, link_prefix); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1361 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1362 if (format_cb != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1363 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1364 char *reformatted = format_cb(p, q - p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1365 g_string_append(dest, reformatted); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1366 g_free(reformatted); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1367 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1368 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1369 g_string_append_len(dest, p, q - p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1370 g_string_append(dest, "\">"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1371 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1372 if (link_prefix) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1373 g_string_append(dest, link_prefix); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1374 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1375 g_string_append_len(dest, p, q - p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1376 g_string_append(dest, "</a>"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1377 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1378 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1379 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1380 if (format_cb != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1381 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1382 char *reformatted = format_cb(p, q - p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1383 g_string_append(dest, reformatted); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1384 g_free(reformatted); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1385 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1386 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1387 g_string_append_len(dest, p, q - p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1388 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1389 |
32366
99ca503ea087
Rename purple_notify_user_info_add_pair to
Mark Doliner <mark@kingant.net>
parents:
32364
diff
changeset
|
1390 purple_notify_user_info_add_pair_html(user_info, display_name, dest->str); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1391 g_string_free(dest, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1392 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1393 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1394 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1395 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1396 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1397 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1398 |
15823 | 1399 struct purple_parse_tag { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1400 char *src_tag; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1401 char *dest_tag; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1402 gboolean ignore; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1403 }; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1404 |
27716
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1405 /* NOTE: Do not put `do {} while(0)` around this macro (as this is the method |
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1406 recommended in the GCC docs). It contains 'continue's that should |
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1407 affect the while-loop in purple_markup_html_to_xhtml and doing the |
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1408 above would break that. |
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1409 Also, remember to put braces in constructs that require them for |
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1410 multiple statements when using this macro. */ |
27698
3edd01d04004
disapproval of revision '0a9f6836dbe4facb38768025e830328a50c5ddd8'
Mark Doliner <mark@kingant.net>
parents:
27697
diff
changeset
|
1411 #define ALLOW_TAG_ALT(x, y) if(!g_ascii_strncasecmp(c, "<" x " ", strlen("<" x " "))) { \ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1412 const char *o = c + strlen("<" x); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1413 const char *p = NULL, *q = NULL, *r = NULL; \ |
30377
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1414 /* o = iterating over full tag \ |
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1415 * p = > (end of tag) \ |
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1416 * q = start of quoted bit \ |
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1417 * r = < inside tag \ |
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1418 */ \ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1419 GString *innards = g_string_new(""); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1420 while(o && *o) { \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1421 if(!q && (*o == '\"' || *o == '\'') ) { \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1422 q = o; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1423 } else if(q) { \ |
30377
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1424 if(*o == *q) { /* end of quoted bit */ \ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1425 char *unescaped = g_strndup(q+1, o-q-1); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1426 char *escaped = g_markup_escape_text(unescaped, -1); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1427 g_string_append_printf(innards, "%c%s%c", *q, escaped, *q); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1428 g_free(unescaped); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1429 g_free(escaped); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1430 q = NULL; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1431 } else if(*c == '\\') { \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1432 o++; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1433 } \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1434 } else if(*o == '<') { \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1435 r = o; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1436 } else if(*o == '>') { \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1437 p = o; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1438 break; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1439 } else { \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1440 innards = g_string_append_c(innards, *o); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1441 } \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1442 o++; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1443 } \ |
30377
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1444 if(p && !r) { /* got an end of tag and no other < earlier */\ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1445 if(*(p-1) != '/') { \ |
15823 | 1446 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); \ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1447 pt->src_tag = x; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1448 pt->dest_tag = y; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1449 tags = g_list_prepend(tags, pt); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1450 } \ |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1451 if(xhtml) { \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1452 xhtml = g_string_append(xhtml, "<" y); \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1453 xhtml = g_string_append(xhtml, innards->str); \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1454 xhtml = g_string_append_c(xhtml, '>'); \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1455 } \ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1456 c = p + 1; \ |
30377
b06f69ada7a5
Add some comments that meant something to me at some point and might
Stu Tomlinson <stu@nosnilmot.com>
parents:
30267
diff
changeset
|
1457 } else { /* got end of tag with earlier < *or* didn't get anything */ \ |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1458 if(xhtml) \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1459 xhtml = g_string_append(xhtml, "<"); \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1460 if(plain) \ |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1461 plain = g_string_append_c(plain, '<'); \ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1462 c++; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1463 } \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1464 g_string_free(innards, TRUE); \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1465 continue; \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1466 } \ |
27696
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1467 if(!g_ascii_strncasecmp(c, "<" x, strlen("<" x)) && \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1468 (*(c+strlen("<" x)) == '>' || \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1469 !g_ascii_strncasecmp(c+strlen("<" x), "/>", 2))) { \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1470 if(xhtml) \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1471 xhtml = g_string_append(xhtml, "<" y); \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1472 c += strlen("<" x); \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1473 if(*c != '/') { \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1474 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1475 pt->src_tag = x; \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1476 pt->dest_tag = y; \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1477 tags = g_list_prepend(tags, pt); \ |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1478 if(xhtml) \ |
27696
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1479 xhtml = g_string_append_c(xhtml, '>'); \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1480 } else { \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1481 if(xhtml) \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1482 xhtml = g_string_append(xhtml, "/>");\ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1483 } \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1484 c = strchr(c, '>') + 1; \ |
c800bdb5ebbc
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <mark@kingant.net>
parents:
27665
diff
changeset
|
1485 continue; \ |
27710
91333c6c16ef
567c0647 introduced an extra backslash at the end of ALLOW_TAG_ALT
Ka-Hing Cheung <khc@hxbc.us>
parents:
27709
diff
changeset
|
1486 } |
27716
1316f2b180be
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27698
diff
changeset
|
1487 /* Don't forget to check the note above for ALLOW_TAG_ALT. */ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1488 #define ALLOW_TAG(x) ALLOW_TAG_ALT(x, x) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1489 void |
15823 | 1490 purple_markup_html_to_xhtml(const char *html, char **xhtml_out, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1491 char **plain_out) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1492 { |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1493 GString *xhtml = NULL; |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1494 GString *plain = NULL; |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1495 GString *url = NULL; |
19262
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1496 GString *cdata = NULL; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1497 GList *tags = NULL, *tag; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1498 const char *c = html; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1499 char quote = '\0'; |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1500 |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1501 #define CHECK_QUOTE(ptr) if (*(ptr) == '\'' || *(ptr) == '\"') \ |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1502 quote = *(ptr++); \ |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1503 else \ |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1504 quote = '\0'; |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1505 |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1506 #define VALID_CHAR(ptr) (*(ptr) && *(ptr) != quote && (quote || (*(ptr) != ' ' && *(ptr) != '>'))) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1507 |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1508 g_return_if_fail(xhtml_out != NULL || plain_out != NULL); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1509 |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1510 if(xhtml_out) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1511 xhtml = g_string_new(""); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1512 if(plain_out) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1513 plain = g_string_new(""); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1514 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1515 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1516 if(*c == '<') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1517 if(*(c+1) == '/') { /* closing tag */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1518 tag = tags; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1519 while(tag) { |
15823 | 1520 struct purple_parse_tag *pt = tag->data; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1521 if(!g_ascii_strncasecmp((c+2), pt->src_tag, strlen(pt->src_tag)) && *(c+strlen(pt->src_tag)+2) == '>') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1522 c += strlen(pt->src_tag) + 3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1523 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1524 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1525 tag = tag->next; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1526 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1527 if(tag) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1528 while(tags) { |
15823 | 1529 struct purple_parse_tag *pt = tags->data; |
29293
68bc7c617fa0
Fix a corner case where purple_markup_html_to_xhtml generated malformed XHTML.
Paul Aurich <paul@darkrain42.org>
parents:
28650
diff
changeset
|
1530 if(xhtml && !pt->ignore) |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1531 g_string_append_printf(xhtml, "</%s>", pt->dest_tag); |
25385
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
1532 if(plain && purple_strequal(pt->src_tag, "a")) { |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1533 /* if this is a link, we have to add the url to the plaintext, too */ |
21185
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1534 if (cdata && url && |
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1535 (!g_string_equal(cdata, url) && (g_ascii_strncasecmp(url->str, "mailto:", 7) != 0 || |
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1536 g_utf8_collate(url->str + 7, cdata->str) != 0))) |
19262
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1537 g_string_append_printf(plain, " <%s>", g_strstrip(url->str)); |
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1538 if (cdata) { |
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1539 g_string_free(cdata, TRUE); |
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1540 cdata = NULL; |
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1541 } |
19408
cc36a5aac908
Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19262
diff
changeset
|
1542 |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1543 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1544 if(tags == tag) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1545 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1546 tags = g_list_remove(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1547 g_free(pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1548 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1549 g_free(tag->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1550 tags = g_list_remove(tags, tag->data); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1551 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1552 /* a closing tag we weren't expecting... |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1553 * we'll let it slide, if it's really a tag...if it's |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1554 * just a </ we'll escape it properly */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1555 const char *end = c+2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1556 while(*end && g_ascii_isalpha(*end)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1557 end++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1558 if(*end == '>') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1559 c = end+1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1560 } else { |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1561 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1562 xhtml = g_string_append(xhtml, "<"); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1563 if(plain) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1564 plain = g_string_append_c(plain, '<'); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1565 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1566 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1567 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1568 } else { /* opening tag */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1569 ALLOW_TAG("blockquote"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1570 ALLOW_TAG("cite"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1571 ALLOW_TAG("div"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1572 ALLOW_TAG("em"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1573 ALLOW_TAG("h1"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1574 ALLOW_TAG("h2"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1575 ALLOW_TAG("h3"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1576 ALLOW_TAG("h4"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1577 ALLOW_TAG("h5"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1578 ALLOW_TAG("h6"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1579 /* we only allow html to start the message */ |
27698
3edd01d04004
disapproval of revision '0a9f6836dbe4facb38768025e830328a50c5ddd8'
Mark Doliner <mark@kingant.net>
parents:
27697
diff
changeset
|
1580 if(c == html) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1581 ALLOW_TAG("html"); |
27698
3edd01d04004
disapproval of revision '0a9f6836dbe4facb38768025e830328a50c5ddd8'
Mark Doliner <mark@kingant.net>
parents:
27697
diff
changeset
|
1582 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1583 ALLOW_TAG_ALT("i", "em"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1584 ALLOW_TAG_ALT("italic", "em"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1585 ALLOW_TAG("li"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1586 ALLOW_TAG("ol"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1587 ALLOW_TAG("p"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1588 ALLOW_TAG("pre"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1589 ALLOW_TAG("q"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1590 ALLOW_TAG("span"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1591 ALLOW_TAG("ul"); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1592 |
19408
cc36a5aac908
Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19262
diff
changeset
|
1593 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1594 /* we skip <HR> because it's not legal in XHTML-IM. However, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1595 * we still want to send something sensible, so we put a |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1596 * linebreak in its place. <BR> also needs special handling |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1597 * because putting a </BR> to close it would just be dumb. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1598 if((!g_ascii_strncasecmp(c, "<br", 3) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1599 || !g_ascii_strncasecmp(c, "<hr", 3)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1600 && (*(c+3) == '>' || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1601 !g_ascii_strncasecmp(c+3, "/>", 2) || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1602 !g_ascii_strncasecmp(c+3, " />", 3))) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1603 c = strchr(c, '>') + 1; |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1604 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1605 xhtml = g_string_append(xhtml, "<br/>"); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1606 if(plain && *c != '\n') |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1607 plain = g_string_append_c(plain, '\n'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1608 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1609 } |
22191
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1610 if(!g_ascii_strncasecmp(c, "<b>", 3) || !g_ascii_strncasecmp(c, "<bold>", strlen("<bold>")) || !g_ascii_strncasecmp(c, "<strong>", strlen("<strong>"))) { |
15823 | 1611 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
22191
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1612 if (*(c+2) == '>') |
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1613 pt->src_tag = "b"; |
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1614 else if (*(c+2) == 'o') |
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1615 pt->src_tag = "bold"; |
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1616 else |
3634d27ec6f1
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <mark@kingant.net>
parents:
22089
diff
changeset
|
1617 pt->src_tag = "strong"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1618 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1619 tags = g_list_prepend(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1620 c = strchr(c, '>') + 1; |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1621 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1622 xhtml = g_string_append(xhtml, "<span style='font-weight: bold;'>"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1623 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1624 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1625 if(!g_ascii_strncasecmp(c, "<u>", 3) || !g_ascii_strncasecmp(c, "<underline>", strlen("<underline>"))) { |
15823 | 1626 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1627 pt->src_tag = *(c+2) == '>' ? "u" : "underline"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1628 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1629 tags = g_list_prepend(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1630 c = strchr(c, '>') + 1; |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1631 if (xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1632 xhtml = g_string_append(xhtml, "<span style='text-decoration: underline;'>"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1633 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1634 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1635 if(!g_ascii_strncasecmp(c, "<s>", 3) || !g_ascii_strncasecmp(c, "<strike>", strlen("<strike>"))) { |
15823 | 1636 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1637 pt->src_tag = *(c+2) == '>' ? "s" : "strike"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1638 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1639 tags = g_list_prepend(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1640 c = strchr(c, '>') + 1; |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1641 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1642 xhtml = g_string_append(xhtml, "<span style='text-decoration: line-through;'>"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1643 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1644 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1645 if(!g_ascii_strncasecmp(c, "<sub>", 5)) { |
15823 | 1646 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1647 pt->src_tag = "sub"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1648 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1649 tags = g_list_prepend(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1650 c = strchr(c, '>') + 1; |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1651 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1652 xhtml = g_string_append(xhtml, "<span style='vertical-align:sub;'>"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1653 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1654 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1655 if(!g_ascii_strncasecmp(c, "<sup>", 5)) { |
15823 | 1656 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1657 pt->src_tag = "sup"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1658 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1659 tags = g_list_prepend(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1660 c = strchr(c, '>') + 1; |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1661 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1662 xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1663 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1664 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1665 if (!g_ascii_strncasecmp(c, "<img", 4) && (*(c+4) == '>' || *(c+4) == ' ')) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1666 const char *p = c + 4; |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1667 GString *src = NULL, *alt = NULL; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1668 while (*p && *p != '>') { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1669 if (!g_ascii_strncasecmp(p, "src=", 4)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1670 const char *q = p + 4; |
22837
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
1671 if (src) |
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
1672 g_string_free(src, TRUE); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1673 src = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1674 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1675 while (VALID_CHAR(q)) { |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1676 src = g_string_append_c(src, *q); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1677 q++; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1678 } |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1679 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1680 } else if (!g_ascii_strncasecmp(p, "alt=", 4)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1681 const char *q = p + 4; |
22837
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
1682 if (alt) |
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
1683 g_string_free(alt, TRUE); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1684 alt = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1685 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1686 while (VALID_CHAR(q)) { |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1687 alt = g_string_append_c(alt, *q); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1688 q++; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1689 } |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1690 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1691 } else { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1692 p++; |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1693 } |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1694 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1695 if ((c = strchr(p, '>')) != NULL) |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1696 c++; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1697 else |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1698 c = p; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1699 /* src and alt are required! */ |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1700 if(src && xhtml) |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1701 g_string_append_printf(xhtml, "<img src='%s' alt='%s' />", g_strstrip(src->str), alt ? alt->str : ""); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1702 if(alt) { |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1703 if(plain) |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1704 plain = g_string_append(plain, alt->str); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1705 if(!src && xhtml) |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1706 xhtml = g_string_append(xhtml, alt->str); |
20969
17ee8c81c99b
Only free the GString "alt" if it's non-null. This was causing an
Mark Doliner <mark@kingant.net>
parents:
20961
diff
changeset
|
1707 g_string_free(alt, TRUE); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1708 } |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1709 g_string_free(src, TRUE); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1710 continue; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1711 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1712 if (!g_ascii_strncasecmp(c, "<a", 2) && (*(c+2) == '>' || *(c+2) == ' ')) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1713 const char *p = c + 2; |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1714 struct purple_parse_tag *pt; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1715 while (*p && *p != '>') { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1716 if (!g_ascii_strncasecmp(p, "href=", 5)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1717 const char *q = p + 5; |
20587
45b524709475
Fix some incorrect assertions when G_DEBUG=fatal_warnings is set.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20541
diff
changeset
|
1718 if (url) |
45b524709475
Fix some incorrect assertions when G_DEBUG=fatal_warnings is set.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20541
diff
changeset
|
1719 g_string_free(url, TRUE); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1720 url = g_string_new(""); |
22837
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
1721 if (cdata) |
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
1722 g_string_free(cdata, TRUE); |
19262
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1723 cdata = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1724 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1725 while (VALID_CHAR(q)) { |
21299
39231317310a
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <stu@nosnilmot.com>
parents:
21284
diff
changeset
|
1726 int len; |
39231317310a
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <stu@nosnilmot.com>
parents:
21284
diff
changeset
|
1727 if ((*q == '&') && (purple_markup_unescape_entity(q, &len) == NULL)) |
39231317310a
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <stu@nosnilmot.com>
parents:
21284
diff
changeset
|
1728 url = g_string_append(url, "&"); |
39231317310a
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <stu@nosnilmot.com>
parents:
21284
diff
changeset
|
1729 else |
39231317310a
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <stu@nosnilmot.com>
parents:
21284
diff
changeset
|
1730 url = g_string_append_c(url, *q); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1731 q++; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1732 } |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1733 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1734 } else { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1735 p++; |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1736 } |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1737 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1738 if ((c = strchr(p, '>')) != NULL) |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1739 c++; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1740 else |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1741 c = p; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1742 pt = g_new0(struct purple_parse_tag, 1); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1743 pt->src_tag = "a"; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1744 pt->dest_tag = "a"; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1745 tags = g_list_prepend(tags, pt); |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1746 if(xhtml) |
26963
795606e2f7c6
According to RFC 1738, "'" is a valid character in a URL.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
26854
diff
changeset
|
1747 g_string_append_printf(xhtml, "<a href=\"%s\">", url ? g_strstrip(url->str) : ""); |
18493
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1748 continue; |
274a08f56ea6
Per request of rlaager, propagated my xhtml-creator fixes to the main branch. This adds two things: proper <img>-handling and appending URLs to the plain text version like this: <http://www.example.com>.
Andreas Monitzer <pidgin@monitzer.com>
parents:
18397
diff
changeset
|
1749 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1750 if(!g_ascii_strncasecmp(c, "<font", 5) && (*(c+5) == '>' || *(c+5) == ' ')) { |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1751 const char *p = c + 5; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1752 GString *style = g_string_new(""); |
15823 | 1753 struct purple_parse_tag *pt; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1754 while (*p && *p != '>') { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1755 if (!g_ascii_strncasecmp(p, "back=", 5)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1756 const char *q = p + 5; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1757 GString *color = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1758 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1759 while (VALID_CHAR(q)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1760 color = g_string_append_c(color, *q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1761 q++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1762 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1763 g_string_append_printf(style, "background: %s; ", color->str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1764 g_string_free(color, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1765 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1766 } else if (!g_ascii_strncasecmp(p, "color=", 6)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1767 const char *q = p + 6; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1768 GString *color = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1769 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1770 while (VALID_CHAR(q)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1771 color = g_string_append_c(color, *q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1772 q++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1773 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1774 g_string_append_printf(style, "color: %s; ", color->str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1775 g_string_free(color, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1776 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1777 } else if (!g_ascii_strncasecmp(p, "face=", 5)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1778 const char *q = p + 5; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1779 GString *face = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1780 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1781 while (VALID_CHAR(q)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1782 face = g_string_append_c(face, *q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1783 q++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1784 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1785 g_string_append_printf(style, "font-family: %s; ", g_strstrip(face->str)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1786 g_string_free(face, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1787 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1788 } else if (!g_ascii_strncasecmp(p, "size=", 5)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1789 const char *q = p + 5; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1790 int sz; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1791 const char *size = "medium"; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1792 CHECK_QUOTE(q); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1793 sz = atoi(q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1794 switch (sz) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1795 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1796 case 1: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1797 size = "xx-small"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1798 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1799 case 2: |
24828
3d3376237a7c
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <mark@kingant.net>
parents:
24806
diff
changeset
|
1800 size = "small"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1801 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1802 case 3: |
24828
3d3376237a7c
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <mark@kingant.net>
parents:
24806
diff
changeset
|
1803 size = "medium"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1804 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1805 case 4: |
24828
3d3376237a7c
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <mark@kingant.net>
parents:
24806
diff
changeset
|
1806 size = "large"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1807 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1808 case 5: |
24828
3d3376237a7c
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <mark@kingant.net>
parents:
24806
diff
changeset
|
1809 size = "x-large"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1810 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1811 case 6: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1812 case 7: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1813 size = "xx-large"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1814 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1815 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1816 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1817 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1818 g_string_append_printf(style, "font-size: %s; ", size); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1819 p = q; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1820 } else { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1821 p++; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1822 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1823 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1824 if ((c = strchr(p, '>')) != NULL) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1825 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1826 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1827 c = p; |
15823 | 1828 pt = g_new0(struct purple_parse_tag, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1829 pt->src_tag = "font"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1830 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1831 tags = g_list_prepend(tags, pt); |
21028
e4cf0506be74
Avoid g_log warnings when there's no xhtml to append to, and remove a
Stu Tomlinson <stu@nosnilmot.com>
parents:
21015
diff
changeset
|
1832 if(style->len && xhtml) |
18046
58e28ccf08e6
merge of '9d95292d55daedb7f74c7df323ad2c69d347d384'
Sadrul Habib Chowdhury <imadil@gmail.com>
diff
changeset
|
1833 g_string_append_printf(xhtml, "<span style='%s'>", g_strstrip(style->str)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1834 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1835 pt->ignore = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1836 g_string_free(style, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1837 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1838 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1839 if (!g_ascii_strncasecmp(c, "<body ", 6)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1840 const char *p = c + 6; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1841 gboolean did_something = FALSE; |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1842 while (*p && *p != '>') { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1843 if (!g_ascii_strncasecmp(p, "bgcolor=", 8)) { |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1844 const char *q = p + 8; |
15823 | 1845 struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1846 GString *color = g_string_new(""); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1847 CHECK_QUOTE(q); |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1848 while (VALID_CHAR(q)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1849 color = g_string_append_c(color, *q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1850 q++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1851 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1852 if (xhtml) |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1853 g_string_append_printf(xhtml, "<span style='background: %s;'>", g_strstrip(color->str)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1854 g_string_free(color, TRUE); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1855 if ((c = strchr(p, '>')) != NULL) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1856 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1857 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1858 c = p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1859 pt->src_tag = "body"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1860 pt->dest_tag = "span"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1861 tags = g_list_prepend(tags, pt); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1862 did_something = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1863 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1864 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1865 p++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1866 } |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1867 if (did_something) continue; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1868 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1869 /* this has to come after the special case for bgcolor */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1870 ALLOW_TAG("body"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1871 if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1872 char *p = strstr(c + strlen("<!--"), "-->"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1873 if(p) { |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1874 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1875 xhtml = g_string_append(xhtml, "<!--"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1876 c += strlen("<!--"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1877 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1878 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1879 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1880 |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1881 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1882 xhtml = g_string_append(xhtml, "<"); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1883 if(plain) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1884 plain = g_string_append_c(plain, '<'); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1885 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1886 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1887 } else if(*c == '&') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1888 char buf[7]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1889 const char *pln; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1890 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1891 |
16084 | 1892 if ((pln = purple_markup_unescape_entity(c, &len)) == NULL) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1893 len = 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1894 g_snprintf(buf, sizeof(buf), "%c", *c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1895 pln = buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1896 } |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1897 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1898 xhtml = g_string_append_len(xhtml, c, len); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1899 if(plain) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1900 plain = g_string_append(plain, pln); |
21185
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1901 if(cdata) |
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1902 cdata = g_string_append_len(cdata, c, len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1903 c += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1904 } else { |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1905 if(xhtml) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1906 xhtml = g_string_append_c(xhtml, *c); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1907 if(plain) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1908 plain = g_string_append_c(plain, *c); |
19262
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1909 if(cdata) |
450090c68351
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@gmail.com>
parents:
18600
diff
changeset
|
1910 cdata = g_string_append_c(cdata, *c); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1911 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1912 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1913 } |
17706
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1914 if(xhtml) { |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1915 for (tag = tags; tag ; tag = tag->next) { |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1916 struct purple_parse_tag *pt = tag->data; |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1917 if(!pt->ignore) |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1918 g_string_append_printf(xhtml, "</%s>", pt->dest_tag); |
6608a7ab0fd9
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@wiktel.com>
parents:
17705
diff
changeset
|
1919 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1920 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1921 g_list_free(tags); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1922 if(xhtml_out) |
17705
a7a8e4245b33
Remove needless string duplication.
Richard Laager <rlaager@wiktel.com>
parents:
17673
diff
changeset
|
1923 *xhtml_out = g_string_free(xhtml, FALSE); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1924 if(plain_out) |
17705
a7a8e4245b33
Remove needless string duplication.
Richard Laager <rlaager@wiktel.com>
parents:
17673
diff
changeset
|
1925 *plain_out = g_string_free(plain, FALSE); |
18560
481eb37730bf
This was crashing for me when writing a system message when logging
Mark Doliner <mark@kingant.net>
parents:
18493
diff
changeset
|
1926 if(url) |
481eb37730bf
This was crashing for me when writing a system message when logging
Mark Doliner <mark@kingant.net>
parents:
18493
diff
changeset
|
1927 g_string_free(url, TRUE); |
21185
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1928 if (cdata) |
4a0f841e6f26
applied changes from f0cdd16c20f9773e28cd79b36ffcf1c66057e32e
Stu Tomlinson <stu@nosnilmot.com>
parents:
21177
diff
changeset
|
1929 g_string_free(cdata, TRUE); |
23250
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1930 #undef CHECK_QUOTE |
228d576a7dd7
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23144
diff
changeset
|
1931 #undef VALID_CHAR |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1932 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1933 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1934 /* The following are probably reasonable changes: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1935 * - \n should be converted to a normal space |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1936 * - in addition to <br>, <p> and <div> etc. should also be converted into \n |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1937 * - We want to turn </td>#whitespace<td> sequences into a single tab |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1938 * - We want to turn <td> into a single tab (for msn profile "parsing") |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1939 * - We want to turn </tr>#whitespace<tr> sequences into a single \n |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1940 * - <script>...</script> and <style>...</style> should be completely removed |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1941 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1942 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1943 char * |
15823 | 1944 purple_markup_strip_html(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1945 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1946 int i, j, k, entlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1947 gboolean visible = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1948 gboolean closing_td_p = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1949 gchar *str2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1950 const gchar *cdata_close_tag = NULL, *ent; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1951 gchar *href = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1952 int href_st = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1953 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1954 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1955 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1956 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1957 str2 = g_strdup(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1958 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1959 for (i = 0, j = 0; str2[i]; i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1960 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1961 if (str2[i] == '<') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1962 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1963 if (cdata_close_tag) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1964 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1965 /* Note: Don't even assume any other tag is a tag in CDATA */ |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
1966 if (g_ascii_strncasecmp(str2 + i, cdata_close_tag, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1967 strlen(cdata_close_tag)) == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1968 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1969 i += strlen(cdata_close_tag) - 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1970 cdata_close_tag = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1971 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1972 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1973 } |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
1974 else if (g_ascii_strncasecmp(str2 + i, "<td", 3) == 0 && closing_td_p) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1975 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1976 str2[j++] = '\t'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1977 visible = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1978 } |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
1979 else if (g_ascii_strncasecmp(str2 + i, "</td>", 5) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1980 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1981 closing_td_p = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1982 visible = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1983 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1984 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1985 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1986 closing_td_p = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1987 visible = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1988 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1989 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1990 k = i + 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1991 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1992 if(g_ascii_isspace(str2[k])) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1993 visible = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1994 else if (str2[k]) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1995 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1996 /* Scan until we end the tag either implicitly (closed start |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1997 * tag) or explicitly, using a sloppy method (i.e., < or > |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1998 * inside quoted attributes will screw us up) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1999 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2000 while (str2[k] && str2[k] != '<' && str2[k] != '>') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2001 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2002 k++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2003 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2004 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2005 /* If we've got an <a> tag with an href, save the address |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2006 * to print later. */ |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2007 if (g_ascii_strncasecmp(str2 + i, "<a", 2) == 0 && |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2008 g_ascii_isspace(str2[i+2])) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2009 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2010 int st; /* start of href, inclusive [ */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2011 int end; /* end of href, exclusive ) */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2012 char delim = ' '; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2013 /* Find start of href */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2014 for (st = i + 3; st < k; st++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2015 { |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2016 if (g_ascii_strncasecmp(str2+st, "href=", 5) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2017 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2018 st += 5; |
16169
49a1fed5ee37
This was causing problems with jabber in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16153
diff
changeset
|
2019 if (str2[st] == '"' || str2[st] == '\'') |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2020 { |
16169
49a1fed5ee37
This was causing problems with jabber in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16153
diff
changeset
|
2021 delim = str2[st]; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2022 st++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2023 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2024 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2025 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2026 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2027 /* find end of address */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2028 for (end = st; end < k && str2[end] != delim; end++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2029 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2030 /* All the work is done in the loop construct above. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2031 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2032 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2033 /* If there's an address, save it. If there was |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2034 * already one saved, kill it. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2035 if (st < k) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2036 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2037 char *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2038 g_free(href); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2039 tmp = g_strndup(str2 + st, end - st); |
15823 | 2040 href = purple_unescape_html(tmp); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2041 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2042 href_st = j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2043 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2044 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2045 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2046 /* Replace </a> with an ascii representation of the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2047 * address the link was pointing to. */ |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2048 else if (href != NULL && g_ascii_strncasecmp(str2 + i, "</a>", 4) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2049 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2050 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2051 size_t hrlen = strlen(href); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2052 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2053 /* Only insert the href if it's different from the CDATA. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2054 if ((hrlen != j - href_st || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2055 strncmp(str2 + href_st, href, hrlen)) && |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2056 (hrlen != j - href_st + 7 || /* 7 == strlen("http://") */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2057 strncmp(str2 + href_st, href + 7, hrlen - 7))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2058 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2059 str2[j++] = ' '; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2060 str2[j++] = '('; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2061 g_memmove(str2 + j, href, hrlen); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2062 j += hrlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2063 str2[j++] = ')'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2064 g_free(href); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2065 href = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2066 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2067 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2068 |
30044
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2069 /* Check for tags which should be mapped to newline (but ignore some of |
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2070 * the tags at the beginning of the text) */ |
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2071 else if ((j && (g_ascii_strncasecmp(str2 + i, "<p>", 3) == 0 |
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2072 || g_ascii_strncasecmp(str2 + i, "<tr", 3) == 0 |
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2073 || g_ascii_strncasecmp(str2 + i, "<hr", 3) == 0 |
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2074 || g_ascii_strncasecmp(str2 + i, "<li", 3) == 0 |
41142f2bcafb
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
29753
diff
changeset
|
2075 || g_ascii_strncasecmp(str2 + i, "<div", 4) == 0)) |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2076 || g_ascii_strncasecmp(str2 + i, "<br", 3) == 0 |
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2077 || g_ascii_strncasecmp(str2 + i, "</table>", 8) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2078 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2079 str2[j++] = '\n'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2080 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2081 /* Check for tags which begin CDATA and need to be closed */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2082 #if 0 /* FIXME.. option is end tag optional, we can't handle this right now */ |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2083 else if (g_ascii_strncasecmp(str2 + i, "<option", 7) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2084 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2085 /* FIXME: We should not do this if the OPTION is SELECT'd */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2086 cdata_close_tag = "</option>"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2087 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2088 #endif |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2089 else if (g_ascii_strncasecmp(str2 + i, "<script", 7) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2090 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2091 cdata_close_tag = "</script>"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2092 } |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
2093 else if (g_ascii_strncasecmp(str2 + i, "<style", 6) == 0) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2094 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2095 cdata_close_tag = "</style>"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2096 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2097 /* Update the index and continue checking after the tag */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2098 i = (str2[k] == '<' || str2[k] == '\0')? k - 1: k; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2099 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2100 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2101 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2102 else if (cdata_close_tag) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2103 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2104 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2105 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2106 else if (!g_ascii_isspace(str2[i])) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2107 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2108 visible = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2109 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2110 |
16084 | 2111 if (str2[i] == '&' && (ent = purple_markup_unescape_entity(str2 + i, &entlen)) != NULL) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2112 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2113 while (*ent) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2114 str2[j++] = *ent++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2115 i += entlen - 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2116 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2117 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2118 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2119 if (visible) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2120 str2[j++] = g_ascii_isspace(str2[i])? ' ': str2[i]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2121 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2122 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2123 g_free(href); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2124 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2125 str2[j] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2126 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2127 return str2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2128 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2129 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2130 static gboolean |
27886
faee69fed1c2
go back to is_zenkaku_space() due to a problem of i18n url such as ja.wikipedia.org.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27885
diff
changeset
|
2131 is_zenkaku_space(const char *c) |
27877
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2132 { |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2133 gboolean rv = FALSE; |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2134 const guchar *u = (guchar *)c; |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2135 |
27886
faee69fed1c2
go back to is_zenkaku_space() due to a problem of i18n url such as ja.wikipedia.org.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27885
diff
changeset
|
2136 if(!c || !strcmp(c, "") || strlen(c) < 3) |
27877
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2137 rv = FALSE; |
27886
faee69fed1c2
go back to is_zenkaku_space() due to a problem of i18n url such as ja.wikipedia.org.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27885
diff
changeset
|
2138 else if(*u == 0xe3 && *(u+1) == 0x80 && *(u+2) == 0x80) |
27877
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2139 rv = TRUE; |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2140 |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2141 return rv; |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2142 } |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2143 |
d8d514121c71
added is_zenkaku_space() so that url can be separated from trailing multi byte string as well.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27876
diff
changeset
|
2144 static gboolean |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2145 badchar(char c) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2146 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2147 switch (c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2148 case ' ': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2149 case ',': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2150 case '\0': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2151 case '\n': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2152 case '\r': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2153 case '<': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2154 case '>': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2155 case '"': |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2156 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2157 default: |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2158 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2159 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2160 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2161 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2162 static gboolean |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2163 badentity(const char *c) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2164 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2165 if (!g_ascii_strncasecmp(c, "<", 4) || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2166 !g_ascii_strncasecmp(c, ">", 4) || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2167 !g_ascii_strncasecmp(c, """, 6)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2168 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2169 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2170 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2171 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2172 |
30583
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2173 static const char * |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2174 process_link(GString *ret, |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2175 const char *start, const char *c, |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2176 int matchlen, |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2177 const char *urlprefix, |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2178 int inside_paren) |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2179 { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2180 char *url_buf, *tmpurlbuf; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2181 const char *t; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2182 |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2183 for (t = c;; t++) { |
30588 | 2184 if (!badchar(*t) && !badentity(t) && !is_zenkaku_space(t)) |
30583
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2185 continue; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2186 |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2187 if (t - c == matchlen) |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2188 break; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2189 |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2190 if (*t == ',' && *(t + 1) != ' ') { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2191 continue; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2192 } |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2193 |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2194 if (t > start && *(t - 1) == '.') |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2195 t--; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2196 if (t > start && *(t - 1) == ')' && inside_paren > 0) |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2197 t--; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2198 |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2199 url_buf = g_strndup(c, t - c); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2200 tmpurlbuf = purple_unescape_html(url_buf); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2201 g_string_append_printf(ret, "<A HREF=\"%s%s\">%s</A>", |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2202 urlprefix, |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2203 tmpurlbuf, url_buf); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2204 g_free(tmpurlbuf); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2205 g_free(url_buf); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2206 return t; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2207 } |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2208 |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2209 return c; |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2210 } |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2211 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2212 char * |
15823 | 2213 purple_markup_linkify(const char *text) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2214 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2215 const char *c, *t, *q = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2216 char *tmpurlbuf, *url_buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2217 gunichar g; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2218 gboolean inside_html = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2219 int inside_paren = 0; |
27885
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2220 int inside_bracket = 0; |
23709
27eacd38c721
Add NULL checking to purple_markup_linkify().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23583
diff
changeset
|
2221 GString *ret; |
27eacd38c721
Add NULL checking to purple_markup_linkify().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23583
diff
changeset
|
2222 |
27eacd38c721
Add NULL checking to purple_markup_linkify().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23583
diff
changeset
|
2223 if (text == NULL) |
27eacd38c721
Add NULL checking to purple_markup_linkify().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23583
diff
changeset
|
2224 return NULL; |
27eacd38c721
Add NULL checking to purple_markup_linkify().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23583
diff
changeset
|
2225 |
27eacd38c721
Add NULL checking to purple_markup_linkify().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23583
diff
changeset
|
2226 ret = g_string_new(""); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2227 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2228 c = text; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2229 while (*c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2230 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2231 if(*c == '(' && !inside_html) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2232 inside_paren++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2233 ret = g_string_append_c(ret, *c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2234 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2235 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2236 |
27885
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2237 if(*c == '[' && !inside_html) { |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2238 inside_bracket++; |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2239 ret = g_string_append_c(ret, *c); |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2240 c++; |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2241 } |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2242 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2243 if(inside_html) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2244 if(*c == '>') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2245 inside_html = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2246 } else if(!q && (*c == '\"' || *c == '\'')) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2247 q = c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2248 } else if(q) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2249 if(*c == *q) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2250 q = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2251 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2252 } else if(*c == '<') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2253 inside_html = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2254 if (!g_ascii_strncasecmp(c, "<A", 2)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2255 while (1) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2256 if (!g_ascii_strncasecmp(c, "/A>", 3)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2257 inside_html = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2258 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2259 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2260 ret = g_string_append_c(ret, *c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2261 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2262 if (!(*c)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2263 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2264 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2265 } |
30583
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2266 } else if (!g_ascii_strncasecmp(c, "http://", 7)) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2267 c = process_link(ret, text, c, 7, "", inside_paren); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2268 } else if (!g_ascii_strncasecmp(c, "https://", 8)) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2269 c = process_link(ret, text, c, 8, "", inside_paren); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2270 } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2271 c = process_link(ret, text, c, 6, "", inside_paren); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2272 } else if (!g_ascii_strncasecmp(c, "sftp://", 7)) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2273 c = process_link(ret, text, c, 7, "", inside_paren); |
30584
f06be7aff71c
Linkify file://
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30583
diff
changeset
|
2274 } else if (!g_ascii_strncasecmp(c, "file://", 7)) { |
f06be7aff71c
Linkify file://
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30583
diff
changeset
|
2275 c = process_link(ret, text, c, 7, "", inside_paren); |
30583
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2276 } else if (!g_ascii_strncasecmp(c, "www.", 4) && c[4] != '.' && (c == text || badchar(c[-1]) || badentity(c-1))) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2277 c = process_link(ret, text, c, 4, "http://", inside_paren); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2278 } else if (!g_ascii_strncasecmp(c, "ftp.", 4) && c[4] != '.' && (c == text || badchar(c[-1]) || badentity(c-1))) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2279 c = process_link(ret, text, c, 4, "ftp://", inside_paren); |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2280 } else if (!g_ascii_strncasecmp(c, "xmpp:", 5) && (c == text || badchar(c[-1]) || badentity(c-1))) { |
844181ded506
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30377
diff
changeset
|
2281 c = process_link(ret, text, c, 5, "", inside_paren); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2282 } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2283 t = c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2284 while (1) { |
27886
faee69fed1c2
go back to is_zenkaku_space() due to a problem of i18n url such as ja.wikipedia.org.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27885
diff
changeset
|
2285 if (badchar(*t) || badentity(t) || is_zenkaku_space(t)) { |
17191 | 2286 char *d; |
2287 if (t - c == 7) { | |
2288 break; | |
2289 } | |
30585
7f021333e41f
Prevent an invalid read when a message starts with 'mailto:'.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30584
diff
changeset
|
2290 if (t > text && *(t - 1) == '.') |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2291 t--; |
17191 | 2292 if ((d = strstr(c + 7, "?")) != NULL && d < t) |
2293 url_buf = g_strndup(c + 7, d - c - 7); | |
2294 else | |
2295 url_buf = g_strndup(c + 7, t - c - 7); | |
2296 if (!purple_email_is_valid(url_buf)) { | |
2297 g_free(url_buf); | |
2298 break; | |
2299 } | |
2300 g_free(url_buf); | |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2301 url_buf = g_strndup(c, t - c); |
15823 | 2302 tmpurlbuf = purple_unescape_html(url_buf); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2303 g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2304 tmpurlbuf, url_buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2305 g_free(url_buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2306 g_free(tmpurlbuf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2307 c = t; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2308 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2309 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2310 t++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2311 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2312 } else if (c != text && (*c == '@')) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2313 int flag; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2314 GString *gurl_buf = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2315 const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2316 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2317 if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2318 flag = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2319 else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2320 flag = 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2321 gurl_buf = g_string_new(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2322 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2323 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2324 t = c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2325 while (flag) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2326 /* iterate backwards grabbing the local part of an email address */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2327 g = g_utf8_get_char(t); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2328 if (badchar(*t) || (g >= 127) || (*t == '(') || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2329 ((*t == ';') && ((t > (text+2) && (!g_ascii_strncasecmp(t - 3, "<", 4) || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2330 !g_ascii_strncasecmp(t - 3, ">", 4))) || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2331 (t > (text+4) && (!g_ascii_strncasecmp(t - 5, """, 6)))))) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2332 /* local part will already be part of ret, strip it out */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2333 ret = g_string_truncate(ret, ret->len - (c - t)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2334 ret = g_string_append_unichar(ret, g); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2335 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2336 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2337 g_string_prepend_unichar(gurl_buf, g); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2338 t = g_utf8_find_prev_char(text, t); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2339 if (t < text) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2340 ret = g_string_assign(ret, ""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2341 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2342 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2343 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2344 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2345 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2346 t = g_utf8_find_next_char(c, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2347 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2348 while (flag) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2349 /* iterate forwards grabbing the domain part of an email address */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2350 g = g_utf8_get_char(t); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2351 if (badchar(*t) || (g >= 127) || (*t == ')') || badentity(t)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2352 char *d; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2353 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2354 url_buf = g_string_free(gurl_buf, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2355 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2356 /* strip off trailing periods */ |
32364
323876c34a96
Don't use strlen() when all you're trying to do is check if the string
Mark Doliner <mark@kingant.net>
parents:
32320
diff
changeset
|
2357 if (*url_buf) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2358 for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2359 *d = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2360 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2361 |
15823 | 2362 tmpurlbuf = purple_unescape_html(url_buf); |
2363 if (purple_email_is_valid(tmpurlbuf)) { | |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2364 g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2365 tmpurlbuf, url_buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2366 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2367 g_string_append(ret, url_buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2368 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2369 g_free(url_buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2370 g_free(tmpurlbuf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2371 c = t; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2372 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2373 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2374 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2375 g_string_append_unichar(gurl_buf, g); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2376 t = g_utf8_find_next_char(t, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2377 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2378 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2379 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2380 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2381 if(*c == ')' && !inside_html) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2382 inside_paren--; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2383 ret = g_string_append_c(ret, *c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2384 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2385 } |
27885
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2386 if(*c == ']' && !inside_html) { |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2387 inside_bracket--; |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2388 ret = g_string_append_c(ret, *c); |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2389 c++; |
1e9d17432a26
handle '[' and ']' as like '(' and ')'.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27884
diff
changeset
|
2390 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2391 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2392 if (*c == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2393 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2394 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2395 ret = g_string_append_c(ret, *c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2396 c++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2397 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2398 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2399 return g_string_free(ret, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2400 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2401 |
29753
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2402 char *purple_unescape_text(const char *in) |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2403 { |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2404 GString *ret; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2405 const char *c = in; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2406 |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2407 if (in == NULL) |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2408 return NULL; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2409 |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2410 ret = g_string_new(""); |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2411 while (*c) { |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2412 int len; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2413 const char *ent; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2414 |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2415 if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2416 g_string_append(ret, ent); |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2417 c += len; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2418 } else { |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2419 g_string_append_c(ret, *c); |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2420 c++; |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2421 } |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2422 } |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2423 |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2424 return g_string_free(ret, FALSE); |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2425 } |
05d727f76ca9
Combine the three purple_unescape_text()s into one.
Paul Aurich <paul@darkrain42.org>
parents:
29742
diff
changeset
|
2426 |
27350
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2427 char *purple_unescape_html(const char *html) |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2428 { |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2429 GString *ret; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2430 const char *c = html; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2431 |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2432 if (html == NULL) |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2433 return NULL; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2434 |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2435 ret = g_string_new(""); |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2436 while (*c) { |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2437 int len; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2438 const char *ent; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2439 |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2440 if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2441 g_string_append(ret, ent); |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2442 c += len; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2443 } else if (!strncmp(c, "<br>", 4)) { |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2444 g_string_append_c(ret, '\n'); |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2445 c += 4; |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2446 } else { |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2447 g_string_append_c(ret, *c); |
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2448 c++; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2449 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2450 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2451 |
27350
c0075538109b
Formatting changes, no functionality.
Mark Doliner <mark@kingant.net>
parents:
27328
diff
changeset
|
2452 return g_string_free(ret, FALSE); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2453 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2454 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2455 char * |
15823 | 2456 purple_markup_slice(const char *str, guint x, guint y) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2457 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2458 GString *ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2459 GQueue *q; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2460 guint z = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2461 gboolean appended = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2462 gunichar c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2463 char *tag; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2464 |
24363 | 2465 g_return_val_if_fail(str != NULL, NULL); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2466 g_return_val_if_fail(x <= y, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2467 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2468 if (x == y) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2469 return g_strdup(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2470 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2471 ret = g_string_new(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2472 q = g_queue_new(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2473 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2474 while (*str && (z < y)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2475 c = g_utf8_get_char(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2476 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2477 if (c == '<') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2478 char *end = strchr(str, '>'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2479 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2480 if (!end) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2481 g_string_free(ret, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2482 while ((tag = g_queue_pop_head(q))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2483 g_free(tag); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2484 g_queue_free(q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2485 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2486 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2487 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2488 if (!g_ascii_strncasecmp(str, "<img ", 5)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2489 z += strlen("[Image]"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2490 } else if (!g_ascii_strncasecmp(str, "<br", 3)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2491 z += 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2492 } else if (!g_ascii_strncasecmp(str, "<hr>", 4)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2493 z += strlen("\n---\n"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2494 } else if (!g_ascii_strncasecmp(str, "</", 2)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2495 /* pop stack */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2496 char *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2497 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2498 tmp = g_queue_pop_head(q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2499 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2500 /* z += 0; */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2501 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2502 /* push it unto the stack */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2503 char *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2504 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2505 tmp = g_strndup(str, end - str + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2506 g_queue_push_head(q, tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2507 /* z += 0; */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2508 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2509 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2510 if (z >= x) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2511 g_string_append_len(ret, str, end - str + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2512 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2513 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2514 str = end; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2515 } else if (c == '&') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2516 char *end = strchr(str, ';'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2517 if (!end) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2518 g_string_free(ret, TRUE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2519 while ((tag = g_queue_pop_head(q))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2520 g_free(tag); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2521 g_queue_free(q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2522 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2523 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2524 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2525 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2526 if (z >= x) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2527 g_string_append_len(ret, str, end - str + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2528 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2529 z++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2530 str = end; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2531 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2532 if (z == x && z > 0 && !appended) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2533 GList *l = q->tail; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2534 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2535 while (l) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2536 tag = l->data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2537 g_string_append(ret, tag); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2538 l = l->prev; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2539 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2540 appended = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2541 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2542 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2543 if (z >= x) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2544 g_string_append_unichar(ret, c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2545 z++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2546 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2547 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2548 str = g_utf8_next_char(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2549 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2550 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2551 while ((tag = g_queue_pop_head(q))) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2552 char *name; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2553 |
15823 | 2554 name = purple_markup_get_tag_name(tag); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2555 g_string_append_printf(ret, "</%s>", name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2556 g_free(name); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2557 g_free(tag); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2558 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2559 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2560 g_queue_free(q); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2561 return g_string_free(ret, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2562 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2563 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2564 char * |
15823 | 2565 purple_markup_get_tag_name(const char *tag) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2566 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2567 int i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2568 g_return_val_if_fail(tag != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2569 g_return_val_if_fail(*tag == '<', NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2570 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2571 for (i = 1; tag[i]; i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2572 if (tag[i] == '>' || tag[i] == ' ' || tag[i] == '/') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2573 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2574 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2575 return g_strndup(tag+1, i-1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2576 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2577 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2578 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2579 * Path/Filename Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2580 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2581 const char * |
15823 | 2582 purple_home_dir(void) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2583 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2584 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2585 return g_get_home_dir(); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2586 #else |
15823 | 2587 return wpurple_data_dir(); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2588 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2589 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2590 |
16367
6a9ae99e7050
Use ~/.purple only, never ~/.gaim. This is a revert of the functional
Richard Laager <rlaager@wiktel.com>
parents:
16169
diff
changeset
|
2591 /* Returns the argument passed to -c IFF it was present, or ~/.purple. */ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2592 const char * |
15823 | 2593 purple_user_dir(void) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2594 { |
18147
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2595 if (custom_user_dir != NULL) |
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2596 return custom_user_dir; |
20091
2ab6b55ffa3d
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@wiktel.com>
parents:
20074
diff
changeset
|
2597 else if (!user_dir) |
2ab6b55ffa3d
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@wiktel.com>
parents:
20074
diff
changeset
|
2598 user_dir = g_build_filename(purple_home_dir(), ".purple", NULL); |
2ab6b55ffa3d
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@wiktel.com>
parents:
20074
diff
changeset
|
2599 |
2ab6b55ffa3d
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@wiktel.com>
parents:
20074
diff
changeset
|
2600 return user_dir; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2601 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2602 |
15823 | 2603 void purple_util_set_user_dir(const char *dir) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2604 { |
18147
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2605 g_free(custom_user_dir); |
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2606 |
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2607 if (dir != NULL && *dir) |
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2608 custom_user_dir = g_strdup(dir); |
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2609 else |
5653692dcf79
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@wiktel.com>
parents:
18129
diff
changeset
|
2610 custom_user_dir = NULL; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2611 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2612 |
15823 | 2613 int purple_build_dir (const char *path, int mode) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2614 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2615 return g_mkdir_with_parents(path, mode); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2616 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2617 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2618 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2619 * This function is long and beautiful, like my--um, yeah. Anyway, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2620 * it includes lots of error checking so as we don't overwrite |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2621 * people's settings if there is a problem writing the new values. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2622 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2623 gboolean |
19408
cc36a5aac908
Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19262
diff
changeset
|
2624 purple_util_write_data_to_file(const char *filename, const char *data, gssize size) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2625 { |
15823 | 2626 const char *user_dir = purple_user_dir(); |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2627 gchar *filename_full; |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2628 gboolean ret = FALSE; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2629 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2630 g_return_val_if_fail(user_dir != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2631 |
15823 | 2632 purple_debug_info("util", "Writing file %s to directory %s\n", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2633 filename, user_dir); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2634 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2635 /* Ensure the user directory exists */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2636 if (!g_file_test(user_dir, G_FILE_TEST_IS_DIR)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2637 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2638 if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2639 { |
15823 | 2640 purple_debug_error("util", "Error creating directory %s: %s\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
2641 user_dir, g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2642 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2643 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2644 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2645 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2646 filename_full = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", user_dir, filename); |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2647 |
20853
1a44d1a17784
purple_util_write_data_to_file_absolute() should take a signed argument for the size as -1 is used to indicate that the string is nul-delimited. This resolves CID 330.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20685
diff
changeset
|
2648 ret = purple_util_write_data_to_file_absolute(filename_full, data, size); |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2649 |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2650 g_free(filename_full); |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2651 return ret; |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2652 } |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2653 |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2654 gboolean |
20853
1a44d1a17784
purple_util_write_data_to_file_absolute() should take a signed argument for the size as -1 is used to indicate that the string is nul-delimited. This resolves CID 330.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20685
diff
changeset
|
2655 purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size) |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2656 { |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2657 gchar *filename_temp; |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2658 FILE *file; |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2659 size_t real_size, byteswritten; |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2660 struct stat st; |
21172
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2661 #ifndef HAVE_FILENO |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2662 int fd; |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2663 #endif |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2664 |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2665 purple_debug_info("util", "Writing file %s\n", |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2666 filename_full); |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2667 |
20917
aa420b502a6b
nosnilmot points out that this is a better way to ensure the size is valid.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20916
diff
changeset
|
2668 g_return_val_if_fail((size >= -1), FALSE); |
aa420b502a6b
nosnilmot points out that this is a better way to ensure the size is valid.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20916
diff
changeset
|
2669 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2670 filename_temp = g_strdup_printf("%s.save", filename_full); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2671 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2672 /* Remove an old temporary file, if one exists */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2673 if (g_file_test(filename_temp, G_FILE_TEST_EXISTS)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2674 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2675 if (g_unlink(filename_temp) == -1) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2676 { |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2677 purple_debug_error("util", "Error removing old file " |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2678 "%s: %s\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
2679 filename_temp, g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2680 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2681 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2682 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2683 /* Open file */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2684 file = g_fopen(filename_temp, "wb"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2685 if (file == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2686 { |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2687 purple_debug_error("util", "Error opening file %s for " |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2688 "writing: %s\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
2689 filename_temp, g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2690 g_free(filename_temp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2691 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2692 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2693 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2694 /* Write to file */ |
20917
aa420b502a6b
nosnilmot points out that this is a better way to ensure the size is valid.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
20916
diff
changeset
|
2695 real_size = (size == -1) ? strlen(data) : (size_t) size; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2696 byteswritten = fwrite(data, 1, real_size, file); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2697 |
21172
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2698 #ifdef HAVE_FILENO |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2699 /* Apparently XFS (and possibly other filesystems) do not |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2700 * guarantee that file data is flushed before file metadata, |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2701 * so this procedure is insufficient without some flushage. */ |
21177
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2702 if (fflush(file) < 0) { |
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2703 purple_debug_error("util", "Error flushing %s: %s\n", |
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2704 filename_temp, g_strerror(errno)); |
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2705 g_free(filename_temp); |
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2706 fclose(file); |
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2707 return FALSE; |
abc909eeb580
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21172
diff
changeset
|
2708 } |
21172
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2709 if (fsync(fileno(file)) < 0) { |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2710 purple_debug_error("util", "Error syncing file contents for %s: %s\n", |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2711 filename_temp, g_strerror(errno)); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2712 g_free(filename_temp); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2713 fclose(file); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2714 return FALSE; |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2715 } |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2716 #endif |
25415
584063555949
Remove trailing whitespace
Mark Doliner <mark@kingant.net>
parents:
25385
diff
changeset
|
2717 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2718 /* Close file */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2719 if (fclose(file) != 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2720 { |
15823 | 2721 purple_debug_error("util", "Error closing file %s: %s\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
2722 filename_temp, g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2723 g_free(filename_temp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2724 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2725 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2726 |
21172
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2727 #ifndef HAVE_FILENO |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2728 /* This is the same effect (we hope) as the HAVE_FILENO block |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2729 * above, but for systems without fileno(). */ |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2730 if ((fd = open(filename_temp, O_RDWR)) < 0) { |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2731 purple_debug_error("util", "Error opening file %s for flush: %s\n", |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2732 filename_temp, g_strerror(errno)); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2733 g_free(filename_temp); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2734 return FALSE; |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2735 } |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2736 if (fsync(fd) < 0) { |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2737 purple_debug_error("util", "Error syncing %s: %s\n", |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2738 filename_temp, g_strerror(errno)); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2739 g_free(filename_temp); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2740 close(fd); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2741 return FALSE; |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2742 } |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2743 if (close(fd) < 0) { |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2744 purple_debug_error("util", "Error closing %s after sync: %s\n", |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2745 filename_temp, g_strerror(errno)); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2746 g_free(filename_temp); |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2747 return FALSE; |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2748 } |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2749 #endif |
33da7f2a30e4
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21121
diff
changeset
|
2750 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2751 /* Ensure the file is the correct size */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2752 if (byteswritten != real_size) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2753 { |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2754 purple_debug_error("util", "Error writing to file %s: Wrote %" |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2755 G_GSIZE_FORMAT " bytes " |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2756 "but should have written %" G_GSIZE_FORMAT |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2757 "; is your disk full?\n", |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2758 filename_temp, byteswritten, real_size); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2759 g_free(filename_temp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2760 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2761 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2762 /* Use stat to be absolutely sure. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2763 if ((g_stat(filename_temp, &st) == -1) || (st.st_size != real_size)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2764 { |
15823 | 2765 purple_debug_error("util", "Error writing data to file %s: " |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2766 "Incomplete file written; is your disk " |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2767 "full?\n", |
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2768 filename_temp); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2769 g_free(filename_temp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2770 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2771 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2772 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2773 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2774 /* Set file permissions */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2775 if (chmod(filename_temp, S_IRUSR | S_IWUSR) == -1) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2776 { |
15823 | 2777 purple_debug_error("util", "Error setting permissions of file %s: %s\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
2778 filename_temp, g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2779 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2780 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2781 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2782 /* Rename to the REAL name */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2783 if (g_rename(filename_temp, filename_full) == -1) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2784 { |
15823 | 2785 purple_debug_error("util", "Error renaming %s to %s: %s\n", |
19498
7589b218f89a
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19262
diff
changeset
|
2786 filename_temp, filename_full, |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
2787 g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2788 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2789 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2790 g_free(filename_temp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2791 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2792 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2793 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2794 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2795 xmlnode * |
15823 | 2796 purple_util_read_xml_from_file(const char *filename, const char *description) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2797 { |
23462
774ef2a2e7f8
added a more generic function to read xml files (and made the util version into a wrapper) so it can be used by the
Justin Rodriguez <ffdragon@soc.pidgin.im>
parents:
23144
diff
changeset
|
2798 return xmlnode_from_file(purple_user_dir(), filename, description, "util"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2799 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2800 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2801 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2802 * Like mkstemp() but returns a file pointer, uses a pre-set template, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2803 * uses the semantics of tempnam() for the directory to use and allocates |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2804 * the space for the filepath. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2805 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2806 * Caller is responsible for closing the file and removing it when done, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2807 * as well as freeing the space pointed-to by "path" with g_free(). |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2808 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2809 * Returns NULL on failure and cleans up after itself if so. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2810 */ |
15823 | 2811 static const char *purple_mkstemp_templ = {"purpleXXXXXX"}; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2812 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2813 FILE * |
15823 | 2814 purple_mkstemp(char **fpath, gboolean binary) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2815 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2816 const gchar *tmpdir; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2817 int fd; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2818 FILE *fp = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2819 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2820 g_return_val_if_fail(fpath != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2821 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2822 if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { |
15823 | 2823 if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, purple_mkstemp_templ)) != NULL) { |
16869
ec79e3ad09a9
_mktmp() sucks, so use g_mkstemp() instead. This probably doesn't have to be done differently for win32 and elsewhere, but I don't want to be changing things right now.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16556
diff
changeset
|
2824 fd = g_mkstemp(*fpath); |
ec79e3ad09a9
_mktmp() sucks, so use g_mkstemp() instead. This probably doesn't have to be done differently for win32 and elsewhere, but I don't want to be changing things right now.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16556
diff
changeset
|
2825 if(fd == -1) { |
15823 | 2826 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2827 "Couldn't make \"%s\", error: %d\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2828 *fpath, errno); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2829 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2830 if((fp = fdopen(fd, "r+")) == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2831 close(fd); |
15823 | 2832 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2833 "Couldn't fdopen(), error: %d\n", errno); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2834 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2835 } |
16869
ec79e3ad09a9
_mktmp() sucks, so use g_mkstemp() instead. This probably doesn't have to be done differently for win32 and elsewhere, but I don't want to be changing things right now.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16556
diff
changeset
|
2836 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2837 if(!fp) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2838 g_free(*fpath); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2839 *fpath = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2840 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2841 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2842 } else { |
15823 | 2843 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2844 "g_get_tmp_dir() failed!\n"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2845 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2846 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2847 return fp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2848 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2849 |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2850 const char * |
16495
b8b2e35ec7c6
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16483
diff
changeset
|
2851 purple_util_get_image_extension(gconstpointer data, size_t len) |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2852 { |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2853 g_return_val_if_fail(data != NULL, NULL); |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2854 g_return_val_if_fail(len > 0, NULL); |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2855 |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2856 if (len >= 4) |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2857 { |
17729
0a4238600947
Fixed recognition of the extension of certain JPG files. The 4th character may be anything between e0 and ef; the first 3 should be sufficient for a magic number, though a more 'complete' solution would verify that (e0 <= data[3] <= ef). Also, added recognition of TIF files (magic number: MM or II). Refs #725, which gave examples of several JPGs with (data[3] == e1).
Evan Schoenberg <evan.s@dreskin.net>
parents:
17706
diff
changeset
|
2858 if (!strncmp((char *)data, "GIF8", 4)) |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2859 return "gif"; |
17729
0a4238600947
Fixed recognition of the extension of certain JPG files. The 4th character may be anything between e0 and ef; the first 3 should be sufficient for a magic number, though a more 'complete' solution would verify that (e0 <= data[3] <= ef). Also, added recognition of TIF files (magic number: MM or II). Refs #725, which gave examples of several JPGs with (data[3] == e1).
Evan Schoenberg <evan.s@dreskin.net>
parents:
17706
diff
changeset
|
2860 else if (!strncmp((char *)data, "\xff\xd8\xff", 3)) /* 4th may be e0 through ef */ |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2861 return "jpg"; |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2862 else if (!strncmp((char *)data, "\x89PNG", 4)) |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2863 return "png"; |
17729
0a4238600947
Fixed recognition of the extension of certain JPG files. The 4th character may be anything between e0 and ef; the first 3 should be sufficient for a magic number, though a more 'complete' solution would verify that (e0 <= data[3] <= ef). Also, added recognition of TIF files (magic number: MM or II). Refs #725, which gave examples of several JPGs with (data[3] == e1).
Evan Schoenberg <evan.s@dreskin.net>
parents:
17706
diff
changeset
|
2864 else if (!strncmp((char *)data, "MM", 2) || |
0a4238600947
Fixed recognition of the extension of certain JPG files. The 4th character may be anything between e0 and ef; the first 3 should be sufficient for a magic number, though a more 'complete' solution would verify that (e0 <= data[3] <= ef). Also, added recognition of TIF files (magic number: MM or II). Refs #725, which gave examples of several JPGs with (data[3] == e1).
Evan Schoenberg <evan.s@dreskin.net>
parents:
17706
diff
changeset
|
2865 !strncmp((char *)data, "II", 2)) |
0a4238600947
Fixed recognition of the extension of certain JPG files. The 4th character may be anything between e0 and ef; the first 3 should be sufficient for a magic number, though a more 'complete' solution would verify that (e0 <= data[3] <= ef). Also, added recognition of TIF files (magic number: MM or II). Refs #725, which gave examples of several JPGs with (data[3] == e1).
Evan Schoenberg <evan.s@dreskin.net>
parents:
17706
diff
changeset
|
2866 return "tif"; |
17730
647bfc2b2a7b
Where did ekse come from?
Richard Laager <rlaager@wiktel.com>
parents:
17729
diff
changeset
|
2867 else if (!strncmp((char *)data, "BM", 2)) |
17729
0a4238600947
Fixed recognition of the extension of certain JPG files. The 4th character may be anything between e0 and ef; the first 3 should be sufficient for a magic number, though a more 'complete' solution would verify that (e0 <= data[3] <= ef). Also, added recognition of TIF files (magic number: MM or II). Refs #725, which gave examples of several JPGs with (data[3] == e1).
Evan Schoenberg <evan.s@dreskin.net>
parents:
17706
diff
changeset
|
2868 return "bmp"; |
16375
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2869 } |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2870 |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2871 return "icon"; |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2872 } |
391a79778f89
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@wiktel.com>
parents:
16368
diff
changeset
|
2873 |
26263
00c659e55902
Add a note that this function could potentially be faster.
Mark Doliner <mark@kingant.net>
parents:
25415
diff
changeset
|
2874 /* |
27486
52298a298260
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <mark@kingant.net>
parents:
27475
diff
changeset
|
2875 * We thought about using non-cryptographic hashes like CRC32 here. |
52298a298260
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <mark@kingant.net>
parents:
27475
diff
changeset
|
2876 * They would be faster, but we think using something more secure is |
52298a298260
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <mark@kingant.net>
parents:
27475
diff
changeset
|
2877 * important, so that it is more difficult for someone to maliciously |
52298a298260
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <mark@kingant.net>
parents:
27475
diff
changeset
|
2878 * replace one buddy's icon with something else. |
26263
00c659e55902
Add a note that this function could potentially be faster.
Mark Doliner <mark@kingant.net>
parents:
25415
diff
changeset
|
2879 */ |
18039
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2880 char * |
22874
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2881 purple_util_get_image_checksum(gconstpointer image_data, size_t image_len) |
18039
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2882 { |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2883 PurpleCipherContext *context; |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2884 gchar digest[41]; |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2885 |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2886 context = purple_cipher_context_new_by_name("sha1", NULL); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2887 if (context == NULL) |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2888 { |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2889 purple_debug_error("util", "Could not find sha1 cipher\n"); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2890 g_return_val_if_reached(NULL); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2891 } |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2892 |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2893 /* Hash the image data */ |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2894 purple_cipher_context_append(context, image_data, image_len); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2895 if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL)) |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2896 { |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2897 purple_debug_error("util", "Failed to get SHA-1 digest.\n"); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2898 g_return_val_if_reached(NULL); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2899 } |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2900 purple_cipher_context_destroy(context); |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2901 |
22874
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2902 return g_strdup(digest); |
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2903 } |
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2904 |
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2905 char * |
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2906 purple_util_get_image_filename(gconstpointer image_data, size_t image_len) |
02eda4bd2b22
Apply the custom smiley patches from #1187, from Jorge Villaseo (Masca) and
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22191
diff
changeset
|
2907 { |
18039
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2908 /* Return the filename */ |
22875 | 2909 char *checksum = purple_util_get_image_checksum(image_data, image_len); |
2910 char *filename = g_strdup_printf("%s.%s", checksum, | |
18039
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2911 purple_util_get_image_extension(image_data, image_len)); |
22875 | 2912 g_free(checksum); |
2913 return filename; | |
18039
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2914 } |
c588a4a9d287
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@wiktel.com>
parents:
17412
diff
changeset
|
2915 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2916 gboolean |
15823 | 2917 purple_program_is_valid(const char *program) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2918 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2919 GError *error = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2920 char **argv; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2921 gchar *progname; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2922 gboolean is_valid = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2923 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2924 g_return_val_if_fail(program != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2925 g_return_val_if_fail(*program != '\0', FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2926 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2927 if (!g_shell_parse_argv(program, NULL, &argv, &error)) { |
15823 | 2928 purple_debug(PURPLE_DEBUG_ERROR, "program_is_valid", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2929 "Could not parse program '%s': %s\n", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2930 program, error->message); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2931 g_error_free(error); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2932 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2933 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2934 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2935 if (argv == NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2936 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2937 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2938 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2939 progname = g_find_program_in_path(argv[0]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2940 is_valid = (progname != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2941 |
30988
839f3d63acab
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30859
diff
changeset
|
2942 if(purple_debug_is_verbose()) |
839f3d63acab
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30859
diff
changeset
|
2943 purple_debug_info("program_is_valid", "Tested program %s. %s.\n", program, |
839f3d63acab
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30859
diff
changeset
|
2944 is_valid ? "Valid" : "Invalid"); |
839f3d63acab
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30859
diff
changeset
|
2945 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2946 g_strfreev(argv); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2947 g_free(progname); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2948 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2949 return is_valid; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2950 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2951 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2952 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2953 gboolean |
15823 | 2954 purple_running_gnome(void) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2955 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2956 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2957 gchar *tmp = g_find_program_in_path("gnome-open"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2958 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2959 if (tmp == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2960 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2961 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2962 |
21580
07588cb48434
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <stu@nosnilmot.com>
parents:
21299
diff
changeset
|
2963 tmp = (gchar *)g_getenv("GNOME_DESKTOP_SESSION_ID"); |
07588cb48434
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <stu@nosnilmot.com>
parents:
21299
diff
changeset
|
2964 |
07588cb48434
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <stu@nosnilmot.com>
parents:
21299
diff
changeset
|
2965 return ((tmp != NULL) && (*tmp != '\0')); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2966 #else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2967 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2968 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2969 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2970 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2971 gboolean |
15823 | 2972 purple_running_kde(void) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2973 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2974 #ifndef _WIN32 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2975 gchar *tmp = g_find_program_in_path("kfmclient"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2976 const char *session; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2977 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2978 if (tmp == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2979 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2980 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2981 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2982 session = g_getenv("KDE_FULL_SESSION"); |
25385
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
2983 if (purple_strequal(session, "true")) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2984 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2985 |
15823 | 2986 /* If you run Purple from Konsole under !KDE, this will provide a |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2987 * a false positive. Since we do the GNOME checks first, this is |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2988 * only a problem if you're running something !(KDE || GNOME) and |
15823 | 2989 * you run Purple from Konsole. This really shouldn't be a problem. */ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2990 return ((g_getenv("KDEDIR") != NULL) || g_getenv("KDEDIRS") != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2991 #else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2992 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2993 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2994 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2995 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2996 gboolean |
15823 | 2997 purple_running_osx(void) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
2998 { |
16495
b8b2e35ec7c6
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16483
diff
changeset
|
2999 #if defined(__APPLE__) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3000 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3001 #else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3002 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3003 #endif |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3004 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3005 |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3006 typedef union purple_sockaddr { |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3007 struct sockaddr sa; |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3008 struct sockaddr_in sa_in; |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3009 #if defined(AF_INET6) |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3010 struct sockaddr_in6 sa_in6; |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3011 #endif |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3012 struct sockaddr_storage sa_stor; |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3013 } PurpleSockaddr; |
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3014 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3015 char * |
15823 | 3016 purple_fd_get_ip(int fd) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3017 { |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3018 PurpleSockaddr addr; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3019 socklen_t namelen = sizeof(addr); |
30151
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3020 int family; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3021 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3022 g_return_val_if_fail(fd != 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3023 |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3024 if (getsockname(fd, &(addr.sa), &namelen)) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3025 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3026 |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3027 family = addr.sa.sa_family; |
30151
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3028 |
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3029 if (family == AF_INET) { |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3030 return g_strdup(inet_ntoa(addr.sa_in.sin_addr)); |
30152
5be4137c4a68
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <paul@darkrain42.org>
parents:
30151
diff
changeset
|
3031 } |
5be4137c4a68
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <paul@darkrain42.org>
parents:
30151
diff
changeset
|
3032 #if defined(AF_INET6) && defined(HAVE_INET_NTOP) |
5be4137c4a68
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <paul@darkrain42.org>
parents:
30151
diff
changeset
|
3033 else if (family == AF_INET6) { |
30151
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3034 char host[INET6_ADDRSTRLEN]; |
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3035 const char *tmp; |
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3036 |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3037 tmp = inet_ntop(family, &(addr.sa_in6.sin6_addr), host, sizeof(host)); |
30151
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3038 return g_strdup(tmp); |
30152
5be4137c4a68
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <paul@darkrain42.org>
parents:
30151
diff
changeset
|
3039 } |
30151
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3040 #endif |
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3041 |
983a04639c2b
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <paul@darkrain42.org>
parents:
30044
diff
changeset
|
3042 return NULL; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3043 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3044 |
30153
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3045 int |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3046 purple_socket_get_family(int fd) |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3047 { |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3048 PurpleSockaddr addr; |
30153
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3049 socklen_t len = sizeof(addr); |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3050 |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3051 g_return_val_if_fail(fd >= 0, -1); |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3052 |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3053 if (getsockname(fd, &(addr.sa), &len)) |
30153
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3054 return -1; |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3055 |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3056 return addr.sa.sa_family; |
30153
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3057 } |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3058 |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3059 gboolean |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3060 purple_socket_speaks_ipv4(int fd) |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3061 { |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3062 int family; |
30157
37be7bc87ab2
util: Fix some strict-aliasing issues.
Paul Aurich <paul@darkrain42.org>
parents:
30154
diff
changeset
|
3063 |
30153
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3064 g_return_val_if_fail(fd >= 0, FALSE); |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3065 |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3066 family = purple_socket_get_family(fd); |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3067 |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3068 switch (family) { |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3069 case AF_INET: |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3070 return TRUE; |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3071 #if defined(IPV6_V6ONLY) |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3072 case AF_INET6: |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3073 { |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3074 int val = 0; |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3075 guint len = sizeof(val); |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3076 |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3077 if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &val, &len) != 0) |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3078 return FALSE; |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3079 return !val; |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3080 } |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3081 #endif |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3082 default: |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3083 return FALSE; |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3084 } |
35a1cf247168
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <paul@darkrain42.org>
parents:
30152
diff
changeset
|
3085 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3086 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3087 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3088 * String Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3089 **************************************************************************/ |
25385
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3090 gboolean |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3091 purple_strequal(const gchar *left, const gchar *right) |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3092 { |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3093 #if GLIB_CHECK_VERSION(2,16,0) |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3094 return (g_strcmp0(left, right) == 0); |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3095 #else |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3096 return ((left == NULL && right == NULL) || |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3097 (left != NULL && right != NULL && strcmp(left, right) == 0)); |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3098 #endif |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3099 } |
a6e3cb32cdd2
Patch from Paul Aurich to add purple_strequal to help readability and simplicity of code. Ie, don't need to negate the value of strcmp, since this does a strcmp and does the negation for us
Paul Aurich <paul@darkrain42.org>
parents:
25381
diff
changeset
|
3100 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3101 const char * |
15823 | 3102 purple_normalize(const PurpleAccount *account, const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3103 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3104 const char *ret = NULL; |
16556
0cd684e34403
sadrul fixed the next but not last crash
Luke Schierer <lschiere@pidgin.im>
parents:
16495
diff
changeset
|
3105 static char buf[BUF_LEN]; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3106 |
28476
5901b1dd8d07
As darkrain pointed out this isnt caused by that certain bug in glib. My mistake. Recomment, and change how I test str to be NULL and return NULL.
Sulabh Mahajan <sulabh@soc.pidgin.im>
parents:
28473
diff
changeset
|
3107 /* This should prevent a crash if purple_normalize gets called with NULL str, see #10115 */ |
5901b1dd8d07
As darkrain pointed out this isnt caused by that certain bug in glib. My mistake. Recomment, and change how I test str to be NULL and return NULL.
Sulabh Mahajan <sulabh@soc.pidgin.im>
parents:
28473
diff
changeset
|
3108 g_return_val_if_fail(str != NULL, ""); |
28473
862467b37ee6
g_utf8_normalize() for glib ver < 2.15.0 causes a crash when an invalid utf8 string is passed to it (http://bugzilla.gnome.org/show_bug.cgi?id=501997).
Sulabh Mahajan <sulabh@soc.pidgin.im>
parents:
28460
diff
changeset
|
3109 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3110 if (account != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3111 { |
15823 | 3112 PurplePlugin *prpl = purple_find_prpl(purple_account_get_protocol_id(account)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3113 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3114 if (prpl != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3115 { |
15823 | 3116 PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3117 |
28650
dab0d17dc6c1
Minor cleanup. gc->prpl is guarranteed to be a PurplePlugin with
Mark Doliner <mark@kingant.net>
parents:
28619
diff
changeset
|
3118 if (prpl_info->normalize) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3119 ret = prpl_info->normalize(account, str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3120 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3121 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3122 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3123 if (ret == NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3124 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3125 char *tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3126 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3127 tmp = g_utf8_normalize(str, -1, G_NORMALIZE_DEFAULT); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3128 g_snprintf(buf, sizeof(buf), "%s", tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3129 g_free(tmp); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3130 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3131 ret = buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3132 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3133 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3134 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3135 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3136 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3137 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3138 * You probably don't want to call this directly, it is |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3139 * mainly for use as a PRPL callback function. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3140 * comments in util.h. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3141 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3142 const char * |
15823 | 3143 purple_normalize_nocase(const PurpleAccount *account, const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3144 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3145 static char buf[BUF_LEN]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3146 char *tmp1, *tmp2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3147 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3148 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3149 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3150 tmp1 = g_utf8_strdown(str, -1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3151 tmp2 = g_utf8_normalize(tmp1, -1, G_NORMALIZE_DEFAULT); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3152 g_snprintf(buf, sizeof(buf), "%s", tmp2 ? tmp2 : ""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3153 g_free(tmp2); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3154 g_free(tmp1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3155 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3156 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3157 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3158 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3159 gchar * |
15823 | 3160 purple_strdup_withhtml(const gchar *src) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3161 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3162 gulong destsize, i, j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3163 gchar *dest; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3164 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3165 g_return_val_if_fail(src != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3166 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3167 /* New length is (length of src) + (number of \n's * 3) - (number of \r's) + 1 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3168 destsize = 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3169 for (i = 0; src[i] != '\0'; i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3170 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3171 if (src[i] == '\n') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3172 destsize += 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3173 else if (src[i] != '\r') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3174 destsize++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3175 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3176 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3177 dest = g_malloc(destsize); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3178 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3179 /* Copy stuff, ignoring \r's, because they are dumb */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3180 for (i = 0, j = 0; src[i] != '\0'; i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3181 if (src[i] == '\n') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3182 strcpy(&dest[j], "<BR>"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3183 j += 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3184 } else if (src[i] != '\r') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3185 dest[j++] = src[i]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3186 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3187 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3188 dest[destsize-1] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3189 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3190 return dest; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3191 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3192 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3193 gboolean |
15823 | 3194 purple_str_has_prefix(const char *s, const char *p) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3195 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3196 return g_str_has_prefix(s, p); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3197 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3198 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3199 gboolean |
15823 | 3200 purple_str_has_suffix(const char *s, const char *x) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3201 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3202 return g_str_has_suffix(s, x); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3203 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3204 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3205 char * |
15823 | 3206 purple_str_add_cr(const char *text) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3207 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3208 char *ret = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3209 int count = 0, j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3210 guint i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3211 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3212 g_return_val_if_fail(text != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3213 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3214 if (text[0] == '\n') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3215 count++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3216 for (i = 1; i < strlen(text); i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3217 if (text[i] == '\n' && text[i - 1] != '\r') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3218 count++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3219 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3220 if (count == 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3221 return g_strdup(text); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3222 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3223 ret = g_malloc0(strlen(text) + count + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3224 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3225 i = 0; j = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3226 if (text[i] == '\n') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3227 ret[j++] = '\r'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3228 ret[j++] = text[i++]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3229 for (; i < strlen(text); i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3230 if (text[i] == '\n' && text[i - 1] != '\r') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3231 ret[j++] = '\r'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3232 ret[j++] = text[i]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3233 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3234 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3235 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3236 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3237 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3238 void |
15823 | 3239 purple_str_strip_char(char *text, char thechar) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3240 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3241 int i, j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3242 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3243 g_return_if_fail(text != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3244 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3245 for (i = 0, j = 0; text[i]; i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3246 if (text[i] != thechar) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3247 text[j++] = text[i]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3248 |
30859
c60c9c95bb00
These are dead increments.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30692
diff
changeset
|
3249 text[j] = '\0'; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3250 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3251 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3252 void |
15823 | 3253 purple_util_chrreplace(char *string, char delimiter, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3254 char replacement) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3255 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3256 int i = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3257 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3258 g_return_if_fail(string != NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3259 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3260 while (string[i] != '\0') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3261 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3262 if (string[i] == delimiter) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3263 string[i] = replacement; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3264 i++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3265 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3266 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3267 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3268 gchar * |
15823 | 3269 purple_strreplace(const char *string, const char *delimiter, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3270 const char *replacement) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3271 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3272 gchar **split; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3273 gchar *ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3274 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3275 g_return_val_if_fail(string != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3276 g_return_val_if_fail(delimiter != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3277 g_return_val_if_fail(replacement != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3278 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3279 split = g_strsplit(string, delimiter, 0); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3280 ret = g_strjoinv(replacement, split); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3281 g_strfreev(split); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3282 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3283 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3284 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3285 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3286 gchar * |
15823 | 3287 purple_strcasereplace(const char *string, const char *delimiter, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3288 const char *replacement) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3289 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3290 gchar *ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3291 int length_del, length_rep, i, j; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3292 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3293 g_return_val_if_fail(string != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3294 g_return_val_if_fail(delimiter != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3295 g_return_val_if_fail(replacement != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3296 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3297 length_del = strlen(delimiter); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3298 length_rep = strlen(replacement); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3299 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3300 /* Count how many times the delimiter appears */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3301 i = 0; /* position in the source string */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3302 j = 0; /* number of occurrences of "delimiter" */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3303 while (string[i] != '\0') { |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
3304 if (!g_ascii_strncasecmp(&string[i], delimiter, length_del)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3305 i += length_del; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3306 j += length_rep; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3307 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3308 i++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3309 j++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3310 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3311 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3312 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3313 ret = g_malloc(j+1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3314 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3315 i = 0; /* position in the source string */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3316 j = 0; /* position in the destination string */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3317 while (string[i] != '\0') { |
18397
e122b631a657
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18259
diff
changeset
|
3318 if (!g_ascii_strncasecmp(&string[i], delimiter, length_del)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3319 strncpy(&ret[j], replacement, length_rep); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3320 i += length_del; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3321 j += length_rep; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3322 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3323 ret[j] = string[i]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3324 i++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3325 j++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3326 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3327 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3328 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3329 ret[j] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3330 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3331 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3332 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3333 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3334 const char * |
15823 | 3335 purple_strcasestr(const char *haystack, const char *needle) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3336 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3337 size_t hlen, nlen; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3338 const char *tmp, *ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3339 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3340 g_return_val_if_fail(haystack != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3341 g_return_val_if_fail(needle != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3342 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3343 hlen = strlen(haystack); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3344 nlen = strlen(needle); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3345 tmp = haystack, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3346 ret = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3347 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3348 g_return_val_if_fail(hlen > 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3349 g_return_val_if_fail(nlen > 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3350 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3351 while (*tmp && !ret) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3352 if (!g_ascii_strncasecmp(needle, tmp, nlen)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3353 ret = tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3354 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3355 tmp++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3356 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3357 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3358 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3359 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3360 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3361 char * |
32752
5525312cf589
Upgrade PurpleXfer for a 64-bit world.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32680
diff
changeset
|
3362 purple_str_size_to_units(goffset size) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3363 { |
32752
5525312cf589
Upgrade PurpleXfer for a 64-bit world.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32680
diff
changeset
|
3364 static const char * const size_str[] = { "bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB" }; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3365 float size_mag; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3366 int size_index = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3367 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3368 if (size == -1) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3369 return g_strdup(_("Calculating...")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3370 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3371 else if (size == 0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3372 return g_strdup(_("Unknown.")); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3373 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3374 else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3375 size_mag = (float)size; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3376 |
32752
5525312cf589
Upgrade PurpleXfer for a 64-bit world.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32680
diff
changeset
|
3377 while ((size_index < G_N_ELEMENTS(size_str) - 1) && (size_mag > 1024)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3378 size_mag /= 1024; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3379 size_index++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3380 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3381 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3382 if (size_index == 0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3383 return g_strdup_printf("%" G_GSIZE_FORMAT " %s", size, size_str[size_index]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3384 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3385 return g_strdup_printf("%.2f %s", size_mag, size_str[size_index]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3386 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3387 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3388 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3389 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3390 char * |
15823 | 3391 purple_str_seconds_to_string(guint secs) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3392 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3393 char *ret = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3394 guint days, hrs, mins; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3395 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3396 if (secs < 60) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3397 { |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
16017
diff
changeset
|
3398 return g_strdup_printf(dngettext(PACKAGE, "%d second", "%d seconds", secs), secs); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3399 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3400 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3401 days = secs / (60 * 60 * 24); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3402 secs = secs % (60 * 60 * 24); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3403 hrs = secs / (60 * 60); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3404 secs = secs % (60 * 60); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3405 mins = secs / 60; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3406 secs = secs % 60; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3407 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3408 if (days > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3409 { |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
16017
diff
changeset
|
3410 ret = g_strdup_printf(dngettext(PACKAGE, "%d day", "%d days", days), days); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3411 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3412 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3413 if (hrs > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3414 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3415 if (ret != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3416 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3417 char *tmp = g_strdup_printf( |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
16017
diff
changeset
|
3418 dngettext(PACKAGE, "%s, %d hour", "%s, %d hours", hrs), |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3419 ret, hrs); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3420 g_free(ret); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3421 ret = tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3422 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3423 else |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
16017
diff
changeset
|
3424 ret = g_strdup_printf(dngettext(PACKAGE, "%d hour", "%d hours", hrs), hrs); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3425 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3426 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3427 if (mins > 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3428 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3429 if (ret != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3430 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3431 char *tmp = g_strdup_printf( |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
16017
diff
changeset
|
3432 dngettext(PACKAGE, "%s, %d minute", "%s, %d minutes", mins), |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3433 ret, mins); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3434 g_free(ret); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3435 ret = tmp; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3436 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3437 else |
16063
fa8aeab4ca5a
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <stu@nosnilmot.com>
parents:
16017
diff
changeset
|
3438 ret = g_strdup_printf(dngettext(PACKAGE, "%d minute", "%d minutes", mins), mins); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3439 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3440 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3441 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3442 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3443 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3444 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3445 char * |
15823 | 3446 purple_str_binary_to_ascii(const unsigned char *binary, guint len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3447 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3448 GString *ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3449 guint i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3450 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3451 g_return_val_if_fail(len > 0, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3452 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3453 ret = g_string_sized_new(len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3454 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3455 for (i = 0; i < len; i++) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3456 if (binary[i] < 32 || binary[i] > 126) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3457 g_string_append_printf(ret, "\\x%02hhx", binary[i]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3458 else if (binary[i] == '\\') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3459 g_string_append(ret, "\\\\"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3460 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3461 g_string_append_c(ret, binary[i]); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3462 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3463 return g_string_free(ret, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3464 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3465 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3466 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3467 * URI/URL Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3468 **************************************************************************/ |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3469 |
15823 | 3470 void purple_got_protocol_handler_uri(const char *uri) |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3471 { |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3472 char proto[11]; |
28203
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3473 char delimiter; |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3474 const char *tmp, *param_string; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3475 char *cmd; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3476 GHashTable *params = NULL; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3477 int len; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3478 if (!(tmp = strchr(uri, ':')) || tmp == uri) { |
15823 | 3479 purple_debug_error("util", "Malformed protocol handler message - missing protocol.\n"); |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3480 return; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3481 } |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3482 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3483 len = MIN(sizeof(proto) - 1, (tmp - uri)); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3484 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3485 strncpy(proto, uri, len); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3486 proto[len] = '\0'; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3487 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3488 tmp++; |
28203
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3489 |
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3490 if (g_str_equal(proto, "xmpp")) |
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3491 delimiter = ';'; |
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3492 else |
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3493 delimiter = '&'; |
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3494 |
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3495 purple_debug_info("util", "Processing message '%s' for protocol '%s' using delimiter '%c'.\n", tmp, proto, delimiter); |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3496 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3497 if ((param_string = strchr(tmp, '?'))) { |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3498 const char *keyend = NULL, *pairstart; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3499 char *key, *value = NULL; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3500 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3501 cmd = g_strndup(tmp, (param_string - tmp)); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3502 param_string++; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3503 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3504 params = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3505 pairstart = tmp = param_string; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3506 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3507 while (*tmp || *pairstart) { |
28203
da22b6d0151e
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <paul@darkrain42.org>
parents:
27718
diff
changeset
|
3508 if (*tmp == delimiter || !(*tmp)) { |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3509 /* If there is no explicit value */ |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3510 if (keyend == NULL) |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3511 keyend = tmp; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3512 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3513 if (keyend && keyend != pairstart) { |
17048
cc9242ce1435
Patch #756 from EvilSporkMan. Use Datallah's url handling for Dbus
Sean Egan <seanegan@gmail.com>
parents:
17046
diff
changeset
|
3514 char *p; |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3515 key = g_strndup(pairstart, (keyend - pairstart)); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3516 /* If there is an explicit value */ |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3517 if (keyend != tmp && keyend != (tmp - 1)) |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3518 value = g_strndup(keyend + 1, (tmp - keyend - 1)); |
17048
cc9242ce1435
Patch #756 from EvilSporkMan. Use Datallah's url handling for Dbus
Sean Egan <seanegan@gmail.com>
parents:
17046
diff
changeset
|
3519 for (p = key; *p; ++p) |
cc9242ce1435
Patch #756 from EvilSporkMan. Use Datallah's url handling for Dbus
Sean Egan <seanegan@gmail.com>
parents:
17046
diff
changeset
|
3520 *p = g_ascii_tolower(*p); |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3521 g_hash_table_insert(params, key, value); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3522 } |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3523 keyend = value = NULL; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3524 pairstart = (*tmp) ? tmp + 1 : tmp; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3525 } else if (*tmp == '=') |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3526 keyend = tmp; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3527 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3528 if (*tmp) |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3529 tmp++; |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3530 } |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3531 } else |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3532 cmd = g_strdup(tmp); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3533 |
15823 | 3534 purple_signal_emit_return_1(purple_get_core(), "uri-handler", proto, cmd, params); |
15613
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3535 |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3536 g_free(cmd); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3537 if (params) |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3538 g_hash_table_destroy(params); |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3539 } |
b0471b2a1de9
Core support for external protocol URIs. The actual handling of the URIs will be in the prpls and other plugins. This commit only includes the win32 method of actually passing in a URI - the dbus implementation still needs to be written.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15421
diff
changeset
|
3540 |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3541 /* |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3542 * TODO: Should probably add a "gboolean *ret_ishttps" parameter that |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3543 * is set to TRUE if this URL is https, otherwise it is set to |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3544 * FALSE. But that change will break the API. |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3545 * |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3546 * This is important for Yahoo! web messenger login. They now |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3547 * force https login, and if you access the web messenger login |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3548 * page via http then it redirects you to the https version, but |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3549 * purple_util_fetch_url() ignores the "https" and attempts to |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3550 * fetch the URL via http again, which gets redirected again. |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3551 */ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3552 gboolean |
15823 | 3553 purple_url_parse(const char *url, char **ret_host, int *ret_port, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3554 char **ret_path, char **ret_user, char **ret_passwd) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3555 { |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3556 gboolean is_https = FALSE; |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3557 const char * scan_info; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3558 char port_str[6]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3559 int f; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3560 const char *at, *slash; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3561 const char *turl; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3562 char host[256], path[256], user[256], passwd[256]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3563 int port = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3564 /* hyphen at end includes it in control set */ |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3565 |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3566 #define ADDR_CTRL "A-Za-z0-9.-" |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3567 #define PORT_CTRL "0-9" |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3568 #define PAGE_CTRL "A-Za-z0-9.~_/:*!@&%%?=+^-" |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3569 #define USER_CTRL "A-Za-z0-9.~_/*!&%%?=+^-" |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3570 #define PASSWD_CTRL "A-Za-z0-9.~_/*!&%%?=+^-" |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3571 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3572 g_return_val_if_fail(url != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3573 |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3574 if ((turl = purple_strcasestr(url, "http://")) != NULL) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3575 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3576 turl += 7; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3577 url = turl; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3578 } |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3579 else if ((turl = purple_strcasestr(url, "https://")) != NULL) |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3580 { |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3581 is_https = TRUE; |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3582 turl += 8; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3583 url = turl; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3584 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3585 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3586 /* parse out authentication information if supplied */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3587 /* Only care about @ char BEFORE the first / */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3588 at = strchr(url, '@'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3589 slash = strchr(url, '/'); |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3590 f = 0; |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3591 if (at && (!slash || at < slash)) { |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3592 scan_info = "%255[" USER_CTRL "]:%255[" PASSWD_CTRL "]^@"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3593 f = sscanf(url, scan_info, user, passwd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3594 |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3595 if (f == 1) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3596 /* No passwd, possibly just username supplied */ |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3597 scan_info = "%255[" USER_CTRL "]^@"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3598 f = sscanf(url, scan_info, user); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3599 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3600 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3601 url = at+1; /* move pointer after the @ char */ |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3602 } |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3603 |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3604 if (f < 1) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3605 *user = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3606 *passwd = '\0'; |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3607 } else if (f == 1) |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3608 *passwd = '\0'; |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3609 |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3610 scan_info = "%255[" ADDR_CTRL "]:%5[" PORT_CTRL "]/%255[" PAGE_CTRL "]"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3611 f = sscanf(url, scan_info, host, port_str, path); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3612 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3613 if (f == 1) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3614 { |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3615 scan_info = "%255[" ADDR_CTRL "]/%255[" PAGE_CTRL "]"; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3616 f = sscanf(url, scan_info, host, path); |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3617 /* Use the default port */ |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3618 if (is_https) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3619 g_snprintf(port_str, sizeof(port_str), "443"); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3620 else |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3621 g_snprintf(port_str, sizeof(port_str), "80"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3622 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3623 |
23912
7fbc99a1481d
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evan.s@dreskin.net>
parents:
23905
diff
changeset
|
3624 if (f == 0) |
7fbc99a1481d
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evan.s@dreskin.net>
parents:
23905
diff
changeset
|
3625 *host = '\0'; |
7fbc99a1481d
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evan.s@dreskin.net>
parents:
23905
diff
changeset
|
3626 |
7fbc99a1481d
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evan.s@dreskin.net>
parents:
23905
diff
changeset
|
3627 if (f <= 1) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3628 *path = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3629 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3630 sscanf(port_str, "%d", &port); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3631 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3632 if (ret_host != NULL) *ret_host = g_strdup(host); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3633 if (ret_port != NULL) *ret_port = port; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3634 if (ret_path != NULL) *ret_path = g_strdup(path); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3635 if (ret_user != NULL) *ret_user = g_strdup(user); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3636 if (ret_passwd != NULL) *ret_passwd = g_strdup(passwd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3637 |
23913
58e3b422e595
Return FALSE from purple_url_parse() if a host could not be determined
Evan Schoenberg <evan.s@dreskin.net>
parents:
23912
diff
changeset
|
3638 return ((*host != '\0') ? TRUE : FALSE); |
30692
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3639 |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3640 #undef ADDR_CTRL |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3641 #undef PORT_CTRL |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3642 #undef PAGE_CTRL |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3643 #undef USER_CTRL |
1f44f0144ff8
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30617
diff
changeset
|
3644 #undef PASSWD_CTRL |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3645 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3646 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3647 /** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3648 * The arguments to this function are similar to printf. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3649 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3650 static void |
15823 | 3651 purple_util_fetch_url_error(PurpleUtilFetchUrlData *gfud, const char *format, ...) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3652 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3653 gchar *error_message; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3654 va_list args; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3655 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3656 va_start(args, format); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3657 error_message = g_strdup_vprintf(format, args); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3658 va_end(args); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3659 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3660 gfud->callback(gfud, gfud->user_data, NULL, 0, error_message); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3661 g_free(error_message); |
15823 | 3662 purple_util_fetch_url_cancel(gfud); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3663 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3664 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3665 static void url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message); |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3666 static void ssl_url_fetch_connect_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3667 static void ssl_url_fetch_error_cb(PurpleSslConnection *ssl_connection, PurpleSslErrorType error, gpointer data); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3668 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3669 static gboolean |
23390 | 3670 parse_redirect(const char *data, size_t data_len, |
15823 | 3671 PurpleUtilFetchUrlData *gfud) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3672 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3673 gchar *s; |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3674 gchar *new_url, *temp_url, *end; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3675 gboolean full; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3676 int len; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3677 |
20961
4a8366502f01
When checking for redirects in purple_util_fetch_url(), look for
Mark Doliner <mark@kingant.net>
parents:
20917
diff
changeset
|
3678 if ((s = g_strstr_len(data, data_len, "\nLocation: ")) == NULL) |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3679 /* We're not being redirected */ |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3680 return FALSE; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3681 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3682 s += strlen("Location: "); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3683 end = strchr(s, '\r'); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3684 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3685 /* Just in case :) */ |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3686 if (end == NULL) |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3687 end = strchr(s, '\n'); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3688 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3689 if (end == NULL) |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3690 return FALSE; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3691 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3692 len = end - s; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3693 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3694 new_url = g_malloc(len + 1); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3695 strncpy(new_url, s, len); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3696 new_url[len] = '\0'; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3697 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3698 full = gfud->full; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3699 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3700 if (*new_url == '/' || g_strstr_len(new_url, len, "://") == NULL) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3701 { |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3702 temp_url = new_url; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3703 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3704 new_url = g_strdup_printf("%s:%d%s", gfud->website.address, |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3705 gfud->website.port, temp_url); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3706 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3707 g_free(temp_url); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3708 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3709 full = FALSE; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3710 } |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3711 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3712 purple_debug_info("util", "Redirecting to %s\n", new_url); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3713 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3714 gfud->num_times_redirected++; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3715 if (gfud->num_times_redirected >= 5) |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3716 { |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3717 purple_util_fetch_url_error(gfud, |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3718 _("Could not open %s: Redirected too many times"), |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3719 gfud->url); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3720 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3721 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3722 |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3723 /* |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3724 * Try again, with this new location. This code is somewhat |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3725 * ugly, but we need to reuse the gfud because whoever called |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3726 * us is holding a reference to it. |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3727 */ |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3728 g_free(gfud->url); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3729 gfud->url = new_url; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3730 gfud->full = full; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3731 g_free(gfud->request); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3732 gfud->request = NULL; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3733 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3734 if (gfud->is_ssl) { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3735 gfud->is_ssl = FALSE; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3736 purple_ssl_close(gfud->ssl_connection); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3737 gfud->ssl_connection = NULL; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3738 } else { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3739 purple_input_remove(gfud->inpa); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3740 gfud->inpa = 0; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3741 close(gfud->fd); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3742 gfud->fd = -1; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3743 } |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3744 gfud->request_written = 0; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3745 gfud->len = 0; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3746 gfud->data_len = 0; |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3747 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3748 g_free(gfud->website.user); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3749 g_free(gfud->website.passwd); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3750 g_free(gfud->website.address); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3751 g_free(gfud->website.page); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3752 purple_url_parse(new_url, &gfud->website.address, &gfud->website.port, |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3753 &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3754 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3755 if (purple_strcasestr(new_url, "https://") != NULL) { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3756 gfud->is_ssl = TRUE; |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
3757 gfud->ssl_connection = purple_ssl_connect(gfud->account, |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3758 gfud->website.address, gfud->website.port, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3759 ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3760 } else { |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
3761 gfud->connect_data = purple_proxy_connect(NULL, gfud->account, |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3762 gfud->website.address, gfud->website.port, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3763 url_fetch_connect_cb, gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3764 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3765 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3766 if (gfud->ssl_connection == NULL && gfud->connect_data == NULL) |
17673
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3767 { |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3768 purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3769 gfud->website.address); |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3770 } |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3771 |
3d035cdd103b
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <mark@kingant.net>
parents:
17244
diff
changeset
|
3772 return TRUE; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3773 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3774 |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3775 static const char * |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3776 find_header_content(const char *data, size_t data_len, const char *header, size_t header_len) |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3777 { |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3778 const char *p = NULL; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3779 |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3780 if (header_len <= 0) |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3781 header_len = strlen(header); |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3782 |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3783 /* Note: data is _not_ nul-terminated. */ |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3784 if (data_len > header_len) { |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3785 if (header[0] == '\n') |
28283
703b20fa6c5c
g_strncasecmp is deprecated. I thought I removed these already. Anyway, I
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28252
diff
changeset
|
3786 p = (g_ascii_strncasecmp(data, header + 1, header_len - 1) == 0) ? data : NULL; |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3787 if (!p) |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3788 p = purple_strcasestr(data, header); |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3789 if (p) |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3790 p += header_len; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3791 } |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3792 |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3793 /* If we can find the header at all, try to sscanf it. |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3794 * Response headers should end with at least \r\n, so sscanf is safe, |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3795 * if we make sure that there is indeed a \n in our header. |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3796 */ |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3797 if (p && g_strstr_len(p, data_len - (p - data), "\n")) { |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3798 return p; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3799 } |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3800 |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3801 return NULL; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3802 } |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3803 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3804 static size_t |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3805 parse_content_len(const char *data, size_t data_len) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3806 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3807 size_t content_len = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3808 const char *p = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3809 |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3810 p = find_header_content(data, data_len, "\nContent-Length: ", sizeof("\nContent-Length: ") - 1); |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3811 if (p) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3812 sscanf(p, "%" G_GSIZE_FORMAT, &content_len); |
22475
3225c99785b8
Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <mark@kingant.net>
parents:
22344
diff
changeset
|
3813 purple_debug_misc("util", "parsed %" G_GSIZE_FORMAT "\n", content_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3814 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3815 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3816 return content_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3817 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3818 |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3819 static gboolean |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3820 content_is_chunked(const char *data, size_t data_len) |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3821 { |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3822 const char *p = find_header_content(data, data_len, "\nTransfer-Encoding: ", sizeof("\nTransfer-Encoding: ") - 1); |
28283
703b20fa6c5c
g_strncasecmp is deprecated. I thought I removed these already. Anyway, I
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28252
diff
changeset
|
3823 if (p && g_ascii_strncasecmp(p, "chunked", 7) == 0) |
27327
a051f77d86a8
Remove just a tad bit of indirection
Mark Doliner <mark@kingant.net>
parents:
27326
diff
changeset
|
3824 return TRUE; |
a051f77d86a8
Remove just a tad bit of indirection
Mark Doliner <mark@kingant.net>
parents:
27326
diff
changeset
|
3825 |
a051f77d86a8
Remove just a tad bit of indirection
Mark Doliner <mark@kingant.net>
parents:
27326
diff
changeset
|
3826 return FALSE; |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3827 } |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3828 |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3829 /* Process in-place */ |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3830 static void |
27326
7a4f56967512
Use unsigned lengths here and use %zu when reading into the gsize var
Mark Doliner <mark@kingant.net>
parents:
27305
diff
changeset
|
3831 process_chunked_data(char *data, gsize *len) |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3832 { |
27326
7a4f56967512
Use unsigned lengths here and use %zu when reading into the gsize var
Mark Doliner <mark@kingant.net>
parents:
27305
diff
changeset
|
3833 gsize sz; |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3834 gsize newlen = 0; |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3835 char *p = data; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3836 char *s = data; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3837 |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3838 while (*s) { |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3839 /* Read the size of this chunk */ |
27458
70e64287f790
Hey Stu, it should be safe to combine this check, right? It'll make us
Mark Doliner <mark@kingant.net>
parents:
27380
diff
changeset
|
3840 if (sscanf(s, "%" G_GSIZE_MODIFIER "x", &sz) != 1) |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3841 { |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3842 purple_debug_error("util", "Error processing chunked data: " |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3843 "Expected data length, found: %s\n", s); |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3844 break; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3845 } |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3846 if (sz == 0) { |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3847 /* We've reached the last chunk */ |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3848 /* |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3849 * TODO: The spec allows "footers" to follow the last chunk. |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3850 * If there is more data after this line then we should |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3851 * treat it like a header. |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3852 */ |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3853 break; |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3854 } |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3855 |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3856 /* Advance to the start of the data */ |
27363
e8ac5369d567
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <stu@nosnilmot.com>
parents:
27356
diff
changeset
|
3857 s = strstr(s, "\r\n"); |
e8ac5369d567
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <stu@nosnilmot.com>
parents:
27356
diff
changeset
|
3858 if (s == NULL) |
e8ac5369d567
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <stu@nosnilmot.com>
parents:
27356
diff
changeset
|
3859 break; |
e8ac5369d567
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <stu@nosnilmot.com>
parents:
27356
diff
changeset
|
3860 s += 2; |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3861 |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3862 if (s + sz > data + *len) { |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3863 purple_debug_error("util", "Error processing chunked data: " |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3864 "Chunk size %" G_GSIZE_FORMAT " bytes was longer " |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3865 "than the data remaining in the buffer (%" |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3866 G_GSIZE_FORMAT " bytes)\n", sz, data + *len - s); |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3867 } |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3868 |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3869 /* Move all data overtop of the chunk length that we read in earlier */ |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3870 g_memmove(p, s, sz); |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3871 p += sz; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3872 s += sz; |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3873 newlen += sz; |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3874 if (*s != '\r' && *(s + 1) != '\n') { |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3875 purple_debug_error("util", "Error processing chunked data: " |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3876 "Expected \\r\\n, found: %s\n", s); |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3877 break; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3878 } |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3879 s += 2; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3880 } |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3881 |
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3882 /* NULL terminate the data */ |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3883 *p = 0; |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3884 |
27328
e28b627be482
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <mark@kingant.net>
parents:
27327
diff
changeset
|
3885 *len = newlen; |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3886 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3887 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3888 static void |
15823 | 3889 url_fetch_recv_cb(gpointer url_data, gint source, PurpleInputCondition cond) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3890 { |
15823 | 3891 PurpleUtilFetchUrlData *gfud = url_data; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3892 int len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3893 char buf[4096]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3894 char *data_cursor; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3895 gboolean got_eof = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3896 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3897 /* |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3898 * Read data in a loop until we can't read any more! This is a |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3899 * little confusing because we read using a different function |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3900 * depending on whether the socket is ssl or cleartext. |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3901 */ |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3902 while ((gfud->is_ssl && ((len = purple_ssl_read(gfud->ssl_connection, buf, sizeof(buf))) > 0)) || |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3903 (!gfud->is_ssl && (len = read(source, buf, sizeof(buf))) > 0)) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
3904 { |
23742
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
3905 if(gfud->max_len != -1 && (gfud->len + len) > gfud->max_len) { |
24006
fa39c801167d
Fix a TODO and mark a string translatable now that we're not string frozen.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23913
diff
changeset
|
3906 purple_util_fetch_url_error(gfud, _("Error reading from %s: response too long (%d bytes limit)"), |
23742
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
3907 gfud->website.address, gfud->max_len); |
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
3908 return; |
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
3909 } |
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
3910 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3911 /* If we've filled up our buffer, make it bigger */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3912 if((gfud->len + len) >= gfud->data_len) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3913 while((gfud->len + len) >= gfud->data_len) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3914 gfud->data_len += sizeof(buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3915 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3916 gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3917 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3918 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3919 data_cursor = gfud->webdata + gfud->len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3920 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3921 gfud->len += len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3922 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3923 memcpy(data_cursor, buf, len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3924 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3925 gfud->webdata[gfud->len] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3926 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3927 if(!gfud->got_headers) { |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3928 char *end_of_headers; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3929 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3930 /* See if we've reached the end of the headers yet */ |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3931 end_of_headers = strstr(gfud->webdata, "\r\n\r\n"); |
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3932 if (end_of_headers) { |
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3933 char *new_data; |
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3934 guint header_len = (end_of_headers + 4 - gfud->webdata); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3935 size_t content_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3936 |
15823 | 3937 purple_debug_misc("util", "Response headers: '%.*s'\n", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3938 header_len, gfud->webdata); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3939 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3940 /* See if we can find a redirect. */ |
23390 | 3941 if(parse_redirect(gfud->webdata, header_len, gfud)) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3942 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3943 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3944 gfud->got_headers = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3945 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3946 /* No redirect. See if we can find a content length. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3947 content_len = parse_content_len(gfud->webdata, header_len); |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
3948 gfud->chunked = content_is_chunked(gfud->webdata, header_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3949 |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3950 if (content_len == 0) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3951 /* We'll stick with an initial 8192 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3952 content_len = 8192; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3953 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3954 gfud->has_explicit_data_len = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3955 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3956 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3957 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3958 /* If we're returning the headers too, we don't need to clean them out */ |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3959 if (gfud->include_headers) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3960 gfud->data_len = content_len + header_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3961 gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3962 } else { |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3963 size_t body_len = gfud->len - header_len; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3964 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3965 content_len = MAX(content_len, body_len); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3966 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3967 new_data = g_try_malloc(content_len); |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3968 if (new_data == NULL) { |
15823 | 3969 purple_debug_error("util", |
22475
3225c99785b8
Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <mark@kingant.net>
parents:
22344
diff
changeset
|
3970 "Failed to allocate %" G_GSIZE_FORMAT " bytes: %s\n", |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
3971 content_len, g_strerror(errno)); |
15823 | 3972 purple_util_fetch_url_error(gfud, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3973 _("Unable to allocate enough memory to hold " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3974 "the contents from %s. The web server may " |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3975 "be trying something malicious."), |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3976 gfud->website.address); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3977 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3978 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3979 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3980 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3981 /* We may have read part of the body when reading the headers, don't lose it */ |
31360
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3982 if (body_len > 0) { |
65ef833303b0
Minor cleanup. Should be no functionality change, just a variable
Mark Doliner <mark@kingant.net>
parents:
31359
diff
changeset
|
3983 memcpy(new_data, end_of_headers + 4, body_len); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3984 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3985 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3986 /* Out with the old... */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3987 g_free(gfud->webdata); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3988 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3989 /* In with the new. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3990 gfud->len = body_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3991 gfud->data_len = content_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3992 gfud->webdata = new_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3993 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3994 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3995 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3996 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3997 if(gfud->has_explicit_data_len && gfud->len >= gfud->data_len) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3998 got_eof = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3999 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4000 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4001 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4002 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4003 if(len < 0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4004 if(errno == EAGAIN) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4005 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4006 } else { |
15823 | 4007 purple_util_fetch_url_error(gfud, _("Error reading from %s: %s"), |
21121
35b4f1dc4c8d
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21028
diff
changeset
|
4008 gfud->website.address, g_strerror(errno)); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4009 return; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4010 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4011 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4012 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4013 if((len == 0) || got_eof) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4014 gfud->webdata = g_realloc(gfud->webdata, gfud->len + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4015 gfud->webdata[gfud->len] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4016 |
27302
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
4017 if (!gfud->include_headers && gfud->chunked) { |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
4018 /* Process only if we don't want the headers. */ |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
4019 process_chunked_data(gfud->webdata, &gfud->len); |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
4020 } |
716bd29bdc28
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
27219
diff
changeset
|
4021 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4022 gfud->callback(gfud, gfud->user_data, gfud->webdata, gfud->len, NULL); |
15823 | 4023 purple_util_fetch_url_cancel(gfud); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4024 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4025 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4026 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4027 static void ssl_url_fetch_recv_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4028 { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4029 url_fetch_recv_cb(data, -1, cond); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4030 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4031 |
27202
9ff4b4cbc4c9
Allow doxygen to pick up the comment for this function. It's
Mark Doliner <mark@kingant.net>
parents:
27106
diff
changeset
|
4032 /** |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4033 * This function is called when the socket is available to be written |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4034 * to. |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4035 * |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4036 * @param source The file descriptor that can be written to. This can |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4037 * be an http connection or it can be the SSL connection of an |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4038 * https request. So be careful what you use it for! If it's |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4039 * an https request then use purple_ssl_write() instead of |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4040 * writing to it directly. |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4041 */ |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4042 static void |
15823 | 4043 url_fetch_send_cb(gpointer data, gint source, PurpleInputCondition cond) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4044 { |
15823 | 4045 PurpleUtilFetchUrlData *gfud; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4046 int len, total_len; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4047 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4048 gfud = data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4049 |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4050 if (gfud->request == NULL) { |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4051 |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4052 PurpleProxyInfo *gpi = purple_proxy_get_setup(gfud->account); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4053 GString *request_str = g_string_new(NULL); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4054 |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4055 g_string_append_printf(request_str, "GET %s%s HTTP/%s\r\n" |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4056 "Connection: close\r\n", |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4057 (gfud->full ? "" : "/"), |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4058 (gfud->full ? (gfud->url ? gfud->url : "") : (gfud->website.page ? gfud->website.page : "")), |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4059 (gfud->http11 ? "1.1" : "1.0")); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4060 |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4061 if (gfud->user_agent) |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4062 g_string_append_printf(request_str, "User-Agent: %s\r\n", gfud->user_agent); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4063 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4064 /* Host header is not forbidden in HTTP/1.0 requests, and HTTP/1.1 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4065 * clients must know how to handle the "chunked" transfer encoding. |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4066 * Purple doesn't know how to handle "chunked", so should always send |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4067 * the Host header regardless, to get around some observed problems |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4068 */ |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4069 g_string_append_printf(request_str, "Accept: */*\r\n" |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4070 "Host: %s\r\n", |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4071 (gfud->website.address ? gfud->website.address : "")); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4072 |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4073 if (purple_proxy_info_get_username(gpi) != NULL |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4074 && (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_ENVVAR |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4075 || purple_proxy_info_get_type(gpi) == PURPLE_PROXY_HTTP)) { |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4076 /* This chunk of code was copied from proxy.c http_start_connect_tunneling() |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4077 * This is really a temporary hack - we need a more complete proxy handling solution, |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4078 * so I didn't think it was worthwhile to refactor for reuse |
31534
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
31360
diff
changeset
|
4079 */ |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4080 char *t1, *t2, *ntlm_type1; |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4081 char hostname[256]; |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4082 int ret; |
31534
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
31360
diff
changeset
|
4083 |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4084 ret = gethostname(hostname, sizeof(hostname)); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4085 hostname[sizeof(hostname) - 1] = '\0'; |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4086 if (ret < 0 || hostname[0] == '\0') { |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4087 purple_debug_warning("util", "proxy - gethostname() failed -- is your hostname set?"); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4088 strcpy(hostname, "localhost"); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4089 } |
31534
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
31360
diff
changeset
|
4090 |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4091 t1 = g_strdup_printf("%s:%s", |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4092 purple_proxy_info_get_username(gpi), |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4093 purple_proxy_info_get_password(gpi) ? |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4094 purple_proxy_info_get_password(gpi) : ""); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4095 t2 = purple_base64_encode((const guchar *)t1, strlen(t1)); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4096 g_free(t1); |
31534
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
31360
diff
changeset
|
4097 |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4098 ntlm_type1 = purple_ntlm_gen_type1(hostname, ""); |
31534
a8cc50c2279f
Remove trailing whitespace
Richard Laager <rlaager@wiktel.com>
parents:
31360
diff
changeset
|
4099 |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4100 g_string_append_printf(request_str, |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4101 "Proxy-Authorization: Basic %s\r\n" |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4102 "Proxy-Authorization: NTLM %s\r\n" |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4103 "Proxy-Connection: Keep-Alive\r\n", |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4104 t2, ntlm_type1); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4105 g_free(ntlm_type1); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4106 g_free(t2); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4107 } |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4108 |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4109 g_string_append(request_str, "\r\n"); |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4110 |
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4111 gfud->request = g_string_free(request_str, FALSE); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4112 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4113 |
27380
e9279f0e551a
Convert all uses of PURPLE_UNSAFE_DEBUG to the new API I added.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27377
diff
changeset
|
4114 if(purple_debug_is_unsafe()) |
25908
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4115 purple_debug_misc("util", "Request: '%s'\n", gfud->request); |
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4116 else |
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4117 purple_debug_misc("util", "request constructed\n"); |
15823 | 4118 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4119 total_len = strlen(gfud->request); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4120 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4121 if (gfud->is_ssl) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4122 len = purple_ssl_write(gfud->ssl_connection, gfud->request + gfud->request_written, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4123 total_len - gfud->request_written); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4124 else |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4125 len = write(gfud->fd, gfud->request + gfud->request_written, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4126 total_len - gfud->request_written); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4127 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4128 if (len < 0 && errno == EAGAIN) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4129 return; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4130 else if (len < 0) { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4131 purple_util_fetch_url_error(gfud, _("Error writing to %s: %s"), |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4132 gfud->website.address, g_strerror(errno)); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4133 return; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4134 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4135 gfud->request_written += len; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4136 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4137 if (gfud->request_written < total_len) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4138 return; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4139 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4140 /* We're done writing our request, now start reading the response */ |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4141 if (gfud->is_ssl) { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4142 purple_input_remove(gfud->inpa); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4143 gfud->inpa = 0; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4144 purple_ssl_input_add(gfud->ssl_connection, ssl_url_fetch_recv_cb, gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4145 } else { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4146 purple_input_remove(gfud->inpa); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4147 gfud->inpa = purple_input_add(gfud->fd, PURPLE_INPUT_READ, url_fetch_recv_cb, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4148 gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4149 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4150 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4151 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4152 static void |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4153 url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4154 { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4155 PurpleUtilFetchUrlData *gfud; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4156 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4157 gfud = url_data; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4158 gfud->connect_data = NULL; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4159 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4160 if (source == -1) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4161 { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4162 purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4163 (gfud->website.address ? gfud->website.address : ""), error_message); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4164 return; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4165 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4166 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4167 gfud->fd = source; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4168 |
15823 | 4169 gfud->inpa = purple_input_add(source, PURPLE_INPUT_WRITE, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4170 url_fetch_send_cb, gfud); |
15823 | 4171 url_fetch_send_cb(gfud, source, PURPLE_INPUT_WRITE); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4172 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4173 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4174 static void ssl_url_fetch_connect_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4175 { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4176 PurpleUtilFetchUrlData *gfud; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4177 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4178 gfud = data; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4179 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4180 gfud->inpa = purple_input_add(ssl_connection->fd, PURPLE_INPUT_WRITE, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4181 url_fetch_send_cb, gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4182 url_fetch_send_cb(gfud, ssl_connection->fd, PURPLE_INPUT_WRITE); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4183 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4184 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4185 static void ssl_url_fetch_error_cb(PurpleSslConnection *ssl_connection, PurpleSslErrorType error, gpointer data) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4186 { |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4187 PurpleUtilFetchUrlData *gfud; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4188 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4189 gfud = data; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4190 gfud->ssl_connection = NULL; |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4191 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4192 purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4193 (gfud->website.address ? gfud->website.address : ""), |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4194 purple_ssl_strerror(error)); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4195 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4196 |
15823 | 4197 PurpleUtilFetchUrlData * |
32679
904686722499
* purple_util_fetch_url_request_len() renamed to purple_util_fetch_url_request().
andrew.victor@mxit.com
parents:
32516
diff
changeset
|
4198 purple_util_fetch_url_request(PurpleAccount *account, |
27051
f303787f144d
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
26977
diff
changeset
|
4199 const char *url, gboolean full, const char *user_agent, gboolean http11, |
f303787f144d
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
26977
diff
changeset
|
4200 const char *request, gboolean include_headers, gssize max_len, |
f303787f144d
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
26977
diff
changeset
|
4201 PurpleUtilFetchUrlCallback callback, void *user_data) |
f303787f144d
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
26977
diff
changeset
|
4202 { |
15823 | 4203 PurpleUtilFetchUrlData *gfud; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4204 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4205 g_return_val_if_fail(url != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4206 g_return_val_if_fail(callback != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4207 |
27380
e9279f0e551a
Convert all uses of PURPLE_UNSAFE_DEBUG to the new API I added.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27377
diff
changeset
|
4208 if(purple_debug_is_unsafe()) |
25908
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4209 purple_debug_info("util", |
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4210 "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", |
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4211 url, full, user_agent?user_agent:"(null)", http11); |
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4212 else |
fb89c9f6e57a
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
24828
diff
changeset
|
4213 purple_debug_info("util", "requesting to fetch a URL\n"); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4214 |
15823 | 4215 gfud = g_new0(PurpleUtilFetchUrlData, 1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4216 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4217 gfud->callback = callback; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4218 gfud->user_data = user_data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4219 gfud->url = g_strdup(url); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4220 gfud->user_agent = g_strdup(user_agent); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4221 gfud->http11 = http11; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4222 gfud->full = full; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4223 gfud->request = g_strdup(request); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4224 gfud->include_headers = include_headers; |
20592
383b9180b2c8
Initialize file-descriptors to -1.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20587
diff
changeset
|
4225 gfud->fd = -1; |
23742
de8f2d3e538a
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <daniel.atallah@gmail.com>
parents:
23723
diff
changeset
|
4226 gfud->max_len = max_len; |
30613
a414593d0a78
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <daniel.atallah@gmail.com>
parents:
30586
diff
changeset
|
4227 gfud->account = account; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4228 |
15823 | 4229 purple_url_parse(url, &gfud->website.address, &gfud->website.port, |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4230 &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4231 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4232 if (purple_strcasestr(url, "https://") != NULL) { |
26272
2db8a92b3cde
Add a friendly error message if something uses
Mark Doliner <mark@kingant.net>
parents:
26263
diff
changeset
|
4233 if (!purple_ssl_is_supported()) { |
2db8a92b3cde
Add a friendly error message if something uses
Mark Doliner <mark@kingant.net>
parents:
26263
diff
changeset
|
4234 purple_util_fetch_url_error(gfud, |
27460
6275df9d2d62
Change strings in libpurple/protocols/jabber/auth.c and util.c a little bit
Mark Doliner <mark@kingant.net>
parents:
27458
diff
changeset
|
4235 _("Unable to connect to %s: %s"), |
6275df9d2d62
Change strings in libpurple/protocols/jabber/auth.c and util.c a little bit
Mark Doliner <mark@kingant.net>
parents:
27458
diff
changeset
|
4236 gfud->website.address, |
6275df9d2d62
Change strings in libpurple/protocols/jabber/auth.c and util.c a little bit
Mark Doliner <mark@kingant.net>
parents:
27458
diff
changeset
|
4237 _("Server requires TLS/SSL, but no TLS/SSL support was found.")); |
26272
2db8a92b3cde
Add a friendly error message if something uses
Mark Doliner <mark@kingant.net>
parents:
26263
diff
changeset
|
4238 return NULL; |
2db8a92b3cde
Add a friendly error message if something uses
Mark Doliner <mark@kingant.net>
parents:
26263
diff
changeset
|
4239 } |
2db8a92b3cde
Add a friendly error message if something uses
Mark Doliner <mark@kingant.net>
parents:
26263
diff
changeset
|
4240 |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4241 gfud->is_ssl = TRUE; |
27051
f303787f144d
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
26977
diff
changeset
|
4242 gfud->ssl_connection = purple_ssl_connect(account, |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4243 gfud->website.address, gfud->website.port, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4244 ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4245 } else { |
27051
f303787f144d
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
26977
diff
changeset
|
4246 gfud->connect_data = purple_proxy_connect(NULL, account, |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4247 gfud->website.address, gfud->website.port, |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4248 url_fetch_connect_cb, gfud); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4249 } |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4250 |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4251 if (gfud->ssl_connection == NULL && gfud->connect_data == NULL) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4252 { |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4253 purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4254 gfud->website.address); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4255 return NULL; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4256 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4257 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4258 return gfud; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4259 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4260 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4261 void |
15823 | 4262 purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *gfud) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4263 { |
24538
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4264 if (gfud->ssl_connection != NULL) |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4265 purple_ssl_close(gfud->ssl_connection); |
104f6f755c7e
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <mark@kingant.net>
parents:
24369
diff
changeset
|
4266 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4267 if (gfud->connect_data != NULL) |
15823 | 4268 purple_proxy_connect_cancel(gfud->connect_data); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4269 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4270 if (gfud->inpa > 0) |
15823 | 4271 purple_input_remove(gfud->inpa); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4272 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4273 if (gfud->fd >= 0) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4274 close(gfud->fd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4275 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4276 g_free(gfud->website.user); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4277 g_free(gfud->website.passwd); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4278 g_free(gfud->website.address); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4279 g_free(gfud->website.page); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4280 g_free(gfud->url); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4281 g_free(gfud->user_agent); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4282 g_free(gfud->request); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4283 g_free(gfud->webdata); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4284 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4285 g_free(gfud); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4286 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4287 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4288 const char * |
15823 | 4289 purple_url_decode(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4290 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4291 static char buf[BUF_LEN]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4292 guint i, j = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4293 char *bum; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4294 char hex[3]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4295 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4296 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4297 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4298 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4299 * XXX - This check could be removed and buf could be made |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4300 * dynamically allocated, but this is easier. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4301 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4302 if (strlen(str) >= BUF_LEN) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4303 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4304 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4305 for (i = 0; i < strlen(str); i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4306 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4307 if (str[i] != '%') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4308 buf[j++] = str[i]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4309 else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4310 strncpy(hex, str + ++i, 2); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4311 hex[2] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4312 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4313 /* i is pointing to the start of the number */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4314 i++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4315 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4316 /* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4317 * Now it's at the end and at the start of the for loop |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4318 * will be at the next character. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4319 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4320 buf[j++] = strtol(hex, NULL, 16); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4321 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4322 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4323 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4324 buf[j] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4325 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4326 if (!g_utf8_validate(buf, -1, (const char **)&bum)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4327 *bum = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4328 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4329 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4330 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4331 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4332 const char * |
15823 | 4333 purple_url_encode(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4334 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4335 const char *iter; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4336 static char buf[BUF_LEN]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4337 char utf_char[6]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4338 guint i, j = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4339 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4340 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4341 g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4342 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4343 iter = str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4344 for (; *iter && j < (BUF_LEN - 1) ; iter = g_utf8_next_char(iter)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4345 gunichar c = g_utf8_get_char(iter); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4346 /* If the character is an ASCII character and is alphanumeric |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4347 * no need to escape */ |
28619
79c14adf9669
Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <mark@kingant.net>
parents:
28509
diff
changeset
|
4348 if (c < 128 && (isalnum(c) || c == '-' || c == '.' || c == '_' || c == '~')) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4349 buf[j++] = c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4350 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4351 int bytes = g_unichar_to_utf8(c, utf_char); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4352 for (i = 0; i < bytes; i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4353 if (j > (BUF_LEN - 4)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4354 break; |
28619
79c14adf9669
Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <mark@kingant.net>
parents:
28509
diff
changeset
|
4355 sprintf(buf + j, "%%%02X", utf_char[i] & 0xff); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4356 j += 3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4357 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4358 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4359 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4360 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4361 buf[j] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4362 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4363 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4364 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4365 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4366 /* Originally lifted from |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4367 * http://www.oreillynet.com/pub/a/network/excerpt/spcookbook_chap03/index3.html |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4368 * ... and slightly modified to be a bit more rfc822 compliant |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4369 * ... and modified a bit more to make domain checking rfc1035 compliant |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4370 * with the exception permitted in rfc1101 for domains to start with digit |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4371 * but not completely checking to avoid conflicts with IP addresses |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4372 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4373 gboolean |
15823 | 4374 purple_email_is_valid(const char *address) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4375 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4376 const char *c, *domain; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4377 static char *rfc822_specials = "()<>@,;:\\\"[]"; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4378 |
24367 | 4379 g_return_val_if_fail(address != NULL, FALSE); |
4380 | |
30617
b8782b02330d
Catch some more invalid email addresses, thanks to Mark for additional
Stu Tomlinson <stu@nosnilmot.com>
parents:
30613
diff
changeset
|
4381 if (*address == '.') return FALSE; |
b8782b02330d
Catch some more invalid email addresses, thanks to Mark for additional
Stu Tomlinson <stu@nosnilmot.com>
parents:
30613
diff
changeset
|
4382 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4383 /* first we validate the name portion (name@domain) (rfc822)*/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4384 for (c = address; *c; c++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4385 if (*c == '\"' && (c == address || *(c - 1) == '.' || *(c - 1) == '\"')) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4386 while (*++c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4387 if (*c == '\\') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4388 if (*c++ && *c < 127 && *c != '\n' && *c != '\r') continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4389 else return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4390 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4391 if (*c == '\"') break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4392 if (*c < ' ' || *c >= 127) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4393 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4394 if (!*c++) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4395 if (*c == '@') break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4396 if (*c != '.') return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4397 continue; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4398 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4399 if (*c == '@') break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4400 if (*c <= ' ' || *c >= 127) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4401 if (strchr(rfc822_specials, *c)) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4402 } |
18600
321658bf0e03
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <mark@kingant.net>
parents:
18560
diff
changeset
|
4403 |
321658bf0e03
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <mark@kingant.net>
parents:
18560
diff
changeset
|
4404 /* It's obviously not an email address if we didn't find an '@' above */ |
321658bf0e03
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <mark@kingant.net>
parents:
18560
diff
changeset
|
4405 if (*c == '\0') return FALSE; |
321658bf0e03
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <mark@kingant.net>
parents:
18560
diff
changeset
|
4406 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4407 /* strictly we should return false if (*(c - 1) == '.') too, but I think |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4408 * we should permit user.@domain type addresses - they do work :) */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4409 if (c == address) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4410 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4411 /* next we validate the domain portion (name@domain) (rfc1035 & rfc1011) */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4412 if (!*(domain = ++c)) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4413 do { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4414 if (*c == '.' && (c == domain || *(c - 1) == '.' || *(c - 1) == '-')) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4415 return FALSE; |
30617
b8782b02330d
Catch some more invalid email addresses, thanks to Mark for additional
Stu Tomlinson <stu@nosnilmot.com>
parents:
30613
diff
changeset
|
4416 if (*c == '-' && (*(c - 1) == '.' || *(c - 1) == '@')) return FALSE; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4417 if ((*c < '0' && *c != '-' && *c != '.') || (*c > '9' && *c < 'A') || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4418 (*c > 'Z' && *c < 'a') || (*c > 'z')) return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4419 } while (*++c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4420 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4421 if (*(c - 1) == '-') return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4422 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4423 return ((c - domain) > 3 ? TRUE : FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4424 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4425 |
22327
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4426 gboolean |
27549
1d30e9d6de9b
Added the function in util.h, forgot it here.
Paul Aurich <paul@darkrain42.org>
parents:
27545
diff
changeset
|
4427 purple_ipv4_address_is_valid(const char *ip) |
22327
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4428 { |
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4429 int c, o1, o2, o3, o4; |
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4430 char end; |
24365 | 4431 |
4432 g_return_val_if_fail(ip != NULL, FALSE); | |
4433 | |
22327
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4434 c = sscanf(ip, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, &end); |
22344
51e740d3af3b
Fixes an error detected by valgrind:
Ka-Hing Cheung <khc@hxbc.us>
parents:
22327
diff
changeset
|
4435 if (c != 4 || o1 < 0 || o1 > 255 || o2 < 0 || o2 > 255 || o3 < 0 || o3 > 255 || o4 < 0 || o4 > 255) |
22327
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4436 return FALSE; |
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4437 return TRUE; |
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4438 } |
dc47e908965f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <stu@nosnilmot.com>
parents:
22191
diff
changeset
|
4439 |
27545
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4440 gboolean |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4441 purple_ipv6_address_is_valid(const gchar *ip) |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4442 { |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4443 const gchar *c; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4444 gboolean double_colon = FALSE; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4445 gint chunks = 1; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4446 gint in = 0; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4447 |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4448 g_return_val_if_fail(ip != NULL, FALSE); |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4449 |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4450 if (*ip == '\0') |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4451 return FALSE; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4452 |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4453 for (c = ip; *c; ++c) { |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4454 if ((*c >= '0' && *c <= '9') || |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4455 (*c >= 'a' && *c <= 'f') || |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4456 (*c >= 'A' && *c <= 'F')) { |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4457 if (++in > 4) |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4458 /* Only four hex digits per chunk */ |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4459 return FALSE; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4460 continue; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4461 } else if (*c == ':') { |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4462 /* The start of a new chunk */ |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4463 ++chunks; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4464 in = 0; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4465 if (*(c + 1) == ':') { |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4466 /* |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4467 * '::' indicates a consecutive series of chunks full |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4468 * of zeroes. There can be only one of these per address. |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4469 */ |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4470 if (double_colon) |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4471 return FALSE; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4472 double_colon = TRUE; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4473 } |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4474 } else |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4475 return FALSE; |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4476 } |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4477 |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4478 /* |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4479 * Either we saw a '::' and there were fewer than 8 chunks -or- |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4480 * we didn't see a '::' and saw exactly 8 chunks. |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4481 */ |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4482 return (double_colon && chunks < 8) || (!double_colon && chunks == 8); |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4483 } |
8c41a23e6b44
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <paul@darkrain42.org>
parents:
27524
diff
changeset
|
4484 |
27549
1d30e9d6de9b
Added the function in util.h, forgot it here.
Paul Aurich <paul@darkrain42.org>
parents:
27545
diff
changeset
|
4485 gboolean |
1d30e9d6de9b
Added the function in util.h, forgot it here.
Paul Aurich <paul@darkrain42.org>
parents:
27545
diff
changeset
|
4486 purple_ip_address_is_valid(const char *ip) |
1d30e9d6de9b
Added the function in util.h, forgot it here.
Paul Aurich <paul@darkrain42.org>
parents:
27545
diff
changeset
|
4487 { |
32680
4c64383f05cc
purple_ip_address_is_valid() now checks for an IPv4 or IPv6 address.
andrew.victor@mxit.com
parents:
32679
diff
changeset
|
4488 return (purple_ipv4_address_is_valid(ip) || purple_ipv6_address_is_valid(ip)); |
27549
1d30e9d6de9b
Added the function in util.h, forgot it here.
Paul Aurich <paul@darkrain42.org>
parents:
27545
diff
changeset
|
4489 } |
1d30e9d6de9b
Added the function in util.h, forgot it here.
Paul Aurich <paul@darkrain42.org>
parents:
27545
diff
changeset
|
4490 |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4491 /* Stolen from gnome_uri_list_extract_uris */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4492 GList * |
15823 | 4493 purple_uri_list_extract_uris(const gchar *uri_list) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4494 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4495 const gchar *p, *q; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4496 gchar *retval; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4497 GList *result = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4498 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4499 g_return_val_if_fail (uri_list != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4500 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4501 p = uri_list; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4502 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4503 /* We don't actually try to validate the URI according to RFC |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4504 * 2396, or even check for allowed characters - we just ignore |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4505 * comments and trim whitespace off the ends. We also |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4506 * allow LF delimination as well as the specified CRLF. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4507 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4508 while (p) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4509 if (*p != '#') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4510 while (isspace(*p)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4511 p++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4512 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4513 q = p; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4514 while (*q && (*q != '\n') && (*q != '\r')) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4515 q++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4516 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4517 if (q > p) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4518 q--; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4519 while (q > p && isspace(*q)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4520 q--; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4521 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4522 retval = (gchar*)g_malloc (q - p + 2); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4523 strncpy (retval, p, q - p + 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4524 retval[q - p + 1] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4525 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4526 result = g_list_prepend (result, retval); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4527 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4528 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4529 p = strchr (p, '\n'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4530 if (p) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4531 p++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4532 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4533 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4534 return g_list_reverse (result); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4535 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4536 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4537 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4538 /* Stolen from gnome_uri_list_extract_filenames */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4539 GList * |
15823 | 4540 purple_uri_list_extract_filenames(const gchar *uri_list) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4541 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4542 GList *tmp_list, *node, *result; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4543 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4544 g_return_val_if_fail (uri_list != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4545 |
15823 | 4546 result = purple_uri_list_extract_uris(uri_list); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4547 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4548 tmp_list = result; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4549 while (tmp_list) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4550 gchar *s = (gchar*)tmp_list->data; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4551 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4552 node = tmp_list; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4553 tmp_list = tmp_list->next; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4554 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4555 if (!strncmp (s, "file:", 5)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4556 node->data = g_filename_from_uri (s, NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4557 /* not sure if this fallback is useful at all */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4558 if (!node->data) node->data = g_strdup (s+5); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4559 } else { |
22837
7d4fcb142572
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <daniel.atallah@gmail.com>
parents:
22475
diff
changeset
|
4560 result = g_list_delete_link(result, node); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4561 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4562 g_free (s); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4563 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4564 return result; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4565 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4566 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4567 /************************************************************************** |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4568 * UTF8 String Functions |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4569 **************************************************************************/ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4570 gchar * |
15823 | 4571 purple_utf8_try_convert(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4572 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4573 gsize converted; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4574 gchar *utf8; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4575 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4576 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4577 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4578 if (g_utf8_validate(str, -1, NULL)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4579 return g_strdup(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4580 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4581 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4582 utf8 = g_locale_to_utf8(str, -1, &converted, NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4583 if (utf8 != NULL) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4584 return utf8; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4585 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4586 utf8 = g_convert(str, -1, "UTF-8", "ISO-8859-15", &converted, NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4587 if ((utf8 != NULL) && (converted == strlen(str))) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4588 return utf8; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4589 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4590 g_free(utf8); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4591 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4592 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4593 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4594 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4595 #define utf8_first(x) ((x & 0x80) == 0 || (x & 0xe0) == 0xc0 \ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4596 || (x & 0xf0) == 0xe0 || (x & 0xf8) == 0xf) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4597 gchar * |
15823 | 4598 purple_utf8_salvage(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4599 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4600 GString *workstr; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4601 const char *end; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4602 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4603 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4604 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4605 workstr = g_string_sized_new(strlen(str)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4606 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4607 do { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4608 g_utf8_validate(str, -1, &end); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4609 workstr = g_string_append_len(workstr, str, end - str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4610 str = end; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4611 if (*str == '\0') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4612 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4613 do { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4614 workstr = g_string_append_c(workstr, '?'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4615 str++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4616 } while (!utf8_first(*str)); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4617 } while (*str != '\0'); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4618 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4619 return g_string_free(workstr, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4620 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4621 |
27101
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4622 gchar * |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4623 purple_utf8_strip_unprintables(const gchar *str) |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4624 { |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4625 gchar *workstr, *iter; |
28459
0a4d0d4cf5df
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <paul@darkrain42.org>
parents:
28458
diff
changeset
|
4626 const gchar *bad; |
27101
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4627 |
27106
c59918579c3a
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <paul@darkrain42.org>
parents:
27101
diff
changeset
|
4628 if (str == NULL) |
c59918579c3a
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <paul@darkrain42.org>
parents:
27101
diff
changeset
|
4629 /* Act like g_strdup */ |
c59918579c3a
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <paul@darkrain42.org>
parents:
27101
diff
changeset
|
4630 return NULL; |
c59918579c3a
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <paul@darkrain42.org>
parents:
27101
diff
changeset
|
4631 |
28460
6b018d1efc5c
Oops, I think it's either sleep or coffee time.
Paul Aurich <paul@darkrain42.org>
parents:
28459
diff
changeset
|
4632 if (!g_utf8_validate(str, -1, &bad)) { |
28459
0a4d0d4cf5df
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <paul@darkrain42.org>
parents:
28458
diff
changeset
|
4633 purple_debug_error("util", "purple_utf8_strip_unprintables(%s) failed; " |
0a4d0d4cf5df
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <paul@darkrain42.org>
parents:
28458
diff
changeset
|
4634 "first bad character was %02x (%c)\n", |
0a4d0d4cf5df
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <paul@darkrain42.org>
parents:
28458
diff
changeset
|
4635 str, *bad, *bad); |
0a4d0d4cf5df
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <paul@darkrain42.org>
parents:
28458
diff
changeset
|
4636 g_return_val_if_reached(NULL); |
0a4d0d4cf5df
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <paul@darkrain42.org>
parents:
28458
diff
changeset
|
4637 } |
27101
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4638 |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4639 workstr = iter = g_new(gchar, strlen(str) + 1); |
30267
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4640 while (*str) { |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4641 gunichar ch = g_utf8_get_char(str); |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4642 gchar *next = g_utf8_next_char(str); |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4643 /* |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4644 * Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4645 * [#x10000-#x10FFFF] |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4646 */ |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4647 if ((ch == '\t' || ch == '\n' || ch == '\r') || |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4648 (ch >= 0x20 && ch <= 0xD7FF) || |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4649 (ch >= 0xE000 && ch <= 0xFFFD) || |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4650 (ch >= 0x10000 && ch <= 0x10FFFF)) { |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4651 memcpy(iter, str, next - str); |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4652 iter += (next - str); |
27101
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4653 } |
30267
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4654 |
5bac51b394e6
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <paul@darkrain42.org>
parents:
30157
diff
changeset
|
4655 str = next; |
27101
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4656 } |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4657 |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4658 /* nul-terminate the new string */ |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4659 *iter = '\0'; |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4660 |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4661 return workstr; |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4662 } |
bf9db4c67679
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <paul@darkrain42.org>
parents:
27094
diff
changeset
|
4663 |
21863
7e833250a0ef
Add a comment that I took this from glib
Mark Doliner <mark@kingant.net>
parents:
21862
diff
changeset
|
4664 /* |
7e833250a0ef
Add a comment that I took this from glib
Mark Doliner <mark@kingant.net>
parents:
21862
diff
changeset
|
4665 * This function is copied from g_strerror() but changed to use |
7e833250a0ef
Add a comment that I took this from glib
Mark Doliner <mark@kingant.net>
parents:
21862
diff
changeset
|
4666 * gai_strerror(). |
7e833250a0ef
Add a comment that I took this from glib
Mark Doliner <mark@kingant.net>
parents:
21862
diff
changeset
|
4667 */ |
21862
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4668 G_CONST_RETURN gchar * |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4669 purple_gai_strerror(gint errnum) |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4670 { |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4671 static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4672 char *msg; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4673 int saved_errno = errno; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4674 |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4675 const char *msg_locale; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4676 |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4677 msg_locale = gai_strerror(errnum); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4678 if (g_get_charset(NULL)) |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4679 { |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4680 /* This string is already UTF-8--great! */ |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4681 errno = saved_errno; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4682 return msg_locale; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4683 } |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4684 else |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4685 { |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4686 gchar *msg_utf8 = g_locale_to_utf8(msg_locale, -1, NULL, NULL, NULL); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4687 if (msg_utf8) |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4688 { |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4689 /* Stick in the quark table so that we can return a static result */ |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4690 GQuark msg_quark = g_quark_from_string(msg_utf8); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4691 g_free(msg_utf8); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4692 |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4693 msg_utf8 = (gchar *)g_quark_to_string(msg_quark); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4694 errno = saved_errno; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4695 return msg_utf8; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4696 } |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4697 } |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4698 |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4699 msg = g_static_private_get(&msg_private); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4700 if (!msg) |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4701 { |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4702 msg = g_new(gchar, 64); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4703 g_static_private_set(&msg_private, msg, g_free); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4704 } |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4705 |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4706 sprintf(msg, "unknown error (%d)", errnum); |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4707 |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4708 errno = saved_errno; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4709 return msg; |
ae58ffd5e929
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <mark@kingant.net>
parents:
21794
diff
changeset
|
4710 } |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4711 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4712 char * |
15823 | 4713 purple_utf8_ncr_encode(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4714 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4715 GString *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4716 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4717 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4718 g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4719 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4720 out = g_string_new(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4721 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4722 for(; *str; str = g_utf8_next_char(str)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4723 gunichar wc = g_utf8_get_char(str); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4724 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4725 /* super simple check. hopefully not too wrong. */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4726 if(wc >= 0x80) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4727 g_string_append_printf(out, "&#%u;", (guint32) wc); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4728 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4729 g_string_append_unichar(out, wc); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4730 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4731 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4732 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4733 return g_string_free(out, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4734 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4735 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4736 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4737 char * |
15823 | 4738 purple_utf8_ncr_decode(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4739 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4740 GString *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4741 char *buf, *b; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4742 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4743 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4744 g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4745 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4746 buf = (char *) str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4747 out = g_string_new(""); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4748 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4749 while( (b = strstr(buf, "&#")) ) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4750 gunichar wc; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4751 int base = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4752 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4753 /* append everything leading up to the &# */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4754 g_string_append_len(out, buf, b-buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4755 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4756 b += 2; /* skip past the &# */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4757 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4758 /* strtoul will treat 0x prefix as hex, but not just x */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4759 if(*b == 'x' || *b == 'X') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4760 base = 16; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4761 b++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4762 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4763 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4764 /* advances buf to the end of the ncr segment */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4765 wc = (gunichar) strtoul(b, &buf, base); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4766 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4767 /* this mimics the previous impl of ncr_decode */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4768 if(*buf == ';') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4769 g_string_append_unichar(out, wc); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4770 buf++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4771 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4772 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4773 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4774 /* append whatever's left */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4775 g_string_append(out, buf); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4776 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4777 return g_string_free(out, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4778 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4779 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4780 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4781 int |
15823 | 4782 purple_utf8_strcasecmp(const char *a, const char *b) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4783 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4784 char *a_norm = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4785 char *b_norm = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4786 int ret = -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4787 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4788 if(!a && b) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4789 return -1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4790 else if(!b && a) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4791 return 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4792 else if(!a && !b) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4793 return 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4794 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4795 if(!g_utf8_validate(a, -1, NULL) || !g_utf8_validate(b, -1, NULL)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4796 { |
15823 | 4797 purple_debug_error("purple_utf8_strcasecmp", |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4798 "One or both parameters are invalid UTF8\n"); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4799 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4800 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4801 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4802 a_norm = g_utf8_casefold(a, -1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4803 b_norm = g_utf8_casefold(b, -1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4804 ret = g_utf8_collate(a_norm, b_norm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4805 g_free(a_norm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4806 g_free(b_norm); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4807 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4808 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4809 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4810 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4811 /* previously conversation::find_nick() */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4812 gboolean |
15823 | 4813 purple_utf8_has_word(const char *haystack, const char *needle) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4814 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4815 char *hay, *pin, *p; |
24806
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4816 const char *start, *prev_char; |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4817 gunichar before, after; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4818 int n; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4819 gboolean ret = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4820 |
24806
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4821 start = hay = g_utf8_strdown(haystack, -1); |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4822 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4823 pin = g_utf8_strdown(needle, -1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4824 n = strlen(pin); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4825 |
24806
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4826 while ((p = strstr(start, pin)) != NULL) { |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4827 prev_char = g_utf8_find_prev_char(hay, p); |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4828 before = -2; |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4829 if (prev_char) { |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4830 before = g_utf8_get_char(prev_char); |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4831 } |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4832 after = g_utf8_get_char_validated(p + n, - 1); |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4833 |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4834 if ((p == hay || |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4835 /* The character before is a reasonable guess for a word boundary |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4836 ("!g_unichar_isalnum()" is not a valid way to determine word |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4837 boundaries, but it is the only reasonable thing to do here), |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4838 and isn't the '&' from a "&" or some such entity*/ |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4839 (before != -2 && !g_unichar_isalnum(before) && *(p - 1) != '&')) |
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4840 && after != -2 && !g_unichar_isalnum(after)) { |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4841 ret = TRUE; |
24806
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4842 break; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4843 } |
24806
e7b27ee5e7b6
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <daniel.atallah@gmail.com>
parents:
24538
diff
changeset
|
4844 start = p + 1; |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4845 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4846 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4847 g_free(pin); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4848 g_free(hay); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4849 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4850 return ret; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4851 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4852 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4853 void |
15823 | 4854 purple_print_utf8_to_console(FILE *filestream, char *message) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4855 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4856 gchar *message_conv; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4857 GError *error = NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4858 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4859 /* Try to convert 'message' to user's locale */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4860 message_conv = g_locale_from_utf8(message, -1, NULL, NULL, &error); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4861 if (message_conv != NULL) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4862 fputs(message_conv, filestream); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4863 g_free(message_conv); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4864 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4865 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4866 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4867 /* use 'message' as a fallback */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4868 g_warning("%s\n", error->message); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4869 g_error_free(error); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4870 fputs(message, filestream); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4871 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4872 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4873 |
19408
cc36a5aac908
Fix some conversion warnings about using negative values with unsigned types. There are more, but these were easy fixes. You may think that I'm changing the API, but I'm really not - it was just wrong.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
19262
diff
changeset
|
4874 gboolean purple_message_meify(char *message, gssize len) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4875 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4876 char *c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4877 gboolean inside_html = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4878 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4879 g_return_val_if_fail(message != NULL, FALSE); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4880 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4881 if(len == -1) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4882 len = strlen(message); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4883 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4884 for (c = message; *c; c++, len--) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4885 if(inside_html) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4886 if(*c == '>') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4887 inside_html = FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4888 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4889 if(*c == '<') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4890 inside_html = TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4891 else |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4892 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4893 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4894 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4895 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4896 if(*c && !g_ascii_strncasecmp(c, "/me ", 4)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4897 memmove(c, c+4, len-3); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4898 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4899 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4900 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4901 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4902 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4903 |
15823 | 4904 char *purple_text_strip_mnemonic(const char *in) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4905 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4906 char *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4907 char *a; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4908 char *a0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4909 const char *b; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4910 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4911 g_return_val_if_fail(in != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4912 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4913 out = g_malloc(strlen(in)+1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4914 a = out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4915 b = in; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4916 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4917 a0 = a; /* The last non-space char seen so far, or the first char */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4918 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4919 while(*b) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4920 if(*b == '_') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4921 if(a > out && b > in && *(b-1) == '(' && *(b+1) && !(*(b+1) & 0x80) && *(b+2) == ')') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4922 /* Detected CJK style shortcut (Bug 875311) */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4923 a = a0; /* undo the left parenthesis */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4924 b += 3; /* and skip the whole mess */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4925 } else if(*(b+1) == '_') { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4926 *(a++) = '_'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4927 b += 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4928 a0 = a; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4929 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4930 b++; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4931 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4932 /* We don't want to corrupt the middle of UTF-8 characters */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4933 } else if (!(*b & 0x80)) { /* other 1-byte char */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4934 if (*b != ' ') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4935 a0 = a; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4936 *(a++) = *(b++); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4937 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4938 /* Multibyte utf8 char, don't look for _ inside these */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4939 int n = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4940 int i; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4941 if ((*b & 0xe0) == 0xc0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4942 n = 2; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4943 } else if ((*b & 0xf0) == 0xe0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4944 n = 3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4945 } else if ((*b & 0xf8) == 0xf0) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4946 n = 4; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4947 } else if ((*b & 0xfc) == 0xf8) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4948 n = 5; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4949 } else if ((*b & 0xfe) == 0xfc) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4950 n = 6; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4951 } else { /* Illegal utf8 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4952 n = 1; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4953 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4954 a0 = a; /* unless we want to delete CJK spaces too */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4955 for (i = 0; i < n && *b; i += 1) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4956 *(a++) = *(b++); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4957 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4958 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4959 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4960 *a = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4961 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4962 return out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4963 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4964 |
15823 | 4965 const char* purple_unescape_filename(const char *escaped) { |
4966 return purple_url_decode(escaped); | |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4967 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4968 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4969 |
15823 | 4970 /* this is almost identical to purple_url_encode (hence purple_url_decode |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4971 * being used above), but we want to keep certain characters unescaped |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4972 * for compat reasons */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4973 const char * |
15823 | 4974 purple_escape_filename(const char *str) |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4975 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4976 const char *iter; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4977 static char buf[BUF_LEN]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4978 char utf_char[6]; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4979 guint i, j = 0; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4980 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4981 g_return_val_if_fail(str != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4982 g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4983 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4984 iter = str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4985 for (; *iter && j < (BUF_LEN - 1) ; iter = g_utf8_next_char(iter)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4986 gunichar c = g_utf8_get_char(iter); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4987 /* If the character is an ASCII character and is alphanumeric, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4988 * or one of the specified values, no need to escape */ |
17194
51f8dac490d7
If we're operating on ASCII characters only, we should use g_ascii_isalnum.
Richard Laager <rlaager@wiktel.com>
parents:
17191
diff
changeset
|
4989 if (c < 128 && (g_ascii_isalnum(c) || c == '@' || c == '-' || |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4990 c == '_' || c == '.' || c == '#')) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4991 buf[j++] = c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4992 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4993 int bytes = g_unichar_to_utf8(c, utf_char); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4994 for (i = 0; i < bytes; i++) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4995 if (j > (BUF_LEN - 4)) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4996 break; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4997 sprintf(buf + j, "%%%02x", utf_char[i] & 0xff); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4998 j += 3; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4999 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5000 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5001 } |
30586
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5002 #ifdef _WIN32 |
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5003 /* File/Directory names in windows cannot end in periods/spaces. |
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5004 * http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx |
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5005 */ |
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5006 while (j > 0 && (buf[j - 1] == '.' || buf[j - 1] == ' ')) |
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5007 j--; |
626480462902
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
30585
diff
changeset
|
5008 #endif |
15374
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5009 buf[j] = '\0'; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5010 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5011 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5012 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5013 |
15823 | 5014 void purple_restore_default_signal_handlers(void) |
15646
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5015 { |
15665
95c4dee525f0
Merge fix and build fix for win32
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15664
diff
changeset
|
5016 #ifndef _WIN32 |
15646
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5017 #ifdef HAVE_SIGNAL_H |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5018 signal(SIGHUP, SIG_DFL); /* 1: terminal line hangup */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5019 signal(SIGINT, SIG_DFL); /* 2: interrupt program */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5020 signal(SIGQUIT, SIG_DFL); /* 3: quit program */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5021 signal(SIGILL, SIG_DFL); /* 4: illegal instruction (not reset when caught) */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5022 signal(SIGTRAP, SIG_DFL); /* 5: trace trap (not reset when caught) */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5023 signal(SIGABRT, SIG_DFL); /* 6: abort program */ |
15662
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5024 |
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5025 #ifdef SIGPOLL |
16495
b8b2e35ec7c6
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16483
diff
changeset
|
5026 signal(SIGPOLL, SIG_DFL); /* 7: pollable event (POSIX) */ |
15662
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5027 #endif /* SIGPOLL */ |
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5028 |
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5029 #ifdef SIGEMT |
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5030 signal(SIGEMT, SIG_DFL); /* 7: EMT instruction (Non-POSIX) */ |
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5031 #endif /* SIGEMT */ |
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5032 |
15646
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5033 signal(SIGFPE, SIG_DFL); /* 8: floating point exception */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5034 signal(SIGBUS, SIG_DFL); /* 10: bus error */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5035 signal(SIGSEGV, SIG_DFL); /* 11: segmentation violation */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5036 signal(SIGSYS, SIG_DFL); /* 12: bad argument to system call */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5037 signal(SIGPIPE, SIG_DFL); /* 13: write on a pipe with no reader */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5038 signal(SIGALRM, SIG_DFL); /* 14: real-time timer expired */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5039 signal(SIGTERM, SIG_DFL); /* 15: software termination signal */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5040 signal(SIGCHLD, SIG_DFL); /* 20: child status has changed */ |
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5041 signal(SIGXCPU, SIG_DFL); /* 24: exceeded CPU time limit */ |
16495
b8b2e35ec7c6
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <daniel.atallah@gmail.com>
parents:
16483
diff
changeset
|
5042 signal(SIGXFSZ, SIG_DFL); /* 25: exceeded file size limit */ |
15662
80944a182710
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15646
diff
changeset
|
5043 #endif /* HAVE_SIGNAL_H */ |
15665
95c4dee525f0
Merge fix and build fix for win32
Daniel Atallah <daniel.atallah@gmail.com>
parents:
15664
diff
changeset
|
5044 #endif /* !_WIN32 */ |
15646
61b42cf81aa4
Restore default signal handlers in fork()'d children. This adds a gaim_restore_default_signal_handlers() utility function since children are made in multiple places.
Evan Schoenberg <evan.s@dreskin.net>
parents:
15613
diff
changeset
|
5045 } |
22000
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5046 |
22089
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5047 static void |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5048 set_status_with_attrs(PurpleStatus *status, ...) |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5049 { |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5050 va_list args; |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5051 va_start(args, status); |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5052 purple_status_set_active_with_attrs(status, TRUE, args); |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5053 va_end(args); |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5054 } |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5055 |
22000
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5056 void purple_util_set_current_song(const char *title, const char *artist, const char *album) |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5057 { |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5058 GList *list = purple_accounts_get_all(); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5059 for (; list; list = list->next) { |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5060 PurplePresence *presence; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5061 PurpleStatus *tune; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5062 PurpleAccount *account = list->data; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5063 if (!purple_account_get_enabled(account, purple_core_get_ui())) |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5064 continue; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5065 |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5066 presence = purple_account_get_presence(account); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5067 tune = purple_presence_get_status(presence, "tune"); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5068 if (!tune) |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5069 continue; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5070 if (title) { |
22089
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5071 set_status_with_attrs(tune, |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5072 PURPLE_TUNE_TITLE, title, |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5073 PURPLE_TUNE_ARTIST, artist, |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5074 PURPLE_TUNE_ALBUM, album, |
1e227e2587e6
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22060
diff
changeset
|
5075 NULL); |
22000
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5076 } else { |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5077 purple_status_set_active(tune, FALSE); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5078 } |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5079 } |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5080 } |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5081 |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5082 char * purple_util_format_song_info(const char *title, const char *artist, const char *album, gpointer unused) |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5083 { |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5084 GString *string; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5085 char *esc; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5086 |
22060
83613550512b
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22000
diff
changeset
|
5087 if (!title || !*title) |
22000
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5088 return NULL; |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5089 |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5090 esc = g_markup_escape_text(title, -1); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5091 string = g_string_new(""); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5092 g_string_append_printf(string, "%s", esc); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5093 g_free(esc); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5094 |
22060
83613550512b
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22000
diff
changeset
|
5095 if (artist && *artist) { |
22000
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5096 esc = g_markup_escape_text(artist, -1); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5097 g_string_append_printf(string, _(" - %s"), esc); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5098 g_free(esc); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5099 } |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5100 |
22060
83613550512b
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22000
diff
changeset
|
5101 if (album && *album) { |
22000
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5102 esc = g_markup_escape_text(album, -1); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5103 g_string_append_printf(string, _(" (%s)"), esc); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5104 g_free(esc); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5105 } |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5106 |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5107 return g_string_free(string, FALSE); |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5108 } |
af0426c34c27
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21863
diff
changeset
|
5109 |
23583
399975ad001c
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23390
diff
changeset
|
5110 const gchar * |
399975ad001c
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23390
diff
changeset
|
5111 purple_get_host_name(void) |
399975ad001c
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23390
diff
changeset
|
5112 { |
399975ad001c
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23390
diff
changeset
|
5113 return g_get_host_name(); |
399975ad001c
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23390
diff
changeset
|
5114 } |
29523
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5115 |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5116 gchar * |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5117 purple_uuid_random(void) |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5118 { |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5119 guint32 tmp, a, b; |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5120 |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5121 tmp = g_random_int(); |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5122 a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */ |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5123 tmp >>= 12; |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5124 b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */ |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5125 |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5126 tmp = g_random_int(); |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5127 |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5128 return g_strdup_printf("%08x-%04x-%04x-%04x-%04x%08x", |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5129 g_random_int(), |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5130 tmp & 0xFFFF, |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5131 a, |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5132 b, |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5133 (tmp >> 16) & 0xFFFF, g_random_int()); |
ecd2136ff818
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <ml@update.uu.se>
parents:
29504
diff
changeset
|
5134 } |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5135 |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5136 #ifdef _WIN32 |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5137 void botch_ucs(gchar *ucs_src, gsize len) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5138 { |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5139 /* no operation */ |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5140 } |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5141 #else |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5142 void botch_ucs(gchar *ucs_src, gsize len) |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5143 { |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5144 gint i; |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5145 guchar *ucs = (guchar *)ucs_src; |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5146 |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5147 g_return_if_fail(ucs_src != NULL); |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5148 g_return_if_fail(len > 0); |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5149 |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5150 for(i=0;i<len;i+=2){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5151 switch(*(ucs+i)){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5152 case 0x00: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5153 switch(*(ucs+i+1)){ |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5154 case 0xa2: // ¢ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5155 *(ucs+i) = 0xff; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5156 *(ucs+i+1) = 0xe0; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5157 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5158 case 0xa3: // £ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5159 *(ucs+i) = 0xff; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5160 *(ucs+i+1) = 0xe1; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5161 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5162 case 0xac: // ¬ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5163 *(ucs+i) = 0xff; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5164 *(ucs+i+1) = 0xe2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5165 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5166 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5167 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5168 case 0x20: // ‖ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5169 if(*(ucs+i+1) == 0x16){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5170 *(ucs+i) = 0x22; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5171 *(ucs+i+1) = 0x25; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5172 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5173 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5174 case 0x22: // − |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5175 if(*(ucs+i+1) == 0x12){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5176 *(ucs+i) = 0xff; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5177 *(ucs+i+1) = 0x0d; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5178 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5179 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5180 case 0x30: // 〜 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5181 if(*(ucs+i+1) == 0x1c){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5182 *(ucs+i) = 0xff; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5183 *(ucs+i+1) = 0x5e; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5184 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5185 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5186 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5187 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5188 |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5189 } |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5190 #endif |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5191 |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5192 #ifdef _WIN32 |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5193 void sanitize_ucs(gchar *ucs, gsize len) |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5194 { |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5195 /* no operation */ |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5196 } |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5197 #else |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5198 void sanitize_ucs(gchar *ucs_src, gsize len) |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5199 { |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5200 gint i; |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5201 guchar *ucs = (guchar *)ucs_src; |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5202 |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5203 g_return_if_fail(ucs_src != NULL); |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5204 g_return_if_fail(len > 0); |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5205 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5206 for(i=0;i<len;i+=2){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5207 switch(*(ucs+i)){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5208 case 0x22: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5209 switch(*(ucs+i+1)){ |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5210 case 0x25: // ‖ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5211 *(ucs+i) = 0x20; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5212 *(ucs+i+1) = 0x16; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5213 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5214 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5215 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5216 case 0xff: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5217 switch(*(ucs+i+1)){ |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5218 case 0x0d: // − |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5219 *(ucs+i) = 0x22; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5220 *(ucs+i+1) = 0x12; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5221 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5222 case 0x5e: // 〜 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5223 *(ucs+i) = 0x30; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5224 *(ucs+i+1) = 0x1c; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5225 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5226 case 0xe0: // ¢ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5227 *(ucs+i) = 0x00; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5228 *(ucs+i+1) = 0xa2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5229 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5230 case 0xe1: // £ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5231 *(ucs+i) = 0x00; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5232 *(ucs+i+1) = 0xa3; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5233 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5234 case 0xe2: // ¬ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5235 *(ucs+i) = 0x00; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5236 *(ucs+i+1) = 0xac; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5237 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5238 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5239 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5240 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5241 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5242 } |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5243 #endif |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5244 |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5245 #ifdef _WIN32 |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5246 gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen) |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5247 { |
27777
2cb44870580d
- revert msn_message_get_bin_data() and restore true sanitize code for incoming messages.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27776
diff
changeset
|
5248 g_return_val_if_fail(msg != NULL, NULL); |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5249 if(len == -1) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5250 len = strlen(msg); |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5251 g_return_val_if_fail(len > 0, NULL); |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5252 |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5253 if(newlen) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5254 *newlen = len; |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5255 |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5256 return g_strndup(msg, len); |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5257 } |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5258 #else |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5259 gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen) |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5260 { |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5261 gint i; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5262 size_t bytes; |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5263 guchar *utf; |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5264 |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5265 g_return_val_if_fail(msg != NULL, NULL); |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5266 if(len == -1) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5267 len = strlen(msg); |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5268 g_return_val_if_fail(len > 0, NULL); |
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5269 |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5270 utf = (guchar *)g_strndup(msg, len); |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5271 |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5272 bytes = len; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5273 |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5274 for(i=0;i<len;i++){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5275 switch(*(utf+i)){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5276 case 0xe2: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5277 if(*(utf+i+1) == 0x88) { |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5278 if(*(utf+i+2) == 0xa5) { // ‖ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5279 *(utf+i) = 0xe2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5280 *(utf+i+1) = 0x80; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5281 *(utf+i+2) = 0x96; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5282 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5283 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5284 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5285 case 0xef: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5286 switch(*(utf+i+1)){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5287 case 0xbc: |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5288 if(*(utf+i+2) == 0x8d) { // − |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5289 *(utf+i) = 0xe2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5290 *(utf+i+1) = 0x88; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5291 *(utf+i+2) = 0x92; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5292 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5293 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5294 case 0xbd: |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5295 if(*(utf+i+2) == 0x9e) { // 〜 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5296 *(utf+i) = 0xe3; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5297 *(utf+i+1) = 0x80; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5298 *(utf+i+2) = 0x9c; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5299 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5300 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5301 case 0xbf: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5302 switch(*(utf+i+2)){ |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5303 case 0xa0: // ¢ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5304 *(utf+i) = 0xc2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5305 *(utf+i+1) = 0xa2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5306 memmove(utf+i+2, utf+i+3, |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5307 len-i-3); //shorten by 1byte |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5308 bytes--; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5309 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5310 case 0xa1: // £ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5311 *(utf+i) = 0xc2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5312 *(utf+i+1) = 0xa3; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5313 memmove(utf+i+2, utf+i+3, |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5314 len-i-3); //shorten by 1byte |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5315 bytes--; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5316 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5317 case 0xa2: // ¬ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5318 *(utf+i) = 0xc2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5319 *(utf+i+1) = 0xac; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5320 memmove(utf+i+2, utf+i+3, |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5321 len-i-3); //shorten by 1byte |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5322 bytes--; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5323 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5324 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5325 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5326 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5327 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5328 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5329 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5330 *(utf+bytes)= 0x00; //terminate |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5331 if(newlen) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5332 *newlen = bytes; |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5333 return (gchar *)utf; |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5334 } |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5335 #endif |
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5336 |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5337 #ifdef _WIN32 |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5338 gchar *botch_utf(const gchar *msg, gsize len, gsize *newlen) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5339 { |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5340 g_return_val_if_fail(msg != NULL, NULL); |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5341 if(len == -1) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5342 len = strlen(msg); |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5343 g_return_val_if_fail(len > 0, NULL); |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5344 |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5345 if(newlen) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5346 *newlen = len; |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5347 |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5348 return g_strndup(msg, len); |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5349 } |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5350 #else |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5351 gchar *botch_utf(const gchar *msg, gsize len, gsize *newlen) |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5352 { |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5353 int i,bytes; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5354 unsigned char *utf; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5355 |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5356 g_return_val_if_fail(msg != NULL, NULL); |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5357 if(len == -1) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5358 len = strlen(msg); |
27776
492a3798f87c
- fix a bug accidentally introduced to msn plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27773
diff
changeset
|
5359 g_return_val_if_fail(len > 0, NULL); |
27863
57727a140609
propagate from branch 'im.pidgin.pidgin' (head 97e156c1c2ef4aabc8926ff845b42b911a476dd0)
Yoshiki Yazawa <yaz@honeyplanet.jp>
diff
changeset
|
5360 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5361 bytes = len; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5362 |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5363 utf = g_malloc0(bytes*3/2+1); /* new length might be 3/2 in the worst case */ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5364 memcpy(utf, msg, bytes); |
27863
57727a140609
propagate from branch 'im.pidgin.pidgin' (head 97e156c1c2ef4aabc8926ff845b42b911a476dd0)
Yoshiki Yazawa <yaz@honeyplanet.jp>
diff
changeset
|
5365 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5366 for(i=0;i<bytes;i++){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5367 switch(*(utf+i)){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5368 case 0xc2: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5369 switch(*(utf+i+1)){ |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5370 case 0xa2: // ¢ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5371 *(utf+i) = 0xef; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5372 *(utf+i+1) = 0xbf; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5373 memmove(utf+i+3, utf+i+2, bytes-i-2); |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5374 *(utf+i+2) = 0xa0; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5375 bytes++; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5376 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5377 case 0xa3: // £ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5378 *(utf+i) = 0xef; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5379 *(utf+i+1) = 0xbf; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5380 memmove(utf+i+3, utf+i+2, bytes-i-2); |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5381 *(utf+i+2) = 0xa1; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5382 bytes++; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5383 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5384 case 0xac: // ¬ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5385 *(utf+i) = 0xef; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5386 *(utf+i+1) = 0xbf; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5387 memmove(utf+i+3, utf+i+2, bytes-i-2); |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5388 *(utf+i+2) = 0xa2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5389 bytes++; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5390 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5391 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5392 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5393 case 0xe2: |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5394 switch(*(utf+i+1)){ |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5395 case 0x80: // ‖ |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5396 if(*(utf+i+2) == 0x96){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5397 *(utf+i) = 0xe2; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5398 *(utf+i+1) = 0x88; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5399 *(utf+i+2) = 0xa5; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5400 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5401 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5402 case 0x88: // − |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5403 if(*(utf+i+1) == 0x92){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5404 *(utf+i) = 0xef; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5405 *(utf+i+1) = 0xbc; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5406 *(utf+i+2) = 0x8d; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5407 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5408 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5409 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5410 break; |
27872
ac9d95f61e7c
changed encoding for libpurple/util.c to utf-8.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27871
diff
changeset
|
5411 case 0xe3: // 〜 |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5412 if(*(utf+i+1) == 0x80){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5413 if(*(utf+i+2) == 0x9c){ |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5414 *(utf+i) = 0xef; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5415 *(utf+i+1) = 0xbd; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5416 *(utf+i+2) = 0x9e; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5417 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5418 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5419 break; |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5420 } //switch |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5421 } |
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5422 *(utf+bytes) = 0x00; //terminate |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5423 if(newlen) |
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5424 *newlen = bytes; |
27773
0f3a131d23da
- import nosuke's hash 244 patch and others to yahoo plugin
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27771
diff
changeset
|
5425 return (gchar *)utf; |
25467
be098f796b32
yaz patch has been applied.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
16169
diff
changeset
|
5426 } |
27791
ab1185e87ca5
- more normalization for window title
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
27777
diff
changeset
|
5427 #endif |