Sat, 18 Sep 2010 01:33:34 +0000
Useful snippet of debugging that helped me out.
| 1 | 1 | /* |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
2 | * @file util.h Utility Functions |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3 | * @ingroup core |
|
20330
650a7af9c238
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
4 | */ |
|
650a7af9c238
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
5 | |
|
650a7af9c238
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@pidgin.im>
parents:
19859
diff
changeset
|
6 | /* Purple is the legal property of its developers, whose names are too numerous |
| 8046 | 7 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 8 | * source distribution. | |
| 1 | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | |
| 11 | * it under the terms of the GNU General Public License as published by | |
| 12 | * the Free Software Foundation; either version 2 of the License, or | |
| 13 | * (at your option) any later version. | |
| 14 | * | |
| 15 | * This program is distributed in the hope that it will be useful, | |
| 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 | * GNU General Public License for more details. | |
| 19 | * | |
| 20 | * You should have received a copy of the GNU General Public License | |
| 21 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19840
diff
changeset
|
22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 1 | 23 | */ |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5826
diff
changeset
|
24 | #include "internal.h" |
| 3630 | 25 | |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
26 | #include "cipher.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5826
diff
changeset
|
27 | #include "conversation.h" |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
28 | #include "core.h" |
|
5872
754c63f29b77
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5826
diff
changeset
|
29 | #include "debug.h" |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
30 | #include "notify.h" |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
31 | #include "ntlm.h" |
|
1575
220b4d845309
[gaim-migrate @ 1585]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1560
diff
changeset
|
32 | #include "prpl.h" |
|
5545
a8b1a1262402
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5532
diff
changeset
|
33 | #include "prefs.h" |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
34 | #include "util.h" |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
35 | |
| 15884 | 36 | struct _PurpleUtilFetchUrlData |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
37 | { |
| 15884 | 38 | PurpleUtilFetchUrlCallback callback; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
39 | void *user_data; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
40 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
41 | struct |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
42 | { |
| 9227 | 43 | char *user; |
| 44 | char *passwd; | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
45 | char *address; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
46 | int port; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
47 | char *page; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
48 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
49 | } website; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
50 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
51 | char *url; |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
52 | int num_times_redirected; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
53 | gboolean full; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
54 | char *user_agent; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
55 | gboolean http11; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
56 | char *request; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
57 | gsize request_written; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
58 | gboolean include_headers; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
59 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
60 | gboolean is_ssl; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
61 | PurpleSslConnection *ssl_connection; |
| 15884 | 62 | PurpleProxyConnectData *connect_data; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
63 | int fd; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
64 | guint inpa; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
65 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
66 | gboolean got_headers; |
| 9240 | 67 | gboolean has_explicit_data_len; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
68 | char *webdata; |
|
27704
f3b2bca8c5b6
This fixes this compile warning:
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
27662
diff
changeset
|
69 | gsize len; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
70 | unsigned long data_len; |
|
24011
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
71 | gssize max_len; |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
72 | gboolean chunked; |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
73 | PurpleAccount *account; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
74 | }; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
75 | |
|
18219
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
76 | static char *custom_user_dir = NULL; |
|
20345
7d5a7a92d0f5
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@pidgin.im>
parents:
20330
diff
changeset
|
77 | static char *user_dir = NULL; |
| 3630 | 78 | |
|
21238
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
79 | |
| 15884 | 80 | PurpleMenuAction * |
| 81 | purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data, | |
| 12919 | 82 | GList *children) |
| 83 | { | |
| 15884 | 84 | PurpleMenuAction *act = g_new0(PurpleMenuAction, 1); |
|
13103
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
85 | act->label = g_strdup(label); |
| 12919 | 86 | act->callback = callback; |
| 87 | act->data = data; | |
| 88 | act->children = children; | |
| 89 | return act; | |
| 90 | } | |
| 91 | ||
|
13103
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
92 | void |
| 15884 | 93 | purple_menu_action_free(PurpleMenuAction *act) |
|
13103
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
94 | { |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
95 | g_return_if_fail(act != NULL); |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
96 | |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
97 | g_free(act->label); |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
98 | g_free(act); |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
99 | } |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
100 | |
|
21238
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
101 | void |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
102 | purple_util_init(void) |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
103 | { |
|
25888
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
25859
diff
changeset
|
104 | /* This does nothing right now. It exists for symmetry with |
|
21238
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
105 | * purple_util_uninit() and forwards compatibility. */ |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
106 | } |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
107 | |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
108 | void |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
109 | purple_util_uninit(void) |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
110 | { |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
111 | /* Free these so we don't have leaks at shutdown. */ |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
112 | |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
113 | g_free(custom_user_dir); |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
114 | custom_user_dir = NULL; |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
115 | |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
116 | g_free(user_dir); |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
117 | user_dir = NULL; |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
118 | } |
|
cd326828c870
Add and call a purple_util_uninit() to free user_dir and customer_home_dir
Richard Laager <rlaager@pidgin.im>
parents:
20992
diff
changeset
|
119 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
120 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
121 | * Base16 Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
122 | **************************************************************************/ |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
123 | gchar * |
| 15884 | 124 | purple_base16_encode(const guchar *data, gsize len) |
| 1 | 125 | { |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
126 | int i; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
127 | gchar *ascii = NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
128 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
129 | g_return_val_if_fail(data != NULL, NULL); |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
130 | g_return_val_if_fail(len > 0, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
131 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
132 | ascii = g_malloc(len * 2 + 1); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
133 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
134 | for (i = 0; i < len; i++) |
|
27116
19dff7b3ed0f
A patch from Scott Wolchok to replace snprintf() with g_snprintf() and
Richard Laager <rlaager@pidgin.im>
parents:
26996
diff
changeset
|
135 | g_snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
136 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
137 | return ascii; |
| 1 | 138 | } |
| 139 | ||
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
140 | guchar * |
| 15884 | 141 | purple_base16_decode(const char *str, gsize *ret_len) |
| 1 | 142 | { |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
143 | int len, i, accumulator = 0; |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
144 | guchar *data; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
145 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
146 | g_return_val_if_fail(str != NULL, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
147 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
148 | len = strlen(str); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
149 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
150 | g_return_val_if_fail(strlen(str) > 0, 0); |
| 15101 | 151 | g_return_val_if_fail(len % 2 == 0, 0); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
152 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
153 | data = g_malloc(len / 2); |
| 1 | 154 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
155 | for (i = 0; i < len; i++) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
156 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
157 | if ((i % 2) == 0) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
158 | accumulator = 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
159 | else |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
160 | accumulator <<= 4; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
161 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
162 | if (isdigit(str[i])) |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
163 | accumulator |= str[i] - 48; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
164 | else |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
165 | { |
|
16214
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
166 | switch(tolower(str[i])) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
167 | { |
|
16214
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
168 | case 'a': accumulator |= 10; break; |
|
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
169 | case 'b': accumulator |= 11; break; |
|
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
170 | case 'c': accumulator |= 12; break; |
|
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
171 | case 'd': accumulator |= 13; break; |
|
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
172 | case 'e': accumulator |= 14; break; |
|
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
173 | case 'f': accumulator |= 15; break; |
|
1826
2353dd376dcf
[gaim-migrate @ 1836]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1815
diff
changeset
|
174 | } |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
175 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
176 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
177 | if (i % 2) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
178 | data[(i - 1) / 2] = accumulator; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
179 | } |
| 1 | 180 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
181 | if (ret_len != NULL) |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
182 | *ret_len = len / 2; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
183 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
184 | return data; |
| 1 | 185 | } |
| 186 | ||
|
17389
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
187 | gchar * |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
188 | purple_base16_encode_chunked(const guchar *data, gsize len) |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
189 | { |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
190 | int i; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
191 | gchar *ascii = NULL; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
192 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
193 | g_return_val_if_fail(data != NULL, NULL); |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
194 | g_return_val_if_fail(len > 0, NULL); |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
195 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
196 | /* For each byte of input, we need 2 bytes for the hex representation |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
197 | * and 1 for the colon. |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
198 | * The final colon will be replaced by a terminating NULL |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
199 | */ |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
200 | ascii = g_malloc(len * 3 + 1); |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
201 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
202 | for (i = 0; i < len; i++) |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
203 | g_snprintf(&ascii[i * 3], 4, "%02hhx:", data[i]); |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
204 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
205 | /* Replace the final colon with NULL */ |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
206 | ascii[len * 3 - 1] = 0; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
207 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
208 | return ascii; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
209 | } |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
210 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
211 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
212 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
213 | * Base64 Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
214 | **************************************************************************/ |
|
4888
09f16a932490
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
215 | static const char alphabet[] = |
|
09f16a932490
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
216 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
|
09f16a932490
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
217 | "0123456789+/"; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
218 | |
| 8929 | 219 | static const char xdigits[] = |
| 220 | "0123456789abcdef"; | |
| 221 | ||
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
222 | gchar * |
| 15884 | 223 | purple_base64_encode(const guchar *data, gsize len) |
| 1 | 224 | { |
|
27459
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
225 | return g_base64_encode(data, len); |
| 1 | 226 | } |
| 227 | ||
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
228 | guchar * |
| 15884 | 229 | purple_base64_decode(const char *str, gsize *ret_len) |
| 1 | 230 | { |
|
27459
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
231 | /* |
|
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
232 | * We want to allow ret_len to be NULL for backward compatibility, |
|
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
233 | * but g_base64_decode() requires a valid length variable. So if |
|
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
234 | * ret_len is NULL then pass in a dummy variable. |
|
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
235 | */ |
|
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
236 | gsize unused; |
|
c4832605b830
Use glib's base64 encode and decode functions if they're available.
Mark Doliner <markdoliner@pidgin.im>
parents:
27361
diff
changeset
|
237 | return g_base64_decode(str, ret_len != NULL ? ret_len : &unused); |
| 1 | 238 | } |
| 239 | ||
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
240 | /************************************************************************** |
|
11132
eeb2afd70f70
[gaim-migrate @ 13189]
Mark Doliner <markdoliner@pidgin.im>
parents:
11127
diff
changeset
|
241 | * Quoted Printable Functions (see RFC 2045). |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
242 | **************************************************************************/ |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
243 | guchar * |
| 15884 | 244 | purple_quotedp_decode(const char *str, gsize *ret_len) |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
245 | { |
| 8125 | 246 | char *n, *new; |
| 247 | const char *end, *p; | |
| 7722 | 248 | |
|
8005
de2b2ad34ee5
[gaim-migrate @ 8682]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7956
diff
changeset
|
249 | n = new = g_malloc(strlen (str) + 1); |
| 8125 | 250 | end = str + strlen(str); |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
251 | |
| 8125 | 252 | for (p = str; p < end; p++, n++) { |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
253 | if (*p == '=') { |
| 8929 | 254 | if (p[1] == '\r' && p[2] == '\n') { /* 5.1 #5 */ |
| 255 | n -= 1; | |
| 256 | p += 2; | |
| 257 | } else if (p[1] == '\n') { /* fuzzy case for 5.1 #5 */ | |
| 258 | n -= 1; | |
| 259 | p += 1; | |
| 260 | } else if (p[1] && p[2]) { | |
| 261 | char *nibble1 = strchr(xdigits, tolower(p[1])); | |
| 262 | char *nibble2 = strchr(xdigits, tolower(p[2])); | |
| 263 | if (nibble1 && nibble2) { /* 5.1 #1 */ | |
| 264 | *n = ((nibble1 - xdigits) << 4) | (nibble2 - xdigits); | |
| 265 | p += 2; | |
| 266 | } else { /* This should never happen */ | |
| 267 | *n = *p; | |
| 268 | } | |
| 269 | } else { /* This should never happen */ | |
| 270 | *n = *p; | |
| 271 | } | |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
272 | } |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
273 | else if (*p == '_') |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
274 | *n = ' '; |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
275 | else |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
276 | *n = *p; |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
277 | } |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
278 | |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
279 | *n = '\0'; |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
280 | |
|
11132
eeb2afd70f70
[gaim-migrate @ 13189]
Mark Doliner <markdoliner@pidgin.im>
parents:
11127
diff
changeset
|
281 | if (ret_len != NULL) |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
282 | *ret_len = n - new; |
| 7722 | 283 | |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
284 | /* Resize to take less space */ |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
285 | /* new = realloc(new, n - new); */ |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
286 | |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
287 | return (guchar *)new; |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
288 | } |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
289 | |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
290 | /************************************************************************** |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
291 | * MIME Functions |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
292 | **************************************************************************/ |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
293 | char * |
| 15884 | 294 | purple_mime_decode_field(const char *str) |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
295 | { |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
296 | /* |
| 8958 | 297 | * This is wing's version, partially based on revo/shx's version |
| 298 | * See RFC2047 [which apparently obsoletes RFC1342] | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
299 | */ |
| 8958 | 300 | typedef enum { |
| 301 | state_start, state_equal1, state_question1, | |
| 302 | state_charset, state_question2, | |
| 303 | state_encoding, state_question3, | |
| 304 | state_encoded_text, state_question4, state_equal2 = state_start | |
| 305 | } encoded_word_state_t; | |
| 306 | encoded_word_state_t state = state_start; | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
307 | const char *cur, *mark; |
| 8958 | 308 | const char *charset0 = NULL, *encoding0 = NULL, *encoded_text0 = NULL; |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
309 | GString *new; |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
310 | |
| 8976 | 311 | /* token can be any CHAR (supposedly ISO8859-1/ISO2022), not just ASCII */ |
| 8958 | 312 | #define token_char_p(c) \ |
| 313 | (c != ' ' && !iscntrl(c) && !strchr("()<>@,;:\"/[]?.=", c)) | |
| 314 | ||
| 315 | /* But encoded-text must be ASCII; alas, isascii() may not exist */ | |
| 316 | #define encoded_text_char_p(c) \ | |
| 317 | ((c & 0x80) == 0 && c != '?' && c != ' ' && isgraph(c)) | |
| 318 | ||
| 8976 | 319 | g_return_val_if_fail(str != NULL, NULL); |
| 320 | ||
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
321 | new = g_string_new(NULL); |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
322 | |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
323 | /* Here we will be looking for encoded words and if they seem to be |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
324 | * valid then decode them. |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
325 | * They are of this form: =?charset?encoding?text?= |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
326 | */ |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
327 | |
| 8958 | 328 | for (cur = str, mark = NULL; *cur; cur += 1) { |
| 329 | switch (state) { | |
| 330 | case state_equal1: | |
| 331 | if (*cur == '?') { | |
| 332 | state = state_question1; | |
| 333 | } else { | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
334 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 335 | state = state_start; |
| 336 | } | |
| 337 | break; | |
| 338 | case state_question1: | |
| 339 | if (token_char_p(*cur)) { | |
| 340 | charset0 = cur; | |
| 341 | state = state_charset; | |
| 342 | } else { /* This should never happen */ | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
343 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 344 | state = state_start; |
| 345 | } | |
| 346 | break; | |
| 347 | case state_charset: | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
348 | if (*cur == '?') { |
| 8958 | 349 | state = state_question2; |
| 8976 | 350 | } else if (!token_char_p(*cur)) { /* This should never happen */ |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
351 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 352 | state = state_start; |
| 353 | } | |
| 354 | break; | |
| 355 | case state_question2: | |
| 356 | if (token_char_p(*cur)) { | |
| 357 | encoding0 = cur; | |
| 358 | state = state_encoding; | |
| 359 | } else { /* This should never happen */ | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
360 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 361 | state = state_start; |
| 362 | } | |
| 363 | break; | |
| 364 | case state_encoding: | |
| 365 | if (*cur == '?') { | |
| 366 | state = state_question3; | |
| 8976 | 367 | } else if (!token_char_p(*cur)) { /* This should never happen */ |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
368 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 369 | state = state_start; |
| 370 | } | |
| 371 | break; | |
| 372 | case state_question3: | |
| 373 | if (encoded_text_char_p(*cur)) { | |
| 374 | encoded_text0 = cur; | |
| 375 | state = state_encoded_text; | |
| 8976 | 376 | } else if (*cur == '?') { /* empty string */ |
| 377 | encoded_text0 = cur; | |
| 378 | state = state_question4; | |
| 8958 | 379 | } else { /* This should never happen */ |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
380 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 381 | state = state_start; |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
382 | } |
| 8958 | 383 | break; |
| 384 | case state_encoded_text: | |
| 385 | if (*cur == '?') { | |
| 386 | state = state_question4; | |
| 387 | } else if (!encoded_text_char_p(*cur)) { | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
388 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 389 | state = state_start; |
| 390 | } | |
| 391 | break; | |
| 392 | case state_question4: | |
| 393 | if (*cur == '=') { /* Got the whole encoded-word */ | |
| 394 | char *charset = g_strndup(charset0, encoding0 - charset0 - 1); | |
| 395 | char *encoding = g_strndup(encoding0, encoded_text0 - encoding0 - 1); | |
| 396 | char *encoded_text = g_strndup(encoded_text0, cur - encoded_text0 - 1); | |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
397 | guchar *decoded = NULL; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
398 | gsize dec_len; |
| 8958 | 399 | if (g_ascii_strcasecmp(encoding, "Q") == 0) |
| 15884 | 400 | decoded = purple_quotedp_decode(encoded_text, &dec_len); |
| 8958 | 401 | else if (g_ascii_strcasecmp(encoding, "B") == 0) |
| 15884 | 402 | decoded = purple_base64_decode(encoded_text, &dec_len); |
| 8958 | 403 | else |
| 404 | decoded = NULL; | |
| 405 | if (decoded) { | |
| 406 | gsize len; | |
|
11132
eeb2afd70f70
[gaim-migrate @ 13189]
Mark Doliner <markdoliner@pidgin.im>
parents:
11127
diff
changeset
|
407 | char *converted = g_convert((const gchar *)decoded, dec_len, "utf-8", charset, NULL, &len, NULL); |
| 8958 | 408 | |
| 409 | if (converted) { | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
410 | g_string_append_len(new, converted, len); |
| 8958 | 411 | g_free(converted); |
| 412 | } | |
| 413 | g_free(decoded); | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
414 | } |
| 8958 | 415 | g_free(charset); |
| 416 | g_free(encoding); | |
| 417 | g_free(encoded_text); | |
| 418 | state = state_equal2; /* Restart the FSM */ | |
| 419 | } else { /* This should never happen */ | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
420 | g_string_append_len(new, mark, cur - mark + 1); |
| 8958 | 421 | state = state_start; |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
422 | } |
| 8958 | 423 | break; |
| 424 | default: | |
| 425 | if (*cur == '=') { | |
| 426 | mark = cur; | |
| 427 | state = state_equal1; | |
| 428 | } else { | |
| 429 | /* Some unencoded text. */ | |
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
430 | g_string_append_c(new, *cur); |
| 8958 | 431 | } |
| 432 | break; | |
| 433 | } /* switch */ | |
| 434 | } /* for */ | |
| 435 | ||
|
28185
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
436 | if (state != state_start) |
|
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
437 | g_string_append_len(new, mark, cur - mark + 1); |
|
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
438 | |
|
0980ccaa7064
How about we just use a GString instead of this ridiculous
Mark Doliner <markdoliner@pidgin.im>
parents:
28136
diff
changeset
|
439 | return g_string_free(new, FALSE);; |
|
7840
6a145f8cea82
[gaim-migrate @ 8493]
Mark Doliner <markdoliner@pidgin.im>
parents:
7824
diff
changeset
|
440 | } |
|
7824
8ac3a78f2ec0
[gaim-migrate @ 8476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7820
diff
changeset
|
441 | |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
442 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
443 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
444 | * Date/Time Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
445 | **************************************************************************/ |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
446 | |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
447 | const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso) |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
448 | { |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
449 | static char buf[7]; |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
450 | long off; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
451 | gint8 min; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
452 | gint8 hrs; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
453 | struct tm new_tm = *tm; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
454 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
455 | mktime(&new_tm); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
456 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
457 | if (new_tm.tm_isdst < 0) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
458 | g_return_val_if_reached(""); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
459 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
460 | #ifdef _WIN32 |
|
20587
55af483c9e86
3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents:
19662
diff
changeset
|
461 | if ((off = wpurple_get_tz_offset()) == -1) |
|
13427
9830277962aa
[gaim-migrate @ 15801]
Daniel Atallah <datallah@pidgin.im>
parents:
13400
diff
changeset
|
462 | return ""; |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
463 | #else |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
464 | # ifdef HAVE_TM_GMTOFF |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
465 | off = new_tm.tm_gmtoff; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
466 | # else |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
467 | # ifdef HAVE_TIMEZONE |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
468 | tzset(); |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
469 | off = -1 * timezone; |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
470 | # endif /* HAVE_TIMEZONE */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
471 | # endif /* !HAVE_TM_GMTOFF */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
472 | #endif /* _WIN32 */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
473 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
474 | min = (off / 60) % 60; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
475 | hrs = ((off / 60) - min) / 60; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
476 | |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
477 | if(iso) { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
478 | if (0 == off) { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
479 | strcpy(buf, "Z"); |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
480 | } else { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
481 | /* please leave the colons...they're optional for iso, but jabber |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
482 | * wants them */ |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
483 | if(g_snprintf(buf, sizeof(buf), "%+03d:%02d", hrs, ABS(min)) > 6) |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
484 | g_return_val_if_reached(""); |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
485 | } |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
486 | } else { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
487 | if (g_snprintf(buf, sizeof(buf), "%+03d%02d", hrs, ABS(min)) > 5) |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
488 | g_return_val_if_reached(""); |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
489 | } |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
490 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
491 | return buf; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
492 | } |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
493 | |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
494 | /* Windows doesn't HAVE_STRFTIME_Z_FORMAT, but this seems clearer. -- rlaager */ |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
495 | #if !defined(HAVE_STRFTIME_Z_FORMAT) || defined(_WIN32) |
| 15884 | 496 | static size_t purple_internal_strftime(char *s, size_t max, const char *format, const struct tm *tm) |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
497 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
498 | const char *start; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
499 | const char *c; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
500 | char *fmt = NULL; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
501 | |
| 15884 | 502 | /* Yes, this is checked in purple_utf8_strftime(), |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
503 | * but better safe than sorry. -- rlaager */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
504 | g_return_val_if_fail(format != NULL, 0); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
505 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
506 | /* This is fairly efficient, and it only gets |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
507 | * executed on Windows or if the underlying |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
508 | * system doesn't support the %z format string, |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
509 | * for strftime() so I think it's good enough. |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
510 | * -- rlaager */ |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
511 | for (c = start = format; *c ; c++) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
512 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
513 | if (*c != '%') |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
514 | continue; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
515 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
516 | c++; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
517 | |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
518 | #ifndef HAVE_STRFTIME_Z_FORMAT |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
519 | if (*c == 'z') |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
520 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
521 | char *tmp = g_strdup_printf("%s%.*s%s", |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
522 | fmt ? fmt : "", |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
523 | c - start - 1, |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
524 | start, |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
525 | purple_get_tzoff_str(tm, FALSE)); |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
526 | g_free(fmt); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
527 | fmt = tmp; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
528 | start = c + 1; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
529 | } |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
530 | #endif |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
531 | #ifdef _WIN32 |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
532 | if (*c == 'Z') |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
533 | { |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
534 | char *tmp = g_strdup_printf("%s%.*s%s", |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
535 | fmt ? fmt : "", |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
536 | c - start - 1, |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
537 | start, |
| 15884 | 538 | wpurple_get_timezone_abbreviation(tm)); |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
539 | g_free(fmt); |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
540 | fmt = tmp; |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
541 | start = c + 1; |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
542 | } |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
543 | #endif |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
544 | } |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
545 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
546 | if (fmt != NULL) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
547 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
548 | size_t ret; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
549 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
550 | if (*start) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
551 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
552 | char *tmp = g_strconcat(fmt, start, NULL); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
553 | g_free(fmt); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
554 | fmt = tmp; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
555 | } |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
556 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
557 | ret = strftime(s, max, fmt, tm); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
558 | g_free(fmt); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
559 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
560 | return ret; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
561 | } |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
562 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
563 | return strftime(s, max, format, tm); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
564 | } |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
565 | #else /* HAVE_STRFTIME_Z_FORMAT && !_WIN32 */ |
| 15884 | 566 | #define purple_internal_strftime strftime |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
567 | #endif |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
568 | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
569 | const char * |
| 15884 | 570 | purple_utf8_strftime(const char *format, const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
571 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
572 | static char buf[128]; |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
573 | char *locale; |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
574 | GError *err = NULL; |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
575 | int len; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
576 | char *utf8; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
577 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
578 | g_return_val_if_fail(format != NULL, NULL); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
579 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
580 | if (tm == NULL) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
581 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
582 | time_t now = time(NULL); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
583 | tm = localtime(&now); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
584 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
585 | |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
586 | locale = g_locale_from_utf8(format, -1, NULL, NULL, &err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
587 | if (err != NULL) |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
588 | { |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19766
diff
changeset
|
589 | purple_debug_error("util", "Format conversion failed in purple_utf8_strftime(): %s\n", err->message); |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
590 | g_error_free(err); |
|
30022
02acf3b187c3
util: Fix a crash in purple_utf8_strftime.
Florian Quèze <florian@instantbird.org>
parents:
29924
diff
changeset
|
591 | err = NULL; |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
592 | locale = g_strdup(format); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
593 | } |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
594 | |
|
13116
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
595 | /* A return value of 0 is either an error (in |
|
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
596 | * which case, the contents of the buffer are |
|
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
597 | * undefined) or the empty string (in which |
|
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
598 | * case, no harm is done here). */ |
| 15884 | 599 | if ((len = purple_internal_strftime(buf, sizeof(buf), locale, tm)) == 0) |
|
13116
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
600 | { |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
601 | g_free(locale); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
602 | return ""; |
|
13116
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
603 | } |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
604 | |
|
13308
e6882a87f32d
[gaim-migrate @ 15673]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13216
diff
changeset
|
605 | g_free(locale); |
|
e6882a87f32d
[gaim-migrate @ 15673]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13216
diff
changeset
|
606 | |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
607 | utf8 = g_locale_to_utf8(buf, len, NULL, NULL, &err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
608 | if (err != NULL) |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
609 | { |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19766
diff
changeset
|
610 | purple_debug_error("util", "Result conversion failed in purple_utf8_strftime(): %s\n", err->message); |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
611 | g_error_free(err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
612 | } |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
613 | else |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
614 | { |
| 15884 | 615 | purple_strlcpy(buf, utf8); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
616 | g_free(utf8); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
617 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
618 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
619 | return buf; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
620 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
621 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
622 | const char * |
| 15884 | 623 | purple_date_format_short(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
624 | { |
| 15884 | 625 | return purple_utf8_strftime("%x", tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
626 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
627 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
628 | const char * |
| 15884 | 629 | purple_date_format_long(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
630 | { |
|
23995
21770001c61b
Add a note for translators, because they probably have no idea what
Mark Doliner <markdoliner@pidgin.im>
parents:
23979
diff
changeset
|
631 | /* |
|
21770001c61b
Add a note for translators, because they probably have no idea what
Mark Doliner <markdoliner@pidgin.im>
parents:
23979
diff
changeset
|
632 | * This string determines how some dates are displayed. The default |
|
21770001c61b
Add a note for translators, because they probably have no idea what
Mark Doliner <markdoliner@pidgin.im>
parents:
23979
diff
changeset
|
633 | * string "%x %X" shows the date then the time. Translators can |
|
21770001c61b
Add a note for translators, because they probably have no idea what
Mark Doliner <markdoliner@pidgin.im>
parents:
23979
diff
changeset
|
634 | * change this to "%X %x" if they want the time to be shown first, |
|
21770001c61b
Add a note for translators, because they probably have no idea what
Mark Doliner <markdoliner@pidgin.im>
parents:
23979
diff
changeset
|
635 | * followed by the date. |
|
21770001c61b
Add a note for translators, because they probably have no idea what
Mark Doliner <markdoliner@pidgin.im>
parents:
23979
diff
changeset
|
636 | */ |
| 15884 | 637 | return purple_utf8_strftime(_("%x %X"), tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
638 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
639 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
640 | const char * |
| 15884 | 641 | purple_date_format_full(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
642 | { |
| 15884 | 643 | return purple_utf8_strftime("%c", tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
644 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
645 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
646 | const char * |
| 15884 | 647 | purple_time_format(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
648 | { |
| 15884 | 649 | return purple_utf8_strftime("%X", tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
650 | } |
| 3630 | 651 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
652 | time_t |
| 15884 | 653 | purple_time_build(int year, int month, int day, int hour, int min, int sec) |
|
1805
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
654 | { |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
655 | struct tm tm; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
656 | |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
657 | tm.tm_year = year - 1900; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
658 | tm.tm_mon = month - 1; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
659 | tm.tm_mday = day; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
660 | tm.tm_hour = hour; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
661 | tm.tm_min = min; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
662 | tm.tm_sec = sec >= 0 ? sec : time(NULL) % 60; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
663 | |
|
1805
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
664 | return mktime(&tm); |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
665 | } |
|
3230
6d0e07333504
[gaim-migrate @ 3247]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3153
diff
changeset
|
666 | |
| 8577 | 667 | time_t |
| 15884 | 668 | purple_str_to_time(const char *timestamp, gboolean utc, |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
669 | struct tm *tm, long *tz_off, const char **rest) |
| 8577 | 670 | { |
|
9722
c1072806bcae
[gaim-migrate @ 10583]
Mark Doliner <markdoliner@pidgin.im>
parents:
9716
diff
changeset
|
671 | time_t retval = 0; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
672 | static struct tm t; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
673 | const char *c = timestamp; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
674 | int year = 0; |
| 15884 | 675 | long tzoff = PURPLE_NO_TZ_OFF; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
676 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
677 | time(&retval); |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
678 | localtime_r(&retval, &t); |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
679 | |
|
24177
b4e6c6d462db
purple_str_to_time() didn't necessarily set "rest" under all circumstances.
Daniel Atallah <datallah@pidgin.im>
parents:
24072
diff
changeset
|
680 | if (rest != NULL) |
|
b4e6c6d462db
purple_str_to_time() didn't necessarily set "rest" under all circumstances.
Daniel Atallah <datallah@pidgin.im>
parents:
24072
diff
changeset
|
681 | *rest = NULL; |
|
b4e6c6d462db
purple_str_to_time() didn't necessarily set "rest" under all circumstances.
Daniel Atallah <datallah@pidgin.im>
parents:
24072
diff
changeset
|
682 | |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
683 | /* 4 digit year */ |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
684 | if (sscanf(c, "%04d", &year) && year > 1900) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
685 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
686 | c += 4; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
687 | if (*c == '-') |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
688 | c++; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
689 | t.tm_year = year - 1900; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
690 | } |
| 8577 | 691 | |
| 692 | /* 2 digit month */ | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
693 | if (!sscanf(c, "%02d", &t.tm_mon)) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
694 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
695 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
696 | *rest = c; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
697 | return 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
698 | } |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
699 | c += 2; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
700 | if (*c == '-' || *c == '/') |
| 8577 | 701 | c++; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
702 | t.tm_mon -= 1; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
703 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
704 | /* 2 digit day */ |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
705 | if (!sscanf(c, "%02d", &t.tm_mday)) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
706 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
707 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
708 | *rest = c; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
709 | return 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
710 | } |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
711 | c += 2; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
712 | if (*c == '/') |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
713 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
714 | c++; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
715 | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
716 | if (!sscanf(c, "%04d", &t.tm_year)) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
717 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
718 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
719 | *rest = c; |
|
13465
259b56595409
[gaim-migrate @ 15839]
Richard Laager <rlaager@pidgin.im>
parents:
13444
diff
changeset
|
720 | return 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
721 | } |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
722 | t.tm_year -= 1900; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
723 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
724 | else if (*c == 'T' || *c == '.') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
725 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
726 | c++; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
727 | /* we have more than a date, keep going */ |
|
9725
4383542a4291
[gaim-migrate @ 10586]
Mark Doliner <markdoliner@pidgin.im>
parents:
9722
diff
changeset
|
728 | |
|
4383542a4291
[gaim-migrate @ 10586]
Mark Doliner <markdoliner@pidgin.im>
parents:
9722
diff
changeset
|
729 | /* 2 digit hour */ |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
730 | if ((sscanf(c, "%02d:%02d:%02d", &t.tm_hour, &t.tm_min, &t.tm_sec) == 3 && (c = c + 8)) || |
|
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
731 | (sscanf(c, "%02d%02d%02d", &t.tm_hour, &t.tm_min, &t.tm_sec) == 3 && (c = c + 6))) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
732 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
733 | gboolean offset_positive = FALSE; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
734 | int tzhrs; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
735 | int tzmins; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
736 | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
737 | t.tm_isdst = -1; |
| 10876 | 738 | |
|
21696
9eac1e42a98e
Fix a bug in purple_str_to_time() that could cause it to try reading past
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21665
diff
changeset
|
739 | if (*c == '.') { |
|
9eac1e42a98e
Fix a bug in purple_str_to_time() that could cause it to try reading past
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21665
diff
changeset
|
740 | do { |
|
9eac1e42a98e
Fix a bug in purple_str_to_time() that could cause it to try reading past
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21665
diff
changeset
|
741 | c++; |
|
9eac1e42a98e
Fix a bug in purple_str_to_time() that could cause it to try reading past
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21665
diff
changeset
|
742 | } while (*c >= '0' && *c <= '9'); /* dealing with precision we don't care about */ |
|
9eac1e42a98e
Fix a bug in purple_str_to_time() that could cause it to try reading past
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21665
diff
changeset
|
743 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
744 | if (*c == '+') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
745 | offset_positive = TRUE; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
746 | if (((*c == '+' || *c == '-') && (c = c + 1)) && |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
747 | ((sscanf(c, "%02d:%02d", &tzhrs, &tzmins) == 2 && (c = c + 5)) || |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
748 | (sscanf(c, "%02d%02d", &tzhrs, &tzmins) == 2 && (c = c + 4)))) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
749 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
750 | tzoff = tzhrs*60*60 + tzmins*60; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
751 | if (offset_positive) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
752 | tzoff *= -1; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
753 | } |
|
23507
7035c0e7f8ce
Allow a 'Z' (UTC) TZ in strings passed to purple_str_to_time. Used for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23391
diff
changeset
|
754 | else if ((*c == 'Z') && (c = c + 1)) |
|
7035c0e7f8ce
Allow a 'Z' (UTC) TZ in strings passed to purple_str_to_time. Used for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23391
diff
changeset
|
755 | { |
|
7035c0e7f8ce
Allow a 'Z' (UTC) TZ in strings passed to purple_str_to_time. Used for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23391
diff
changeset
|
756 | /* 'Z' = Zulu = UTC */ |
|
7035c0e7f8ce
Allow a 'Z' (UTC) TZ in strings passed to purple_str_to_time. Used for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23391
diff
changeset
|
757 | tzoff = 0; |
|
7035c0e7f8ce
Allow a 'Z' (UTC) TZ in strings passed to purple_str_to_time. Used for
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
23391
diff
changeset
|
758 | } |
|
15059
73305cb095c7
[gaim-migrate @ 17776]
Richard Laager <rlaager@pidgin.im>
parents:
15021
diff
changeset
|
759 | else if (utc) |
|
73305cb095c7
[gaim-migrate @ 17776]
Richard Laager <rlaager@pidgin.im>
parents:
15021
diff
changeset
|
760 | { |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
761 | static struct tm tmptm; |
|
21697
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
762 | time_t tmp; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
763 | tmp = mktime(&t); |
|
21697
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
764 | /* we care about whether it *was* dst, and the offset, here on this |
|
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
765 | * date, not whether we are currently observing dst locally *now*. |
|
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
766 | * This isn't perfect, because we would need to know in advance the |
|
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
767 | * offset we are trying to work out in advance to be sure this |
|
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
768 | * works for times around dst transitions but it'll have to do. */ |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
769 | localtime_r(&tmp, &tmptm); |
|
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
770 | t.tm_isdst = tmptm.tm_isdst; |
|
21697
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
771 | #ifdef HAVE_TM_GMTOFF |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
772 | t.tm_gmtoff = tmptm.tm_gmtoff; |
|
21697
c865512e913f
Fix the bug in purple_str_to_time() that was causing 'make check' to fail.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21696
diff
changeset
|
773 | #endif |
|
15059
73305cb095c7
[gaim-migrate @ 17776]
Richard Laager <rlaager@pidgin.im>
parents:
15021
diff
changeset
|
774 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
775 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
776 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
777 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
778 | if (*c == ' ') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
779 | c++; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
780 | if (*c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
781 | *rest = c; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
782 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
783 | |
| 15884 | 784 | if (tzoff != PURPLE_NO_TZ_OFF || utc) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
785 | { |
|
13585
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
786 | #if defined(_WIN32) |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
787 | long sys_tzoff; |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
788 | #endif |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
789 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
790 | #if defined(_WIN32) || defined(HAVE_TM_GMTOFF) || defined (HAVE_TIMEZONE) |
| 15884 | 791 | if (tzoff == PURPLE_NO_TZ_OFF) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
792 | tzoff = 0; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
793 | #endif |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
794 | |
|
10987
50b656536923
[gaim-migrate @ 12824]
Daniel Atallah <datallah@pidgin.im>
parents:
10948
diff
changeset
|
795 | #ifdef _WIN32 |
|
20587
55af483c9e86
3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents:
19662
diff
changeset
|
796 | if ((sys_tzoff = wpurple_get_tz_offset()) == -1) |
| 15884 | 797 | tzoff = PURPLE_NO_TZ_OFF; |
|
13585
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
798 | else |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
799 | tzoff += sys_tzoff; |
|
10987
50b656536923
[gaim-migrate @ 12824]
Daniel Atallah <datallah@pidgin.im>
parents:
10948
diff
changeset
|
800 | #else |
| 8577 | 801 | #ifdef HAVE_TM_GMTOFF |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
802 | tzoff += t.tm_gmtoff; |
| 8577 | 803 | #else |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
804 | # ifdef HAVE_TIMEZONE |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
805 | tzset(); /* making sure */ |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
806 | tzoff -= timezone; |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
807 | # endif |
| 8577 | 808 | #endif |
|
10987
50b656536923
[gaim-migrate @ 12824]
Daniel Atallah <datallah@pidgin.im>
parents:
10948
diff
changeset
|
809 | #endif /* _WIN32 */ |
| 8577 | 810 | } |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
811 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
812 | else |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
813 | { |
|
13400
a23782f450d2
[gaim-migrate @ 15773]
Richard Laager <rlaager@pidgin.im>
parents:
13368
diff
changeset
|
814 | if (rest != NULL && *c != '\0') |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
815 | *rest = c; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
816 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
817 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
818 | |
|
23061
a863009f90fa
Fix purple_str_to_time() to not break the returned value when we have given
Richard Laager <rlaager@pidgin.im>
parents:
23028
diff
changeset
|
819 | retval = mktime(&t); |
|
a863009f90fa
Fix purple_str_to_time() to not break the returned value when we have given
Richard Laager <rlaager@pidgin.im>
parents:
23028
diff
changeset
|
820 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
821 | if (tm != NULL) |
|
21707
c2f50b4a53e8
I had used memcpy to copy the struct tm to where the caller wants it, but
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21698
diff
changeset
|
822 | *tm = t; |
|
23061
a863009f90fa
Fix purple_str_to_time() to not break the returned value when we have given
Richard Laager <rlaager@pidgin.im>
parents:
23028
diff
changeset
|
823 | |
| 15884 | 824 | if (tzoff != PURPLE_NO_TZ_OFF) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
825 | retval += tzoff; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
826 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
827 | if (tz_off != NULL) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
828 | *tz_off = tzoff; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
829 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
830 | return retval; |
| 8577 | 831 | } |
| 832 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
833 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
834 | * Markup Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
835 | **************************************************************************/ |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
836 | |
|
27652
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
837 | /* |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
838 | * This function is stolen from glib's gmarkup.c and modified to not |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
839 | * replace ' with ' |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
840 | */ |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
841 | static void append_escaped_text(GString *str, |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
842 | const gchar *text, gssize length) |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
843 | { |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
844 | const gchar *p; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
845 | const gchar *end; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
846 | gunichar c; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
847 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
848 | p = text; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
849 | end = text + length; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
850 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
851 | while (p != end) |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
852 | { |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
853 | const gchar *next; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
854 | next = g_utf8_next_char (p); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
855 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
856 | switch (*p) |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
857 | { |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
858 | case '&': |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
859 | g_string_append (str, "&"); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
860 | break; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
861 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
862 | case '<': |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
863 | g_string_append (str, "<"); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
864 | break; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
865 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
866 | case '>': |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
867 | g_string_append (str, ">"); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
868 | break; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
869 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
870 | case '"': |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
871 | g_string_append (str, """); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
872 | break; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
873 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
874 | default: |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
875 | c = g_utf8_get_char (p); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
876 | if ((0x1 <= c && c <= 0x8) || |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
877 | (0xb <= c && c <= 0xc) || |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
878 | (0xe <= c && c <= 0x1f) || |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
879 | (0x7f <= c && c <= 0x84) || |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
880 | (0x86 <= c && c <= 0x9f)) |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
881 | g_string_append_printf (str, "&#x%x;", c); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
882 | else |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
883 | g_string_append_len (str, p, next - p); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
884 | break; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
885 | } |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
886 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
887 | p = next; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
888 | } |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
889 | } |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
890 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
891 | /* This function is stolen from glib's gmarkup.c */ |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
892 | gchar *purple_markup_escape_text(const gchar *text, gssize length) |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
893 | { |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
894 | GString *str; |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
895 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
896 | g_return_val_if_fail(text != NULL, NULL); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
897 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
898 | if (length < 0) |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
899 | length = strlen(text); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
900 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
901 | /* prealloc at least as long as original text */ |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
902 | str = g_string_sized_new(length); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
903 | append_escaped_text(str, text, length); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
904 | |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
905 | return g_string_free(str, FALSE); |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
906 | } |
|
1929fae118e5
Create a purple_markup_escape_text() function and use it in one place
Mark Doliner <markdoliner@pidgin.im>
parents:
27632
diff
changeset
|
907 | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
908 | const char * |
| 16144 | 909 | purple_markup_unescape_entity(const char *text, int *length) |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
910 | { |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
911 | const char *pln; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
912 | int len, pound; |
|
21909
0fa4d1107182
Patch #3848 from Eion Robb: "purple_markup_unescape_entity doesn't escape hexadecimal references", with changes from QuLogic.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21707
diff
changeset
|
913 | char temp[2]; |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
914 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
915 | if (!text || *text != '&') |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
916 | return NULL; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
917 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
918 | #define IS_ENTITY(s) (!g_ascii_strncasecmp(text, s, (len = sizeof(s) - 1))) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
919 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
920 | if(IS_ENTITY("&")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
921 | pln = "&"; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
922 | else if(IS_ENTITY("<")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
923 | pln = "<"; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
924 | else if(IS_ENTITY(">")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
925 | pln = ">"; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
926 | else if(IS_ENTITY(" ")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
927 | pln = " "; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
928 | else if(IS_ENTITY("©")) |
|
14236
543c18d72123
[gaim-migrate @ 16824]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14233
diff
changeset
|
929 | pln = "\302\251"; /* or use g_unichar_to_utf8(0xa9); */ |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
930 | else if(IS_ENTITY(""")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
931 | pln = "\""; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
932 | else if(IS_ENTITY("®")) |
|
14236
543c18d72123
[gaim-migrate @ 16824]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14233
diff
changeset
|
933 | pln = "\302\256"; /* or use g_unichar_to_utf8(0xae); */ |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
934 | else if(IS_ENTITY("'")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
935 | pln = "\'"; |
|
21909
0fa4d1107182
Patch #3848 from Eion Robb: "purple_markup_unescape_entity doesn't escape hexadecimal references", with changes from QuLogic.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21707
diff
changeset
|
936 | else if(*(text+1) == '#' && |
|
22445
457464fe951f
Revert some bits of the earlier patch not related to custom smileys.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22444
diff
changeset
|
937 | (sscanf(text, "&#%u%1[;]", £, temp) == 2 || |
|
457464fe951f
Revert some bits of the earlier patch not related to custom smileys.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22444
diff
changeset
|
938 | sscanf(text, "&#x%x%1[;]", £, temp) == 2) && |
|
21909
0fa4d1107182
Patch #3848 from Eion Robb: "purple_markup_unescape_entity doesn't escape hexadecimal references", with changes from QuLogic.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21707
diff
changeset
|
939 | pound != 0) { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
940 | static char buf[7]; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
941 | int buflen = g_unichar_to_utf8((gunichar)pound, buf); |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
942 | buf[buflen] = '\0'; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
943 | pln = buf; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
944 | |
|
27528
fab5d97a7bc6
Fix purple_markup_unescape_entity to properly consume '\' and similar.
Paul Aurich <darkrain42@pidgin.im>
parents:
27519
diff
changeset
|
945 | len = (*(text+2) == 'x' ? 3 : 2); |
|
fab5d97a7bc6
Fix purple_markup_unescape_entity to properly consume '\' and similar.
Paul Aurich <darkrain42@pidgin.im>
parents:
27519
diff
changeset
|
946 | while(isxdigit((gint) text[len])) len++; |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
947 | if(text[len] == ';') len++; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
948 | } |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
949 | else |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
950 | return NULL; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
951 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
952 | if (length) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
953 | *length = len; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
954 | return pln; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
955 | } |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
956 | |
| 16144 | 957 | char * |
| 958 | purple_markup_get_css_property(const gchar *style, | |
| 959 | const gchar *opt) | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
960 | { |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
961 | const gchar *css_str = style; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
962 | const gchar *css_value_start; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
963 | const gchar *css_value_end; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
964 | gchar *tmp; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
965 | gchar *ret; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
966 | |
| 24642 | 967 | g_return_val_if_fail(opt != NULL, NULL); |
| 968 | ||
| 16144 | 969 | if (!css_str) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
970 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
971 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
972 | /* find the CSS property */ |
| 16144 | 973 | while (1) |
| 974 | { | |
| 975 | /* skip whitespace characters */ | |
| 976 | while (*css_str && g_ascii_isspace(*css_str)) | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
977 | css_str++; |
| 16144 | 978 | if (!g_ascii_isalpha(*css_str)) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
979 | return NULL; |
| 16144 | 980 | if (g_ascii_strncasecmp(css_str, opt, strlen(opt))) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
981 | { |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
982 | /* go to next css property positioned after the next ';' */ |
| 16144 | 983 | while (*css_str && *css_str != '"' && *css_str != ';') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
984 | css_str++; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
985 | if(*css_str != ';') |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
986 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
987 | css_str++; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
988 | } |
| 16144 | 989 | else |
| 990 | break; | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
991 | } |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
992 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
993 | /* find the CSS value position in the string */ |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
994 | css_str += strlen(opt); |
| 16144 | 995 | while (*css_str && g_ascii_isspace(*css_str)) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
996 | css_str++; |
| 16144 | 997 | if (*css_str != ':') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
998 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
999 | css_str++; |
| 16144 | 1000 | while (*css_str && g_ascii_isspace(*css_str)) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1001 | css_str++; |
| 16144 | 1002 | if (*css_str == '\0' || *css_str == '"' || *css_str == ';') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1003 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1004 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1005 | /* mark the CSS value */ |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1006 | css_value_start = css_str; |
| 16144 | 1007 | while (*css_str && *css_str != '"' && *css_str != ';') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1008 | css_str++; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1009 | css_value_end = css_str - 1; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1010 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1011 | /* Removes trailing whitespace */ |
| 16144 | 1012 | while (css_value_end > css_value_start && g_ascii_isspace(*css_value_end)) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1013 | css_value_end--; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1014 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1015 | tmp = g_strndup(css_value_start, css_value_end - css_value_start + 1); |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1016 | ret = purple_unescape_html(tmp); |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1017 | g_free(tmp); |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1018 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1019 | return ret; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1020 | } |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1021 | |
|
27234
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1022 | gboolean purple_markup_is_rtl(const char *html) |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1023 | { |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1024 | GData *attributes; |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1025 | const gchar *start, *end; |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1026 | gboolean res = FALSE; |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1027 | |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1028 | if (purple_markup_find_tag("span", html, &start, &end, &attributes)) |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1029 | { |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1030 | /* tmp is a member of attributes and is free with g_datalist_clear call */ |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1031 | const char *tmp = g_datalist_get_data(&attributes, "dir"); |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1032 | if (tmp && !g_ascii_strcasecmp(tmp, "RTL")) |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1033 | res = TRUE; |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1034 | if (!res) |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1035 | { |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1036 | tmp = g_datalist_get_data(&attributes, "style"); |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1037 | if (tmp) |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1038 | { |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1039 | char *tmp2 = purple_markup_get_css_property(tmp, "direction"); |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1040 | if (tmp2 && !g_ascii_strcasecmp(tmp2, "RTL")) |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1041 | res = TRUE; |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1042 | g_free(tmp2); |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1043 | } |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1044 | |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1045 | } |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1046 | g_datalist_clear(&attributes); |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1047 | } |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1048 | return res; |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1049 | } |
|
82035475de62
Add a utlity function purple_markup_is_rtl
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27192
diff
changeset
|
1050 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1051 | gboolean |
| 15884 | 1052 | purple_markup_find_tag(const char *needle, const char *haystack, |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1053 | const char **start, const char **end, GData **attributes) |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1054 | { |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1055 | GData *attribs; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1056 | const char *cur = haystack; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1057 | char *name = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1058 | gboolean found = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1059 | gboolean in_tag = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1060 | gboolean in_attr = FALSE; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1061 | const char *in_quotes = NULL; |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1062 | size_t needlelen; |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1063 | |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1064 | g_return_val_if_fail( needle != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1065 | g_return_val_if_fail( *needle != '\0', FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1066 | g_return_val_if_fail( haystack != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1067 | g_return_val_if_fail( start != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1068 | g_return_val_if_fail( end != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1069 | g_return_val_if_fail(attributes != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1070 | |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1071 | needlelen = strlen(needle); |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1072 | g_datalist_init(&attribs); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1073 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1074 | while (*cur && !found) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1075 | if (in_tag) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1076 | if (in_quotes) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1077 | const char *close = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1078 | |
| 7078 | 1079 | while (*close && *close != *in_quotes) |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1080 | close++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1081 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1082 | /* if we got the close quote, store the value and carry on from * |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1083 | * after it. if we ran to the end of the string, point to the NULL * |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1084 | * and we're outta here */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1085 | if (*close) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1086 | /* only store a value if we have an attribute name */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1087 | if (name) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1088 | size_t len = close - cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1089 | char *val = g_strndup(cur, len); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1090 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1091 | g_datalist_set_data_full(&attribs, name, val, g_free); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1092 | g_free(name); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1093 | name = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1094 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1095 | |
| 7078 | 1096 | in_quotes = NULL; |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1097 | cur = close + 1; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1098 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1099 | cur = close; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1100 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1101 | } else if (in_attr) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1102 | const char *close = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1103 | |
| 7078 | 1104 | while (*close && *close != '>' && *close != '"' && |
| 1105 | *close != '\'' && *close != ' ' && *close != '=') | |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1106 | close++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1107 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1108 | /* if we got the equals, store the name of the attribute. if we got |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1109 | * the quote, save the attribute and go straight to quote mode. |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1110 | * otherwise the tag closed or we reached the end of the string, |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1111 | * so we can get outta here */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1112 | switch (*close) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1113 | case '"': |
| 7078 | 1114 | case '\'': |
| 1115 | in_quotes = close; | |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1116 | case '=': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1117 | { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1118 | size_t len = close - cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1119 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1120 | /* don't store a blank attribute name */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1121 | if (len) { |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
1122 | g_free(name); |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1123 | name = g_ascii_strdown(cur, len); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1124 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1125 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1126 | in_attr = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1127 | cur = close + 1; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1128 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1129 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1130 | case ' ': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1131 | case '>': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1132 | in_attr = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1133 | default: |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1134 | cur = close; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1135 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1136 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1137 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1138 | switch (*cur) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1139 | case ' ': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1140 | /* swallow extra spaces inside tag */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1141 | while (*cur && *cur == ' ') cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1142 | in_attr = TRUE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1143 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1144 | case '>': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1145 | found = TRUE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1146 | *end = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1147 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1148 | case '"': |
| 7078 | 1149 | case '\'': |
| 1150 | in_quotes = cur; | |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1151 | default: |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1152 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1153 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1154 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1155 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1156 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1157 | /* if we hit a < followed by the name of our tag... */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1158 | if (*cur == '<' && !g_ascii_strncasecmp(cur + 1, needle, needlelen)) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1159 | *start = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1160 | cur = cur + needlelen + 1; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1161 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1162 | /* if we're pointing at a space or a >, we found the right tag. if * |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1163 | * we're not, we've found a longer tag, so we need to skip to the * |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1164 | * >, but not being distracted by >s inside quotes. */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1165 | if (*cur == ' ' || *cur == '>') { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1166 | in_tag = TRUE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1167 | } else { |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1168 | while (*cur && *cur != '"' && *cur != '\'' && *cur != '>') { |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1169 | if (*cur == '"') { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1170 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1171 | while (*cur && *cur != '"') |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1172 | cur++; |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1173 | } else if (*cur == '\'') { |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1174 | cur++; |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1175 | while (*cur && *cur != '\'') |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1176 | cur++; |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1177 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1178 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1179 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1180 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1181 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1182 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1183 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1184 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1185 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1186 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1187 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1188 | /* clean up any attribute name from a premature termination */ |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
1189 | g_free(name); |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1190 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1191 | if (found) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1192 | *attributes = attribs; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1193 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1194 | *start = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1195 | *end = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1196 | *attributes = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1197 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1198 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1199 | return found; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1200 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1201 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1202 | gboolean |
| 15884 | 1203 | purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info, |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1204 | const char *start_token, int skip, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1205 | const char *end_token, char check_value, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1206 | const char *no_value_token, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1207 | const char *display_name, gboolean is_link, |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1208 | const char *link_prefix, |
| 15884 | 1209 | PurpleInfoFieldFormatCallback format_cb) |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1210 | { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1211 | const char *p, *q; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1212 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1213 | g_return_val_if_fail(str != NULL, FALSE); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1214 | g_return_val_if_fail(user_info != NULL, FALSE); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1215 | g_return_val_if_fail(start_token != NULL, FALSE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1216 | g_return_val_if_fail(end_token != NULL, FALSE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1217 | g_return_val_if_fail(display_name != NULL, FALSE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1218 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1219 | p = strstr(str, start_token); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1220 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1221 | if (p == NULL) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1222 | return FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1223 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1224 | p += strlen(start_token) + skip; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1225 | |
| 7675 | 1226 | if (p >= str + len) |
| 1227 | return FALSE; | |
| 1228 | ||
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1229 | if (check_value != '\0' && *p == check_value) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1230 | return FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1231 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1232 | q = strstr(p, end_token); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1233 | |
| 9161 | 1234 | /* Trim leading blanks */ |
| 1235 | while (*p != '\n' && g_ascii_isspace(*p)) { | |
| 1236 | p += 1; | |
| 1237 | } | |
| 1238 | ||
| 1239 | /* Trim trailing blanks */ | |
| 1240 | while (q > p && g_ascii_isspace(*(q - 1))) { | |
| 1241 | q -= 1; | |
| 1242 | } | |
| 1243 | ||
| 1244 | /* Don't bother with null strings */ | |
| 1245 | if (p == q) | |
| 1246 | return FALSE; | |
| 1247 | ||
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1248 | if (q != NULL && (!no_value_token || |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1249 | (no_value_token && strncmp(p, no_value_token, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1250 | strlen(no_value_token))))) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1251 | { |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1252 | GString *dest = g_string_new(""); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1253 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1254 | if (is_link) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1255 | { |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1256 | g_string_append(dest, "<a href=\""); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1257 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1258 | if (link_prefix) |
| 7675 | 1259 | g_string_append(dest, link_prefix); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1260 | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1261 | if (format_cb != NULL) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1262 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1263 | char *reformatted = format_cb(p, q - p); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1264 | g_string_append(dest, reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1265 | g_free(reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1266 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1267 | else |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1268 | g_string_append_len(dest, p, q - p); |
| 7675 | 1269 | g_string_append(dest, "\">"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1270 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1271 | if (link_prefix) |
| 7675 | 1272 | g_string_append(dest, link_prefix); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1273 | |
| 7675 | 1274 | g_string_append_len(dest, p, q - p); |
| 1275 | g_string_append(dest, "</a>"); | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1276 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1277 | else |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1278 | { |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1279 | if (format_cb != NULL) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1280 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1281 | char *reformatted = format_cb(p, q - p); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1282 | g_string_append(dest, reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1283 | g_free(reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1284 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1285 | else |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1286 | g_string_append_len(dest, p, q - p); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1287 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1288 | |
| 15884 | 1289 | purple_notify_user_info_add_pair(user_info, display_name, dest->str); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1290 | g_string_free(dest, TRUE); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1291 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1292 | return TRUE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1293 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1294 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1295 | return FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1296 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1297 | |
| 15884 | 1298 | struct purple_parse_tag { |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1299 | char *src_tag; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1300 | char *dest_tag; |
| 8064 | 1301 | gboolean ignore; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1302 | }; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1303 | |
|
27892
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1304 | /* NOTE: Do not put `do {} while(0)` around this macro (as this is the method |
|
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1305 | recommended in the GCC docs). It contains 'continue's that should |
|
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1306 | affect the while-loop in purple_markup_html_to_xhtml and doing the |
|
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1307 | above would break that. |
|
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1308 | Also, remember to put braces in constructs that require them for |
|
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1309 | multiple statements when using this macro. */ |
|
27882
ef88f5abc345
disapproval of revision '7cd763960c563ad3654e5a9b74fb60bc73aae90d'
Mark Doliner <markdoliner@pidgin.im>
parents:
27881
diff
changeset
|
1310 | #define ALLOW_TAG_ALT(x, y) if(!g_ascii_strncasecmp(c, "<" x " ", strlen("<" x " "))) { \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1311 | const char *o = c + strlen("<" x); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1312 | const char *p = NULL, *q = NULL, *r = NULL; \ |
|
30268
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1313 | /* o = iterating over full tag \ |
|
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1314 | * p = > (end of tag) \ |
|
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1315 | * q = start of quoted bit \ |
|
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1316 | * r = < inside tag \ |
|
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1317 | */ \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1318 | GString *innards = g_string_new(""); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1319 | while(o && *o) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1320 | if(!q && (*o == '\"' || *o == '\'') ) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1321 | q = o; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1322 | } else if(q) { \ |
|
30268
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1323 | if(*o == *q) { /* end of quoted bit */ \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1324 | char *unescaped = g_strndup(q+1, o-q-1); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1325 | char *escaped = g_markup_escape_text(unescaped, -1); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1326 | g_string_append_printf(innards, "%c%s%c", *q, escaped, *q); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1327 | g_free(unescaped); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1328 | g_free(escaped); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1329 | q = NULL; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1330 | } else if(*c == '\\') { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1331 | o++; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1332 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1333 | } else if(*o == '<') { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1334 | r = o; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1335 | } else if(*o == '>') { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1336 | p = o; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1337 | break; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1338 | } else { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1339 | innards = g_string_append_c(innards, *o); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1340 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1341 | o++; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1342 | } \ |
|
30268
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1343 | if(p && !r) { /* got an end of tag and no other < earlier */\ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1344 | if(*(p-1) != '/') { \ |
| 15884 | 1345 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1346 | pt->src_tag = x; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1347 | pt->dest_tag = y; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1348 | tags = g_list_prepend(tags, pt); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1349 | } \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1350 | if(xhtml) { \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1351 | xhtml = g_string_append(xhtml, "<" y); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1352 | xhtml = g_string_append(xhtml, innards->str); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1353 | xhtml = g_string_append_c(xhtml, '>'); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1354 | } \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1355 | c = p + 1; \ |
|
30268
f2c6c7b4c7d0
Add some comments that meant something to me at some point and might
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30143
diff
changeset
|
1356 | } else { /* got end of tag with earlier < *or* didn't get anything */ \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1357 | if(xhtml) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1358 | xhtml = g_string_append(xhtml, "<"); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1359 | if(plain) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1360 | plain = g_string_append_c(plain, '<'); \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1361 | c++; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1362 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1363 | g_string_free(innards, TRUE); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1364 | continue; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1365 | } \ |
|
27880
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1366 | if(!g_ascii_strncasecmp(c, "<" x, strlen("<" x)) && \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1367 | (*(c+strlen("<" x)) == '>' || \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1368 | !g_ascii_strncasecmp(c+strlen("<" x), "/>", 2))) { \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1369 | if(xhtml) \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1370 | xhtml = g_string_append(xhtml, "<" y); \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1371 | c += strlen("<" x); \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1372 | if(*c != '/') { \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1373 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1374 | pt->src_tag = x; \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1375 | pt->dest_tag = y; \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1376 | tags = g_list_prepend(tags, pt); \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1377 | if(xhtml) \ |
|
27880
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1378 | xhtml = g_string_append_c(xhtml, '>'); \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1379 | } else { \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1380 | if(xhtml) \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1381 | xhtml = g_string_append(xhtml, "/>");\ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1382 | } \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1383 | c = strchr(c, '>') + 1; \ |
|
16fe15b82347
Correct the indentation of this macro by removing one level of indentation
Mark Doliner <markdoliner@pidgin.im>
parents:
27831
diff
changeset
|
1384 | continue; \ |
|
27896
480578cc87d3
567c0647 introduced an extra backslash at the end of ALLOW_TAG_ALT
Ka-Hing Cheung <khc@pidgin.im>
parents:
27895
diff
changeset
|
1385 | } |
|
27892
f2a4844fc72f
Make a note about these ALLOW_TAG* macros so people don't do stuff like
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
27882
diff
changeset
|
1386 | /* Don't forget to check the note above for ALLOW_TAG_ALT. */ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1387 | #define ALLOW_TAG(x) ALLOW_TAG_ALT(x, x) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1388 | void |
| 15884 | 1389 | purple_markup_html_to_xhtml(const char *html, char **xhtml_out, |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1390 | char **plain_out) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1391 | { |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1392 | GString *xhtml = NULL; |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1393 | GString *plain = NULL; |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1394 | GString *url = NULL; |
|
19327
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1395 | GString *cdata = NULL; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1396 | GList *tags = NULL, *tag; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1397 | const char *c = html; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1398 | char quote = '\0'; |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1399 | |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1400 | #define CHECK_QUOTE(ptr) if (*(ptr) == '\'' || *(ptr) == '\"') \ |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1401 | quote = *(ptr++); \ |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1402 | else \ |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1403 | quote = '\0'; |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1404 | |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1405 | #define VALID_CHAR(ptr) (*(ptr) && *(ptr) != quote && (quote || (*(ptr) != ' ' && *(ptr) != '>'))) |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1406 | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1407 | g_return_if_fail(xhtml_out != NULL || plain_out != NULL); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1408 | |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1409 | if(xhtml_out) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1410 | xhtml = g_string_new(""); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1411 | if(plain_out) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1412 | plain = g_string_new(""); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1413 | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1414 | while(c && *c) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1415 | if(*c == '<') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1416 | if(*(c+1) == '/') { /* closing tag */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1417 | tag = tags; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1418 | while(tag) { |
| 15884 | 1419 | struct purple_parse_tag *pt = tag->data; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1420 | if(!g_ascii_strncasecmp((c+2), pt->src_tag, strlen(pt->src_tag)) && *(c+strlen(pt->src_tag)+2) == '>') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1421 | c += strlen(pt->src_tag) + 3; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1422 | break; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1423 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1424 | tag = tag->next; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1425 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1426 | if(tag) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1427 | while(tags) { |
| 15884 | 1428 | struct purple_parse_tag *pt = tags->data; |
|
29227
3e9734bf4422
Fix a corner case where purple_markup_html_to_xhtml generated malformed XHTML.
Paul Aurich <darkrain42@pidgin.im>
parents:
28577
diff
changeset
|
1429 | if(xhtml && !pt->ignore) |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1430 | g_string_append_printf(xhtml, "</%s>", pt->dest_tag); |
|
25859
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
1431 | if(plain && purple_strequal(pt->src_tag, "a")) { |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1432 | /* if this is a link, we have to add the url to the plaintext, too */ |
|
21451
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1433 | if (cdata && url && |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1434 | (!g_string_equal(cdata, url) && (g_ascii_strncasecmp(url->str, "mailto:", 7) != 0 || |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1435 | g_utf8_collate(url->str + 7, cdata->str) != 0))) |
|
19327
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1436 | g_string_append_printf(plain, " <%s>", g_strstrip(url->str)); |
|
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1437 | if (cdata) { |
|
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1438 | g_string_free(cdata, TRUE); |
|
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1439 | cdata = NULL; |
|
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1440 | } |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
19327
diff
changeset
|
1441 | |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1442 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1443 | if(tags == tag) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1444 | break; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1445 | tags = g_list_remove(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1446 | g_free(pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1447 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1448 | g_free(tag->data); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1449 | tags = g_list_remove(tags, tag->data); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1450 | } else { |
| 8534 | 1451 | /* a closing tag we weren't expecting... |
| 1452 | * we'll let it slide, if it's really a tag...if it's | |
| 1453 | * just a </ we'll escape it properly */ | |
| 1454 | const char *end = c+2; | |
| 1455 | while(*end && g_ascii_isalpha(*end)) | |
| 1456 | end++; | |
| 1457 | if(*end == '>') { | |
| 1458 | c = end+1; | |
| 1459 | } else { | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1460 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1461 | xhtml = g_string_append(xhtml, "<"); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1462 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1463 | plain = g_string_append_c(plain, '<'); |
| 8534 | 1464 | c++; |
| 1465 | } | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1466 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1467 | } else { /* opening tag */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1468 | ALLOW_TAG("blockquote"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1469 | ALLOW_TAG("cite"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1470 | ALLOW_TAG("div"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1471 | ALLOW_TAG("em"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1472 | ALLOW_TAG("h1"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1473 | ALLOW_TAG("h2"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1474 | ALLOW_TAG("h3"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1475 | ALLOW_TAG("h4"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1476 | ALLOW_TAG("h5"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1477 | ALLOW_TAG("h6"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1478 | /* we only allow html to start the message */ |
|
27882
ef88f5abc345
disapproval of revision '7cd763960c563ad3654e5a9b74fb60bc73aae90d'
Mark Doliner <markdoliner@pidgin.im>
parents:
27881
diff
changeset
|
1479 | if(c == html) { |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1480 | ALLOW_TAG("html"); |
|
27882
ef88f5abc345
disapproval of revision '7cd763960c563ad3654e5a9b74fb60bc73aae90d'
Mark Doliner <markdoliner@pidgin.im>
parents:
27881
diff
changeset
|
1481 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1482 | ALLOW_TAG_ALT("i", "em"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1483 | ALLOW_TAG_ALT("italic", "em"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1484 | ALLOW_TAG("li"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1485 | ALLOW_TAG("ol"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1486 | ALLOW_TAG("p"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1487 | ALLOW_TAG("pre"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1488 | ALLOW_TAG("q"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1489 | ALLOW_TAG("span"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1490 | ALLOW_TAG("ul"); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1491 | |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
19327
diff
changeset
|
1492 | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1493 | /* we skip <HR> because it's not legal in XHTML-IM. However, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1494 | * we still want to send something sensible, so we put a |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1495 | * linebreak in its place. <BR> also needs special handling |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1496 | * because putting a </BR> to close it would just be dumb. */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1497 | if((!g_ascii_strncasecmp(c, "<br", 3) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1498 | || !g_ascii_strncasecmp(c, "<hr", 3)) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1499 | && (*(c+3) == '>' || |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1500 | !g_ascii_strncasecmp(c+3, "/>", 2) || |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1501 | !g_ascii_strncasecmp(c+3, " />", 3))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1502 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1503 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1504 | xhtml = g_string_append(xhtml, "<br/>"); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1505 | if(plain && *c != '\n') |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1506 | plain = g_string_append_c(plain, '\n'); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1507 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1508 | } |
|
22313
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1509 | if(!g_ascii_strncasecmp(c, "<b>", 3) || !g_ascii_strncasecmp(c, "<bold>", strlen("<bold>")) || !g_ascii_strncasecmp(c, "<strong>", strlen("<strong>"))) { |
| 15884 | 1510 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
|
22313
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1511 | if (*(c+2) == '>') |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1512 | pt->src_tag = "b"; |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1513 | else if (*(c+2) == 'o') |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1514 | pt->src_tag = "bold"; |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1515 | else |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1516 | pt->src_tag = "strong"; |
| 14395 | 1517 | pt->dest_tag = "span"; |
| 1518 | tags = g_list_prepend(tags, pt); | |
| 1519 | c = strchr(c, '>') + 1; | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1520 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1521 | xhtml = g_string_append(xhtml, "<span style='font-weight: bold;'>"); |
| 14395 | 1522 | continue; |
| 1523 | } | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1524 | if(!g_ascii_strncasecmp(c, "<u>", 3) || !g_ascii_strncasecmp(c, "<underline>", strlen("<underline>"))) { |
| 15884 | 1525 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1526 | pt->src_tag = *(c+2) == '>' ? "u" : "underline"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1527 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1528 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1529 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1530 | if (xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1531 | xhtml = g_string_append(xhtml, "<span style='text-decoration: underline;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1532 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1533 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1534 | if(!g_ascii_strncasecmp(c, "<s>", 3) || !g_ascii_strncasecmp(c, "<strike>", strlen("<strike>"))) { |
| 15884 | 1535 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1536 | pt->src_tag = *(c+2) == '>' ? "s" : "strike"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1537 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1538 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1539 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1540 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1541 | xhtml = g_string_append(xhtml, "<span style='text-decoration: line-through;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1542 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1543 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1544 | if(!g_ascii_strncasecmp(c, "<sub>", 5)) { |
| 15884 | 1545 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1546 | pt->src_tag = "sub"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1547 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1548 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1549 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1550 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1551 | xhtml = g_string_append(xhtml, "<span style='vertical-align:sub;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1552 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1553 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1554 | if(!g_ascii_strncasecmp(c, "<sup>", 5)) { |
| 15884 | 1555 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1556 | pt->src_tag = "sup"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1557 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1558 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1559 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1560 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1561 | xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1562 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1563 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1564 | if (!g_ascii_strncasecmp(c, "<img", 4) && (*(c+4) == '>' || *(c+4) == ' ')) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1565 | const char *p = c + 4; |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1566 | GString *src = NULL, *alt = NULL; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1567 | while (*p && *p != '>') { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1568 | if (!g_ascii_strncasecmp(p, "src=", 4)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1569 | const char *q = p + 4; |
|
23028
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
1570 | if (src) |
|
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
1571 | g_string_free(src, TRUE); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1572 | src = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1573 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1574 | while (VALID_CHAR(q)) { |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1575 | src = g_string_append_c(src, *q); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1576 | q++; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1577 | } |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1578 | p = q; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1579 | } else if (!g_ascii_strncasecmp(p, "alt=", 4)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1580 | const char *q = p + 4; |
|
23028
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
1581 | if (alt) |
|
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
1582 | g_string_free(alt, TRUE); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1583 | alt = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1584 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1585 | while (VALID_CHAR(q)) { |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1586 | alt = g_string_append_c(alt, *q); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1587 | q++; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1588 | } |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1589 | p = q; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1590 | } else { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1591 | p++; |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1592 | } |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1593 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1594 | if ((c = strchr(p, '>')) != NULL) |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1595 | c++; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1596 | else |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1597 | c = p; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1598 | /* src and alt are required! */ |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1599 | if(src && xhtml) |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1600 | g_string_append_printf(xhtml, "<img src='%s' alt='%s' />", g_strstrip(src->str), alt ? alt->str : ""); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1601 | if(alt) { |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1602 | if(plain) |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1603 | plain = g_string_append(plain, alt->str); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1604 | if(!src && xhtml) |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1605 | xhtml = g_string_append(xhtml, alt->str); |
|
21045
3357c6b91a7a
Only free the GString "alt" if it's non-null. This was causing an
Mark Doliner <markdoliner@pidgin.im>
parents:
21037
diff
changeset
|
1606 | g_string_free(alt, TRUE); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1607 | } |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1608 | g_string_free(src, TRUE); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1609 | continue; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1610 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1611 | if (!g_ascii_strncasecmp(c, "<a", 2) && (*(c+2) == '>' || *(c+2) == ' ')) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1612 | const char *p = c + 2; |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1613 | struct purple_parse_tag *pt; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1614 | while (*p && *p != '>') { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1615 | if (!g_ascii_strncasecmp(p, "href=", 5)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1616 | const char *q = p + 5; |
|
20656
9a092747dcea
Fix some incorrect assertions when G_DEBUG=fatal_warnings is set.
Daniel Atallah <datallah@pidgin.im>
parents:
20611
diff
changeset
|
1617 | if (url) |
|
9a092747dcea
Fix some incorrect assertions when G_DEBUG=fatal_warnings is set.
Daniel Atallah <datallah@pidgin.im>
parents:
20611
diff
changeset
|
1618 | g_string_free(url, TRUE); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1619 | url = g_string_new(""); |
|
23028
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
1620 | if (cdata) |
|
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
1621 | g_string_free(cdata, TRUE); |
|
19327
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1622 | cdata = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1623 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1624 | while (VALID_CHAR(q)) { |
|
21468
4a0917337f8f
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21453
diff
changeset
|
1625 | int len; |
|
4a0917337f8f
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21453
diff
changeset
|
1626 | if ((*q == '&') && (purple_markup_unescape_entity(q, &len) == NULL)) |
|
4a0917337f8f
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21453
diff
changeset
|
1627 | url = g_string_append(url, "&"); |
|
4a0917337f8f
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21453
diff
changeset
|
1628 | else |
|
4a0917337f8f
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21453
diff
changeset
|
1629 | url = g_string_append_c(url, *q); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1630 | q++; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1631 | } |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1632 | p = q; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1633 | } else { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1634 | p++; |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1635 | } |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1636 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1637 | if ((c = strchr(p, '>')) != NULL) |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1638 | c++; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1639 | else |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1640 | c = p; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1641 | pt = g_new0(struct purple_parse_tag, 1); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1642 | pt->src_tag = "a"; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1643 | pt->dest_tag = "a"; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1644 | tags = g_list_prepend(tags, pt); |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1645 | if(xhtml) |
|
27121
0f83953c87b8
According to RFC 1738, "'" is a valid character in a URL.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
26996
diff
changeset
|
1646 | g_string_append_printf(xhtml, "<a href=\"%s\">", url ? g_strstrip(url->str) : ""); |
|
18741
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1647 | continue; |
|
3bce9fc8b8e2
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 <am@adiumx.com>
parents:
18551
diff
changeset
|
1648 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1649 | if(!g_ascii_strncasecmp(c, "<font", 5) && (*(c+5) == '>' || *(c+5) == ' ')) { |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1650 | const char *p = c + 5; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1651 | GString *style = g_string_new(""); |
| 15884 | 1652 | struct purple_parse_tag *pt; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1653 | while (*p && *p != '>') { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1654 | if (!g_ascii_strncasecmp(p, "back=", 5)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1655 | const char *q = p + 5; |
| 8064 | 1656 | GString *color = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1657 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1658 | while (VALID_CHAR(q)) { |
| 8064 | 1659 | color = g_string_append_c(color, *q); |
| 1660 | q++; | |
| 1661 | } | |
| 1662 | g_string_append_printf(style, "background: %s; ", color->str); | |
| 1663 | g_string_free(color, TRUE); | |
| 1664 | p = q; | |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1665 | } else if (!g_ascii_strncasecmp(p, "color=", 6)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1666 | const char *q = p + 6; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1667 | GString *color = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1668 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1669 | while (VALID_CHAR(q)) { |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1670 | color = g_string_append_c(color, *q); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1671 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1672 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1673 | g_string_append_printf(style, "color: %s; ", color->str); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1674 | g_string_free(color, TRUE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1675 | p = q; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1676 | } else if (!g_ascii_strncasecmp(p, "face=", 5)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1677 | const char *q = p + 5; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1678 | GString *face = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1679 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1680 | while (VALID_CHAR(q)) { |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1681 | face = g_string_append_c(face, *q); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1682 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1683 | } |
|
13836
43be98fd1be0
[gaim-migrate @ 16283]
Brian Chu <roast@users.sourceforge.net>
parents:
13831
diff
changeset
|
1684 | g_string_append_printf(style, "font-family: %s; ", g_strstrip(face->str)); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1685 | g_string_free(face, TRUE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1686 | p = q; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1687 | } else if (!g_ascii_strncasecmp(p, "size=", 5)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1688 | const char *q = p + 5; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1689 | int sz; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1690 | const char *size = "medium"; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1691 | CHECK_QUOTE(q); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1692 | sz = atoi(q); |
| 8686 | 1693 | switch (sz) |
| 1694 | { | |
| 1695 | case 1: | |
| 1696 | size = "xx-small"; | |
| 1697 | break; | |
| 1698 | case 2: | |
|
25298
550a02fcd02e
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <markdoliner@pidgin.im>
parents:
25276
diff
changeset
|
1699 | size = "small"; |
| 8686 | 1700 | break; |
| 1701 | case 3: | |
|
25298
550a02fcd02e
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <markdoliner@pidgin.im>
parents:
25276
diff
changeset
|
1702 | size = "medium"; |
| 8686 | 1703 | break; |
| 1704 | case 4: | |
|
25298
550a02fcd02e
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <markdoliner@pidgin.im>
parents:
25276
diff
changeset
|
1705 | size = "large"; |
| 8686 | 1706 | break; |
| 1707 | case 5: | |
|
25298
550a02fcd02e
Change the font size mapping table in purple_markup_html_to_xhtml() to
Mark Doliner <markdoliner@pidgin.im>
parents:
25276
diff
changeset
|
1708 | size = "x-large"; |
| 8686 | 1709 | break; |
| 1710 | case 6: | |
| 1711 | case 7: | |
| 1712 | size = "xx-large"; | |
| 1713 | break; | |
| 1714 | default: | |
| 1715 | break; | |
| 1716 | } | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1717 | g_string_append_printf(style, "font-size: %s; ", size); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1718 | p = q; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1719 | } else { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1720 | p++; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1721 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1722 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1723 | if ((c = strchr(p, '>')) != NULL) |
|
10593
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1724 | c++; |
|
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1725 | else |
|
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1726 | c = p; |
| 15884 | 1727 | pt = g_new0(struct purple_parse_tag, 1); |
| 8064 | 1728 | pt->src_tag = "font"; |
| 1729 | pt->dest_tag = "span"; | |
| 1730 | tags = g_list_prepend(tags, pt); | |
|
21104
77fb353b5140
Avoid g_log warnings when there's no xhtml to append to, and remove a
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21091
diff
changeset
|
1731 | if(style->len && xhtml) |
|
18108
cb8669f16994
merge of 'bab0b0bcb66485f4114afcd894f2f45d4b4ef15e'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
diff
changeset
|
1732 | g_string_append_printf(xhtml, "<span style='%s'>", g_strstrip(style->str)); |
| 8064 | 1733 | else |
| 1734 | pt->ignore = TRUE; | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1735 | g_string_free(style, TRUE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1736 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1737 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1738 | if (!g_ascii_strncasecmp(c, "<body ", 6)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1739 | const char *p = c + 6; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1740 | gboolean did_something = FALSE; |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1741 | while (*p && *p != '>') { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1742 | if (!g_ascii_strncasecmp(p, "bgcolor=", 8)) { |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1743 | const char *q = p + 8; |
| 15884 | 1744 | struct purple_parse_tag *pt = g_new0(struct purple_parse_tag, 1); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1745 | GString *color = g_string_new(""); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1746 | CHECK_QUOTE(q); |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1747 | while (VALID_CHAR(q)) { |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1748 | color = g_string_append_c(color, *q); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1749 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1750 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1751 | if (xhtml) |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1752 | g_string_append_printf(xhtml, "<span style='background: %s;'>", g_strstrip(color->str)); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1753 | g_string_free(color, TRUE); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1754 | if ((c = strchr(p, '>')) != NULL) |
|
10623
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1755 | c++; |
|
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1756 | else |
|
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1757 | c = p; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1758 | pt->src_tag = "body"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1759 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1760 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1761 | did_something = TRUE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1762 | break; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1763 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1764 | p++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1765 | } |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1766 | if (did_something) continue; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1767 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1768 | /* this has to come after the special case for bgcolor */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1769 | ALLOW_TAG("body"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1770 | if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1771 | char *p = strstr(c + strlen("<!--"), "-->"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1772 | if(p) { |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1773 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1774 | xhtml = g_string_append(xhtml, "<!--"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1775 | c += strlen("<!--"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1776 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1777 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1778 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1779 | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1780 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1781 | xhtml = g_string_append(xhtml, "<"); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1782 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1783 | plain = g_string_append_c(plain, '<'); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1784 | c++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1785 | } |
| 7287 | 1786 | } else if(*c == '&') { |
| 1787 | char buf[7]; | |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1788 | const char *pln; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1789 | int len; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1790 | |
| 16144 | 1791 | if ((pln = purple_markup_unescape_entity(c, &len)) == NULL) { |
| 7287 | 1792 | len = 1; |
| 1793 | g_snprintf(buf, sizeof(buf), "%c", *c); | |
| 1794 | pln = buf; | |
| 1795 | } | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1796 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1797 | xhtml = g_string_append_len(xhtml, c, len); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1798 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1799 | plain = g_string_append(plain, pln); |
|
21451
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1800 | if(cdata) |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1801 | cdata = g_string_append_len(cdata, c, len); |
| 7287 | 1802 | c += len; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1803 | } else { |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1804 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1805 | xhtml = g_string_append_c(xhtml, *c); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1806 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1807 | plain = g_string_append_c(plain, *c); |
|
19327
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1808 | if(cdata) |
|
9e4780ab2d46
When converting to xhtml, only add URLs in angle brackets if it doesn't match the cdata. Fixes #2445
Sean Egan <seanegan@pidgin.im>
parents:
18871
diff
changeset
|
1809 | cdata = g_string_append_c(cdata, *c); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1810 | c++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1811 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1812 | } |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1813 | if(xhtml) { |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1814 | for (tag = tags; tag ; tag = tag->next) { |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1815 | struct purple_parse_tag *pt = tag->data; |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1816 | if(!pt->ignore) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1817 | g_string_append_printf(xhtml, "</%s>", pt->dest_tag); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1818 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1819 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1820 | g_list_free(tags); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1821 | if(xhtml_out) |
|
17571
b77a5881459f
Remove needless string duplication.
Richard Laager <rlaager@pidgin.im>
parents:
17541
diff
changeset
|
1822 | *xhtml_out = g_string_free(xhtml, FALSE); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1823 | if(plain_out) |
|
17571
b77a5881459f
Remove needless string duplication.
Richard Laager <rlaager@pidgin.im>
parents:
17541
diff
changeset
|
1824 | *plain_out = g_string_free(plain, FALSE); |
|
18813
5be99af1b48b
This was crashing for me when writing a system message when logging
Mark Doliner <markdoliner@pidgin.im>
parents:
18741
diff
changeset
|
1825 | if(url) |
|
5be99af1b48b
This was crashing for me when writing a system message when logging
Mark Doliner <markdoliner@pidgin.im>
parents:
18741
diff
changeset
|
1826 | g_string_free(url, TRUE); |
|
21451
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1827 | if (cdata) |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1828 | g_string_free(cdata, TRUE); |
|
23391
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1829 | #undef CHECK_QUOTE |
|
9ca4969ba07e
Modified patch from Dylan Simon (dylex) to improve
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23289
diff
changeset
|
1830 | #undef VALID_CHAR |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1831 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1832 | |
| 9161 | 1833 | /* The following are probably reasonable changes: |
| 1834 | * - \n should be converted to a normal space | |
| 1835 | * - in addition to <br>, <p> and <div> etc. should also be converted into \n | |
| 9241 | 1836 | * - We want to turn </td>#whitespace<td> sequences into a single tab |
| 1837 | * - We want to turn <td> into a single tab (for msn profile "parsing") | |
| 9161 | 1838 | * - We want to turn </tr>#whitespace<tr> sequences into a single \n |
| 9241 | 1839 | * - <script>...</script> and <style>...</style> should be completely removed |
| 9161 | 1840 | */ |
| 1841 | ||
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1842 | char * |
| 15884 | 1843 | purple_markup_strip_html(const char *str) |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1844 | { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1845 | int i, j, k, entlen; |
| 7103 | 1846 | gboolean visible = TRUE; |
| 9161 | 1847 | gboolean closing_td_p = FALSE; |
| 7103 | 1848 | gchar *str2; |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1849 | const gchar *cdata_close_tag = NULL, *ent; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1850 | gchar *href = NULL; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1851 | int href_st = 0; |
| 7103 | 1852 | |
| 7110 | 1853 | if(!str) |
| 1854 | return NULL; | |
| 7103 | 1855 | |
| 1856 | str2 = g_strdup(str); | |
| 1857 | ||
| 1858 | for (i = 0, j = 0; str2[i]; i++) | |
| 1859 | { | |
| 1860 | if (str2[i] == '<') | |
| 1861 | { | |
| 9241 | 1862 | if (cdata_close_tag) |
| 9161 | 1863 | { |
| 9241 | 1864 | /* Note: Don't even assume any other tag is a tag in CDATA */ |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1865 | if (g_ascii_strncasecmp(str2 + i, cdata_close_tag, |
| 9241 | 1866 | strlen(cdata_close_tag)) == 0) |
| 1867 | { | |
| 1868 | i += strlen(cdata_close_tag) - 1; | |
| 1869 | cdata_close_tag = NULL; | |
| 1870 | } | |
| 1871 | continue; | |
| 1872 | } | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1873 | else if (g_ascii_strncasecmp(str2 + i, "<td", 3) == 0 && closing_td_p) |
| 9241 | 1874 | { |
| 1875 | str2[j++] = '\t'; | |
| 9161 | 1876 | visible = TRUE; |
| 1877 | } | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1878 | else if (g_ascii_strncasecmp(str2 + i, "</td>", 5) == 0) |
| 8517 | 1879 | { |
| 9161 | 1880 | closing_td_p = TRUE; |
| 1881 | visible = FALSE; | |
| 1882 | } | |
| 1883 | else | |
| 1884 | { | |
| 1885 | closing_td_p = FALSE; | |
| 1886 | visible = TRUE; | |
| 8517 | 1887 | } |
| 1888 | ||
| 7103 | 1889 | k = i + 1; |
| 1890 | ||
| 1891 | if(g_ascii_isspace(str2[k])) | |
| 1892 | visible = TRUE; | |
| 9170 | 1893 | else if (str2[k]) |
| 7103 | 1894 | { |
| 9161 | 1895 | /* Scan until we end the tag either implicitly (closed start |
| 1896 | * tag) or explicitly, using a sloppy method (i.e., < or > | |
| 1897 | * inside quoted attributes will screw us up) | |
| 1898 | */ | |
| 1899 | while (str2[k] && str2[k] != '<' && str2[k] != '>') | |
| 7103 | 1900 | { |
| 1901 | k++; | |
| 1902 | } | |
| 9241 | 1903 | |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1904 | /* If we've got an <a> tag with an href, save the address |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1905 | * to print later. */ |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1906 | if (g_ascii_strncasecmp(str2 + i, "<a", 2) == 0 && |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1907 | g_ascii_isspace(str2[i+2])) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1908 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1909 | int st; /* start of href, inclusive [ */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1910 | int end; /* end of href, exclusive ) */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1911 | char delim = ' '; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1912 | /* Find start of href */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1913 | for (st = i + 3; st < k; st++) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1914 | { |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1915 | if (g_ascii_strncasecmp(str2+st, "href=", 5) == 0) |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1916 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1917 | st += 5; |
|
16230
291f0932fac8
This was causing problems with jabber in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16214
diff
changeset
|
1918 | if (str2[st] == '"' || str2[st] == '\'') |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1919 | { |
|
16230
291f0932fac8
This was causing problems with jabber in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16214
diff
changeset
|
1920 | delim = str2[st]; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1921 | st++; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1922 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1923 | break; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1924 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1925 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1926 | /* find end of address */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1927 | for (end = st; end < k && str2[end] != delim; end++) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1928 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1929 | /* All the work is done in the loop construct above. */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1930 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1931 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1932 | /* If there's an address, save it. If there was |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1933 | * already one saved, kill it. */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1934 | if (st < k) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1935 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1936 | char *tmp; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1937 | g_free(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1938 | tmp = g_strndup(str2 + st, end - st); |
| 15884 | 1939 | href = purple_unescape_html(tmp); |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1940 | g_free(tmp); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1941 | href_st = j; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1942 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1943 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1944 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1945 | /* Replace </a> with an ascii representation of the |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1946 | * address the link was pointing to. */ |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1947 | else if (href != NULL && g_ascii_strncasecmp(str2 + i, "</a>", 4) == 0) |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1948 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1949 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1950 | size_t hrlen = strlen(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1951 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1952 | /* Only insert the href if it's different from the CDATA. */ |
|
12640
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1953 | if ((hrlen != j - href_st || |
|
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1954 | strncmp(str2 + href_st, href, hrlen)) && |
|
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1955 | (hrlen != j - href_st + 7 || /* 7 == strlen("http://") */ |
|
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1956 | strncmp(str2 + href_st, href + 7, hrlen - 7))) |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1957 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1958 | str2[j++] = ' '; |
|
12628
35043a7fb16c
[gaim-migrate @ 14964]
Richard Laager <rlaager@pidgin.im>
parents:
12622
diff
changeset
|
1959 | str2[j++] = '('; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1960 | g_memmove(str2 + j, href, hrlen); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1961 | j += hrlen; |
|
12628
35043a7fb16c
[gaim-migrate @ 14964]
Richard Laager <rlaager@pidgin.im>
parents:
12622
diff
changeset
|
1962 | str2[j++] = ')'; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1963 | g_free(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1964 | href = NULL; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1965 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1966 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1967 | |
|
29924
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1968 | /* Check for tags which should be mapped to newline (but ignore some of |
|
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1969 | * the tags at the beginning of the text) */ |
|
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1970 | else if ((j && (g_ascii_strncasecmp(str2 + i, "<p>", 3) == 0 |
|
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1971 | || g_ascii_strncasecmp(str2 + i, "<tr", 3) == 0 |
|
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1972 | || g_ascii_strncasecmp(str2 + i, "<hr", 3) == 0 |
|
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1973 | || g_ascii_strncasecmp(str2 + i, "<li", 3) == 0 |
|
5ff8eccbdbf4
Ignore some tags at the beginning of a message.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
29697
diff
changeset
|
1974 | || g_ascii_strncasecmp(str2 + i, "<div", 4) == 0)) |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1975 | || g_ascii_strncasecmp(str2 + i, "<br", 3) == 0 |
|
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1976 | || g_ascii_strncasecmp(str2 + i, "</table>", 8) == 0) |
| 9161 | 1977 | { |
| 1978 | str2[j++] = '\n'; | |
| 1979 | } | |
| 9241 | 1980 | /* Check for tags which begin CDATA and need to be closed */ |
| 1981 | #if 0 /* FIXME.. option is end tag optional, we can't handle this right now */ | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1982 | else if (g_ascii_strncasecmp(str2 + i, "<option", 7) == 0) |
| 9241 | 1983 | { |
| 1984 | /* FIXME: We should not do this if the OPTION is SELECT'd */ | |
| 1985 | cdata_close_tag = "</option>"; | |
| 1986 | } | |
| 1987 | #endif | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1988 | else if (g_ascii_strncasecmp(str2 + i, "<script", 7) == 0) |
| 9241 | 1989 | { |
| 1990 | cdata_close_tag = "</script>"; | |
| 1991 | } | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1992 | else if (g_ascii_strncasecmp(str2 + i, "<style", 6) == 0) |
| 9241 | 1993 | { |
| 1994 | cdata_close_tag = "</style>"; | |
| 1995 | } | |
| 9161 | 1996 | /* Update the index and continue checking after the tag */ |
|
10731
8d817cb4268b
[gaim-migrate @ 12333]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10700
diff
changeset
|
1997 | i = (str2[k] == '<' || str2[k] == '\0')? k - 1: k; |
| 9161 | 1998 | continue; |
| 7103 | 1999 | } |
| 2000 | } | |
| 9241 | 2001 | else if (cdata_close_tag) |
| 2002 | { | |
| 2003 | continue; | |
| 2004 | } | |
| 9161 | 2005 | else if (!g_ascii_isspace(str2[i])) |
| 7103 | 2006 | { |
| 2007 | visible = TRUE; | |
| 2008 | } | |
| 2009 | ||
| 16144 | 2010 | if (str2[i] == '&' && (ent = purple_markup_unescape_entity(str2 + i, &entlen)) != NULL) |
| 8517 | 2011 | { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2012 | while (*ent) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2013 | str2[j++] = *ent++; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2014 | i += entlen - 1; |
| 9273 | 2015 | continue; |
| 2016 | } | |
| 2017 | ||
| 7103 | 2018 | if (visible) |
| 9161 | 2019 | str2[j++] = g_ascii_isspace(str2[i])? ' ': str2[i]; |
| 7103 | 2020 | } |
| 2021 | ||
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
2022 | g_free(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
2023 | |
| 7103 | 2024 | str2[j] = '\0'; |
| 2025 | ||
| 2026 | return str2; | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
2027 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
2028 | |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2029 | static gboolean |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2030 | badchar(char c) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2031 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2032 | switch (c) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2033 | case ' ': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2034 | case ',': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2035 | case '\0': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2036 | case '\n': |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
2037 | case '\r': |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2038 | case '<': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2039 | case '>': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2040 | case '"': |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2041 | return TRUE; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2042 | default: |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2043 | return FALSE; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2044 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2045 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2046 | |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2047 | static gboolean |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2048 | badentity(const char *c) |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2049 | { |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2050 | if (!g_ascii_strncasecmp(c, "<", 4) || |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2051 | !g_ascii_strncasecmp(c, ">", 4) || |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2052 | !g_ascii_strncasecmp(c, """, 6)) { |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2053 | return TRUE; |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2054 | } |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2055 | return FALSE; |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2056 | } |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2057 | |
|
30411
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2058 | static const char * |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2059 | process_link(GString *ret, |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2060 | const char *start, const char *c, |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2061 | int matchlen, |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2062 | const char *urlprefix, |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2063 | int inside_paren) |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2064 | { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2065 | char *url_buf, *tmpurlbuf; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2066 | const char *t; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2067 | |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2068 | for (t = c;; t++) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2069 | if (!badchar(*t) && !badentity(t)) |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2070 | continue; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2071 | |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2072 | if (t - c == matchlen) |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2073 | break; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2074 | |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2075 | if (*t == ',' && *(t + 1) != ' ') { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2076 | continue; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2077 | } |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2078 | |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2079 | if (t > start && *(t - 1) == '.') |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2080 | t--; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2081 | if (t > start && *(t - 1) == ')' && inside_paren > 0) |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2082 | t--; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2083 | |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2084 | url_buf = g_strndup(c, t - c); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2085 | tmpurlbuf = purple_unescape_html(url_buf); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2086 | g_string_append_printf(ret, "<A HREF=\"%s%s\">%s</A>", |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2087 | urlprefix, |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2088 | tmpurlbuf, url_buf); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2089 | g_free(tmpurlbuf); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2090 | g_free(url_buf); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2091 | return t; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2092 | } |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2093 | |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2094 | return c; |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2095 | } |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2096 | |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2097 | char * |
| 15884 | 2098 | purple_markup_linkify(const char *text) |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2099 | { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2100 | const char *c, *t, *q = NULL; |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
2101 | char *tmpurlbuf, *url_buf; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2102 | gunichar g; |
| 8538 | 2103 | gboolean inside_html = FALSE; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2104 | int inside_paren = 0; |
|
23979
936d7ef5cece
Add NULL checking to purple_markup_linkify().
Daniel Atallah <datallah@pidgin.im>
parents:
23850
diff
changeset
|
2105 | GString *ret; |
|
936d7ef5cece
Add NULL checking to purple_markup_linkify().
Daniel Atallah <datallah@pidgin.im>
parents:
23850
diff
changeset
|
2106 | |
|
936d7ef5cece
Add NULL checking to purple_markup_linkify().
Daniel Atallah <datallah@pidgin.im>
parents:
23850
diff
changeset
|
2107 | if (text == NULL) |
|
936d7ef5cece
Add NULL checking to purple_markup_linkify().
Daniel Atallah <datallah@pidgin.im>
parents:
23850
diff
changeset
|
2108 | return NULL; |
|
936d7ef5cece
Add NULL checking to purple_markup_linkify().
Daniel Atallah <datallah@pidgin.im>
parents:
23850
diff
changeset
|
2109 | |
|
936d7ef5cece
Add NULL checking to purple_markup_linkify().
Daniel Atallah <datallah@pidgin.im>
parents:
23850
diff
changeset
|
2110 | ret = g_string_new(""); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2111 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2112 | c = text; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2113 | while (*c) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2114 | |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2115 | if(*c == '(' && !inside_html) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2116 | inside_paren++; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2117 | ret = g_string_append_c(ret, *c); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2118 | c++; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2119 | } |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2120 | |
| 8538 | 2121 | if(inside_html) { |
| 2122 | if(*c == '>') { | |
| 2123 | inside_html = FALSE; | |
| 2124 | } else if(!q && (*c == '\"' || *c == '\'')) { | |
| 2125 | q = c; | |
| 2126 | } else if(q) { | |
| 2127 | if(*c == *q) | |
| 2128 | q = NULL; | |
| 2129 | } | |
| 2130 | } else if(*c == '<') { | |
| 2131 | inside_html = TRUE; | |
| 9077 | 2132 | if (!g_ascii_strncasecmp(c, "<A", 2)) { |
| 2133 | while (1) { | |
| 2134 | if (!g_ascii_strncasecmp(c, "/A>", 3)) { | |
| 2135 | inside_html = FALSE; | |
| 2136 | break; | |
| 2137 | } | |
| 2138 | ret = g_string_append_c(ret, *c); | |
| 2139 | c++; | |
| 2140 | if (!(*c)) | |
| 2141 | break; | |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2142 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2143 | } |
|
30411
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2144 | } else if (!g_ascii_strncasecmp(c, "http://", 7)) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2145 | c = process_link(ret, text, c, 7, "", inside_paren); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2146 | } else if (!g_ascii_strncasecmp(c, "https://", 8)) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2147 | c = process_link(ret, text, c, 8, "", inside_paren); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2148 | } else if (!g_ascii_strncasecmp(c, "ftp://", 6)) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2149 | c = process_link(ret, text, c, 6, "", inside_paren); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2150 | } else if (!g_ascii_strncasecmp(c, "sftp://", 7)) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2151 | c = process_link(ret, text, c, 7, "", inside_paren); |
|
30412
b5992fc34f0f
Linkify file://
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30411
diff
changeset
|
2152 | } else if (!g_ascii_strncasecmp(c, "file://", 7)) { |
|
b5992fc34f0f
Linkify file://
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30411
diff
changeset
|
2153 | c = process_link(ret, text, c, 7, "", inside_paren); |
|
30411
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2154 | } else if (!g_ascii_strncasecmp(c, "www.", 4) && c[4] != '.' && (c == text || badchar(c[-1]) || badentity(c-1))) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2155 | c = process_link(ret, text, c, 4, "http://", inside_paren); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2156 | } else if (!g_ascii_strncasecmp(c, "ftp.", 4) && c[4] != '.' && (c == text || badchar(c[-1]) || badentity(c-1))) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2157 | c = process_link(ret, text, c, 4, "ftp://", inside_paren); |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2158 | } else if (!g_ascii_strncasecmp(c, "xmpp:", 5) && (c == text || badchar(c[-1]) || badentity(c-1))) { |
|
f4a0d77a5504
Remove code duplications, and some invalid memory reads.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30268
diff
changeset
|
2159 | c = process_link(ret, text, c, 5, "", inside_paren); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2160 | } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2161 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2162 | while (1) { |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2163 | if (badchar(*t) || badentity(t)) { |
| 17254 | 2164 | char *d; |
| 2165 | if (t - c == 7) { | |
| 2166 | break; | |
| 2167 | } | |
|
30413
01ee7dd615b7
Prevent an invalid read when a message starts with 'mailto:'.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30412
diff
changeset
|
2168 | if (t > text && *(t - 1) == '.') |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2169 | t--; |
| 17254 | 2170 | if ((d = strstr(c + 7, "?")) != NULL && d < t) |
| 2171 | url_buf = g_strndup(c + 7, d - c - 7); | |
| 2172 | else | |
| 2173 | url_buf = g_strndup(c + 7, t - c - 7); | |
| 2174 | if (!purple_email_is_valid(url_buf)) { | |
| 2175 | g_free(url_buf); | |
| 2176 | break; | |
| 2177 | } | |
| 2178 | g_free(url_buf); | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2179 | url_buf = g_strndup(c, t - c); |
| 15884 | 2180 | tmpurlbuf = purple_unescape_html(url_buf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2181 | g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 8918 | 2182 | tmpurlbuf, url_buf); |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2183 | g_free(url_buf); |
| 8918 | 2184 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2185 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2186 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2187 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2188 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2189 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2190 | } else if (c != text && (*c == '@')) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2191 | int flag; |
|
10905
56943fe311c2
[gaim-migrate @ 12634]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10902
diff
changeset
|
2192 | GString *gurl_buf = NULL; |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2193 | const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2194 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2195 | if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2196 | flag = 0; |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2197 | else { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2198 | flag = 1; |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2199 | gurl_buf = g_string_new(""); |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2200 | } |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2201 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2202 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2203 | while (flag) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2204 | /* iterate backwards grabbing the local part of an email address */ |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2205 | g = g_utf8_get_char(t); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2206 | if (badchar(*t) || (g >= 127) || (*t == '(') || |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11153
diff
changeset
|
2207 | ((*t == ';') && ((t > (text+2) && (!g_ascii_strncasecmp(t - 3, "<", 4) || |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11153
diff
changeset
|
2208 | !g_ascii_strncasecmp(t - 3, ">", 4))) || |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11153
diff
changeset
|
2209 | (t > (text+4) && (!g_ascii_strncasecmp(t - 5, """, 6)))))) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2210 | /* local part will already be part of ret, strip it out */ |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2211 | ret = g_string_truncate(ret, ret->len - (c - t)); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2212 | ret = g_string_append_unichar(ret, g); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2213 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2214 | } else { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2215 | g_string_prepend_unichar(gurl_buf, g); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2216 | t = g_utf8_find_prev_char(text, t); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2217 | if (t < text) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2218 | ret = g_string_assign(ret, ""); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2219 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2220 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2221 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2222 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2223 | |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2224 | t = g_utf8_find_next_char(c, NULL); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2225 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2226 | while (flag) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2227 | /* iterate forwards grabbing the domain part of an email address */ |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2228 | g = g_utf8_get_char(t); |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2229 | if (badchar(*t) || (g >= 127) || (*t == ')') || badentity(t)) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2230 | char *d; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2231 | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2232 | url_buf = g_string_free(gurl_buf, FALSE); |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2233 | |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2234 | /* strip off trailing periods */ |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2235 | if (strlen(url_buf) > 0) { |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2236 | for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2237 | *d = '\0'; |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2238 | } |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2239 | |
| 15884 | 2240 | tmpurlbuf = purple_unescape_html(url_buf); |
| 2241 | if (purple_email_is_valid(tmpurlbuf)) { | |
| 9045 | 2242 | g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", |
| 2243 | tmpurlbuf, url_buf); | |
| 2244 | } else { | |
| 2245 | g_string_append(ret, url_buf); | |
| 2246 | } | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2247 | g_free(url_buf); |
| 8918 | 2248 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2249 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2250 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2251 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2252 | } else { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2253 | g_string_append_unichar(gurl_buf, g); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2254 | t = g_utf8_find_next_char(t, NULL); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2255 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2256 | } |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2257 | } |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2258 | |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2259 | if(*c == ')' && !inside_html) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2260 | inside_paren--; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2261 | ret = g_string_append_c(ret, *c); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2262 | c++; |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2263 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2264 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2265 | if (*c == 0) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2266 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2267 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2268 | ret = g_string_append_c(ret, *c); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2269 | c++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2270 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2271 | } |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
2272 | return g_string_free(ret, FALSE); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2273 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2274 | |
|
29697
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2275 | char *purple_unescape_text(const char *in) |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2276 | { |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2277 | GString *ret; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2278 | const char *c = in; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2279 | |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2280 | if (in == NULL) |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2281 | return NULL; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2282 | |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2283 | ret = g_string_new(""); |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2284 | while (*c) { |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2285 | int len; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2286 | const char *ent; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2287 | |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2288 | if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2289 | g_string_append(ret, ent); |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2290 | c += len; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2291 | } else { |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2292 | g_string_append_c(ret, *c); |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2293 | c++; |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2294 | } |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2295 | } |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2296 | |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2297 | return g_string_free(ret, FALSE); |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2298 | } |
|
dfeaa83ed16e
Combine the three purple_unescape_text()s into one.
Paul Aurich <darkrain42@pidgin.im>
parents:
29686
diff
changeset
|
2299 | |
|
27509
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2300 | char *purple_unescape_html(const char *html) |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2301 | { |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2302 | GString *ret; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2303 | const char *c = html; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2304 | |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2305 | if (html == NULL) |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2306 | return NULL; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2307 | |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2308 | ret = g_string_new(""); |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2309 | while (*c) { |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2310 | int len; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2311 | const char *ent; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2312 | |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2313 | if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2314 | g_string_append(ret, ent); |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2315 | c += len; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2316 | } else if (!strncmp(c, "<br>", 4)) { |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2317 | g_string_append_c(ret, '\n'); |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2318 | c += 4; |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2319 | } else { |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2320 | g_string_append_c(ret, *c); |
|
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2321 | c++; |
| 8442 | 2322 | } |
| 2323 | } | |
|
14101
89a79c2a971e
[gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
2324 | |
|
27509
fb3aa204bc5a
Formatting changes, no functionality.
Mark Doliner <markdoliner@pidgin.im>
parents:
27479
diff
changeset
|
2325 | return g_string_free(ret, FALSE); |
| 8442 | 2326 | } |
| 2327 | ||
| 9175 | 2328 | char * |
| 15884 | 2329 | purple_markup_slice(const char *str, guint x, guint y) |
| 9175 | 2330 | { |
| 2331 | GString *ret; | |
| 2332 | GQueue *q; | |
| 2333 | guint z = 0; | |
| 2334 | gboolean appended = FALSE; | |
| 2335 | gunichar c; | |
| 2336 | char *tag; | |
| 2337 | ||
| 24641 | 2338 | g_return_val_if_fail(str != NULL, NULL); |
| 9175 | 2339 | g_return_val_if_fail(x <= y, NULL); |
| 2340 | ||
| 2341 | if (x == y) | |
| 2342 | return g_strdup(""); | |
| 2343 | ||
| 2344 | ret = g_string_new(""); | |
| 2345 | q = g_queue_new(); | |
| 2346 | ||
| 2347 | while (*str && (z < y)) { | |
| 2348 | c = g_utf8_get_char(str); | |
| 2349 | ||
| 2350 | if (c == '<') { | |
| 2351 | char *end = strchr(str, '>'); | |
| 2352 | ||
| 2353 | if (!end) { | |
| 2354 | g_string_free(ret, TRUE); | |
| 2355 | while ((tag = g_queue_pop_head(q))) | |
| 2356 | g_free(tag); | |
| 2357 | g_queue_free(q); | |
| 2358 | return NULL; | |
| 2359 | } | |
| 2360 | ||
| 2361 | if (!g_ascii_strncasecmp(str, "<img ", 5)) { | |
| 2362 | z += strlen("[Image]"); | |
| 2363 | } else if (!g_ascii_strncasecmp(str, "<br", 3)) { | |
| 2364 | z += 1; | |
| 2365 | } else if (!g_ascii_strncasecmp(str, "<hr>", 4)) { | |
| 2366 | z += strlen("\n---\n"); | |
| 2367 | } else if (!g_ascii_strncasecmp(str, "</", 2)) { | |
| 2368 | /* pop stack */ | |
| 2369 | char *tmp; | |
| 2370 | ||
| 2371 | tmp = g_queue_pop_head(q); | |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
2372 | g_free(tmp); |
| 9175 | 2373 | /* z += 0; */ |
| 2374 | } else { | |
| 2375 | /* push it unto the stack */ | |
| 2376 | char *tmp; | |
| 2377 | ||
| 2378 | tmp = g_strndup(str, end - str + 1); | |
| 2379 | g_queue_push_head(q, tmp); | |
| 2380 | /* z += 0; */ | |
| 2381 | } | |
| 2382 | ||
| 13644 | 2383 | if (z >= x) { |
| 9175 | 2384 | g_string_append_len(ret, str, end - str + 1); |
| 2385 | } | |
| 2386 | ||
| 2387 | str = end; | |
| 2388 | } else if (c == '&') { | |
| 2389 | char *end = strchr(str, ';'); | |
| 2390 | if (!end) { | |
| 2391 | g_string_free(ret, TRUE); | |
| 2392 | while ((tag = g_queue_pop_head(q))) | |
| 2393 | g_free(tag); | |
| 2394 | g_queue_free(q); | |
| 2395 | ||
| 2396 | return NULL; | |
| 2397 | } | |
| 2398 | ||
| 2399 | if (z >= x) | |
| 2400 | g_string_append_len(ret, str, end - str + 1); | |
| 2401 | ||
| 2402 | z++; | |
| 2403 | str = end; | |
| 2404 | } else { | |
| 13644 | 2405 | if (z == x && z > 0 && !appended) { |
| 2406 | GList *l = q->tail; | |
| 2407 | ||
| 2408 | while (l) { | |
| 2409 | tag = l->data; | |
| 2410 | g_string_append(ret, tag); | |
| 2411 | l = l->prev; | |
| 2412 | } | |
| 2413 | appended = TRUE; | |
| 2414 | } | |
| 2415 | ||
| 9175 | 2416 | if (z >= x) |
| 2417 | g_string_append_unichar(ret, c); | |
| 2418 | z++; | |
| 2419 | } | |
| 2420 | ||
| 2421 | str = g_utf8_next_char(str); | |
| 2422 | } | |
| 2423 | ||
| 2424 | while ((tag = g_queue_pop_head(q))) { | |
| 2425 | char *name; | |
| 2426 | ||
| 15884 | 2427 | name = purple_markup_get_tag_name(tag); |
| 9175 | 2428 | g_string_append_printf(ret, "</%s>", name); |
| 2429 | g_free(name); | |
| 2430 | g_free(tag); | |
| 2431 | } | |
| 2432 | ||
| 2433 | g_queue_free(q); | |
| 2434 | return g_string_free(ret, FALSE); | |
| 2435 | } | |
| 2436 | ||
| 2437 | char * | |
| 15884 | 2438 | purple_markup_get_tag_name(const char *tag) |
| 9175 | 2439 | { |
| 2440 | int i; | |
| 2441 | g_return_val_if_fail(tag != NULL, NULL); | |
| 2442 | g_return_val_if_fail(*tag == '<', NULL); | |
| 2443 | ||
| 2444 | for (i = 1; tag[i]; i++) | |
| 2445 | if (tag[i] == '>' || tag[i] == ' ' || tag[i] == '/') | |
| 2446 | break; | |
| 2447 | ||
| 13644 | 2448 | return g_strndup(tag+1, i-1); |
| 9175 | 2449 | } |
| 2450 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2451 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2452 | * Path/Filename Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2453 | **************************************************************************/ |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2454 | const char * |
| 15884 | 2455 | purple_home_dir(void) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2456 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2457 | #ifndef _WIN32 |
|
11665
6b80cef9b563
[gaim-migrate @ 13950]
Michael Carlson <corfe83@users.sourceforge.net>
parents:
11656
diff
changeset
|
2458 | return g_get_home_dir(); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2459 | #else |
| 15884 | 2460 | return wpurple_data_dir(); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2461 | #endif |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2462 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2463 | |
|
16415
8cbcd9756090
Use ~/.purple only, never ~/.gaim. This is a revert of the functional
Richard Laager <rlaager@pidgin.im>
parents:
16230
diff
changeset
|
2464 | /* Returns the argument passed to -c IFF it was present, or ~/.purple. */ |
|
10332
62ed0121db22
[gaim-migrate @ 11539]
Mark Doliner <markdoliner@pidgin.im>
parents:
10258
diff
changeset
|
2465 | const char * |
| 15884 | 2466 | purple_user_dir(void) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2467 | { |
|
18219
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2468 | if (custom_user_dir != NULL) |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2469 | return custom_user_dir; |
|
20345
7d5a7a92d0f5
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@pidgin.im>
parents:
20330
diff
changeset
|
2470 | else if (!user_dir) |
|
7d5a7a92d0f5
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@pidgin.im>
parents:
20330
diff
changeset
|
2471 | user_dir = g_build_filename(purple_home_dir(), ".purple", NULL); |
|
7d5a7a92d0f5
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@pidgin.im>
parents:
20330
diff
changeset
|
2472 | |
|
7d5a7a92d0f5
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@pidgin.im>
parents:
20330
diff
changeset
|
2473 | return user_dir; |
| 8596 | 2474 | } |
| 2475 | ||
| 15884 | 2476 | void purple_util_set_user_dir(const char *dir) |
| 8596 | 2477 | { |
|
18219
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2478 | g_free(custom_user_dir); |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2479 | |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2480 | if (dir != NULL && *dir) |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2481 | custom_user_dir = g_strdup(dir); |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2482 | else |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2483 | custom_user_dir = NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2484 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2485 | |
| 15884 | 2486 | int purple_build_dir (const char *path, int mode) |
| 7612 | 2487 | { |
| 11361 | 2488 | return g_mkdir_with_parents(path, mode); |
| 7612 | 2489 | } |
| 2490 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2491 | /* |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2492 | * This function is long and beautiful, like my--um, yeah. Anyway, |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2493 | * it includes lots of error checking so as we don't overwrite |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2494 | * people's settings if there is a problem writing the new values. |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2495 | */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2496 | gboolean |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
19327
diff
changeset
|
2497 | purple_util_write_data_to_file(const char *filename, const char *data, gssize size) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2498 | { |
| 15884 | 2499 | const char *user_dir = purple_user_dir(); |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2500 | gchar *filename_full; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2501 | gboolean ret = FALSE; |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2502 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2503 | g_return_val_if_fail(user_dir != NULL, FALSE); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2504 | |
| 15884 | 2505 | purple_debug_info("util", "Writing file %s to directory %s\n", |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2506 | filename, user_dir); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2507 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2508 | /* Ensure the user directory exists */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2509 | if (!g_file_test(user_dir, G_FILE_TEST_IS_DIR)) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2510 | { |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2511 | if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2512 | { |
| 15884 | 2513 | purple_debug_error("util", "Error creating directory %s: %s\n", |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2514 | user_dir, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2515 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2516 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2517 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2518 | |
|
10415
faceb835eb87
[gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents:
10414
diff
changeset
|
2519 | filename_full = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", user_dir, filename); |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2520 | |
|
20931
27b539a198ce
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 <datallah@pidgin.im>
parents:
20747
diff
changeset
|
2521 | ret = purple_util_write_data_to_file_absolute(filename_full, data, size); |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2522 | |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2523 | g_free(filename_full); |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2524 | return ret; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2525 | } |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2526 | |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2527 | gboolean |
|
20931
27b539a198ce
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 <datallah@pidgin.im>
parents:
20747
diff
changeset
|
2528 | purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size) |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2529 | { |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2530 | gchar *filename_temp; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2531 | FILE *file; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2532 | size_t real_size, byteswritten; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2533 | struct stat st; |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2534 | #ifndef HAVE_FILENO |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2535 | int fd; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2536 | #endif |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2537 | |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2538 | purple_debug_info("util", "Writing file %s\n", |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2539 | filename_full); |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2540 | |
|
20992
cac93835d527
nosnilmot points out that this is a better way to ensure the size is valid.
Daniel Atallah <datallah@pidgin.im>
parents:
20991
diff
changeset
|
2541 | g_return_val_if_fail((size >= -1), FALSE); |
|
cac93835d527
nosnilmot points out that this is a better way to ensure the size is valid.
Daniel Atallah <datallah@pidgin.im>
parents:
20991
diff
changeset
|
2542 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2543 | filename_temp = g_strdup_printf("%s.save", filename_full); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2544 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2545 | /* Remove an old temporary file, if one exists */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2546 | if (g_file_test(filename_temp, G_FILE_TEST_EXISTS)) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2547 | { |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2548 | if (g_unlink(filename_temp) == -1) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2549 | { |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2550 | purple_debug_error("util", "Error removing old file " |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2551 | "%s: %s\n", |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2552 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2553 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2554 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2555 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2556 | /* Open file */ |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2557 | file = g_fopen(filename_temp, "wb"); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2558 | if (file == NULL) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2559 | { |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2560 | purple_debug_error("util", "Error opening file %s for " |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2561 | "writing: %s\n", |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2562 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2563 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2564 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2565 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2566 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2567 | /* Write to file */ |
|
20992
cac93835d527
nosnilmot points out that this is a better way to ensure the size is valid.
Daniel Atallah <datallah@pidgin.im>
parents:
20991
diff
changeset
|
2568 | real_size = (size == -1) ? strlen(data) : (size_t) size; |
|
10415
faceb835eb87
[gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents:
10414
diff
changeset
|
2569 | byteswritten = fwrite(data, 1, real_size, file); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2570 | |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2571 | #ifdef HAVE_FILENO |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2572 | /* Apparently XFS (and possibly other filesystems) do not |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2573 | * guarantee that file data is flushed before file metadata, |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2574 | * so this procedure is insufficient without some flushage. */ |
|
21441
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2575 | if (fflush(file) < 0) { |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2576 | purple_debug_error("util", "Error flushing %s: %s\n", |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2577 | filename_temp, g_strerror(errno)); |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2578 | g_free(filename_temp); |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2579 | fclose(file); |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2580 | return FALSE; |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2581 | } |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2582 | if (fsync(fileno(file)) < 0) { |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2583 | purple_debug_error("util", "Error syncing file contents for %s: %s\n", |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2584 | filename_temp, g_strerror(errno)); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2585 | g_free(filename_temp); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2586 | fclose(file); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2587 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2588 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2589 | #endif |
|
25888
d0fdd378a635
Remove trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
25859
diff
changeset
|
2590 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2591 | /* Close file */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2592 | if (fclose(file) != 0) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2593 | { |
| 15884 | 2594 | purple_debug_error("util", "Error closing file %s: %s\n", |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2595 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2596 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2597 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2598 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2599 | |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2600 | #ifndef HAVE_FILENO |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2601 | /* This is the same effect (we hope) as the HAVE_FILENO block |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2602 | * above, but for systems without fileno(). */ |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2603 | if ((fd = open(filename_temp, O_RDWR)) < 0) { |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2604 | purple_debug_error("util", "Error opening file %s for flush: %s\n", |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2605 | filename_temp, g_strerror(errno)); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2606 | g_free(filename_temp); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2607 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2608 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2609 | if (fsync(fd) < 0) { |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2610 | purple_debug_error("util", "Error syncing %s: %s\n", |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2611 | filename_temp, g_strerror(errno)); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2612 | g_free(filename_temp); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2613 | close(fd); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2614 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2615 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2616 | if (close(fd) < 0) { |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2617 | purple_debug_error("util", "Error closing %s after sync: %s\n", |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2618 | filename_temp, g_strerror(errno)); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2619 | g_free(filename_temp); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2620 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2621 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2622 | #endif |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2623 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2624 | /* Ensure the file is the correct size */ |
|
10415
faceb835eb87
[gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents:
10414
diff
changeset
|
2625 | if (byteswritten != real_size) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2626 | { |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2627 | purple_debug_error("util", "Error writing to file %s: Wrote %" |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2628 | G_GSIZE_FORMAT " bytes " |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2629 | "but should have written %" G_GSIZE_FORMAT |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2630 | "; is your disk full?\n", |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2631 | filename_temp, byteswritten, real_size); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2632 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2633 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2634 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2635 | /* Use stat to be absolutely sure. */ |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2636 | if ((g_stat(filename_temp, &st) == -1) || (st.st_size != real_size)) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2637 | { |
| 15884 | 2638 | purple_debug_error("util", "Error writing data to file %s: " |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2639 | "Incomplete file written; is your disk " |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2640 | "full?\n", |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2641 | filename_temp); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2642 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2643 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2644 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2645 | |
|
12622
55c9c22a3885
[gaim-migrate @ 14958]
Daniel Atallah <datallah@pidgin.im>
parents:
12620
diff
changeset
|
2646 | #ifndef _WIN32 |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2647 | /* Set file permissions */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2648 | if (chmod(filename_temp, S_IRUSR | S_IWUSR) == -1) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2649 | { |
| 15884 | 2650 | purple_debug_error("util", "Error setting permissions of file %s: %s\n", |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2651 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2652 | } |
|
12622
55c9c22a3885
[gaim-migrate @ 14958]
Daniel Atallah <datallah@pidgin.im>
parents:
12620
diff
changeset
|
2653 | #endif |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2654 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2655 | /* Rename to the REAL name */ |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2656 | if (g_rename(filename_temp, filename_full) == -1) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2657 | { |
| 15884 | 2658 | purple_debug_error("util", "Error renaming %s to %s: %s\n", |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2659 | filename_temp, filename_full, |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2660 | g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2661 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2662 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2663 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2664 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2665 | return TRUE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2666 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2667 | |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2668 | xmlnode * |
| 15884 | 2669 | purple_util_read_xml_from_file(const char *filename, const char *description) |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2670 | { |
|
23643
4a68ddefa857
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:
23289
diff
changeset
|
2671 | return xmlnode_from_file(purple_user_dir(), filename, description, "util"); |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2672 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2673 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2674 | /* |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2675 | * Like mkstemp() but returns a file pointer, uses a pre-set template, |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2676 | * uses the semantics of tempnam() for the directory to use and allocates |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2677 | * the space for the filepath. |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2678 | * |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2679 | * Caller is responsible for closing the file and removing it when done, |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2680 | * as well as freeing the space pointed-to by "path" with g_free(). |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2681 | * |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2682 | * Returns NULL on failure and cleans up after itself if so. |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2683 | */ |
| 15884 | 2684 | static const char *purple_mkstemp_templ = {"purpleXXXXXX"}; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2685 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2686 | FILE * |
| 15884 | 2687 | purple_mkstemp(char **fpath, gboolean binary) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2688 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2689 | const gchar *tmpdir; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2690 | int fd; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2691 | FILE *fp = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2692 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2693 | g_return_val_if_fail(fpath != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2694 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2695 | if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { |
| 15884 | 2696 | if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, purple_mkstemp_templ)) != NULL) { |
|
16915
a2d4de1d8ca2
_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 <datallah@pidgin.im>
parents:
16610
diff
changeset
|
2697 | fd = g_mkstemp(*fpath); |
|
a2d4de1d8ca2
_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 <datallah@pidgin.im>
parents:
16610
diff
changeset
|
2698 | if(fd == -1) { |
| 15884 | 2699 | purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2700 | "Couldn't make \"%s\", error: %d\n", |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2701 | *fpath, errno); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2702 | } else { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2703 | if((fp = fdopen(fd, "r+")) == NULL) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2704 | close(fd); |
| 15884 | 2705 | purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2706 | "Couldn't fdopen(), error: %d\n", errno); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2707 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2708 | } |
|
16915
a2d4de1d8ca2
_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 <datallah@pidgin.im>
parents:
16610
diff
changeset
|
2709 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2710 | if(!fp) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2711 | g_free(*fpath); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2712 | *fpath = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2713 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2714 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2715 | } else { |
| 15884 | 2716 | purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
|
13985
9d115b698045
[gaim-migrate @ 16439]
Mark Doliner <markdoliner@pidgin.im>
parents:
13836
diff
changeset
|
2717 | "g_get_tmp_dir() failed!\n"); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2718 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2719 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2720 | return fp; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2721 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2722 | |
|
16437
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2723 | const char * |
|
16557
b0e9ddccdbb9
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <datallah@pidgin.im>
parents:
16545
diff
changeset
|
2724 | purple_util_get_image_extension(gconstpointer data, size_t len) |
|
16437
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2725 | { |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2726 | g_return_val_if_fail(data != NULL, NULL); |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2727 | g_return_val_if_fail(len > 0, NULL); |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2728 | |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2729 | if (len >= 4) |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2730 | { |
|
17602
b35a8de31e81
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 <evands@pidgin.im>
parents:
17572
diff
changeset
|
2731 | if (!strncmp((char *)data, "GIF8", 4)) |
|
16437
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2732 | return "gif"; |
|
17602
b35a8de31e81
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 <evands@pidgin.im>
parents:
17572
diff
changeset
|
2733 | else if (!strncmp((char *)data, "\xff\xd8\xff", 3)) /* 4th may be e0 through ef */ |
|
16437
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2734 | return "jpg"; |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2735 | else if (!strncmp((char *)data, "\x89PNG", 4)) |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2736 | return "png"; |
|
17602
b35a8de31e81
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 <evands@pidgin.im>
parents:
17572
diff
changeset
|
2737 | else if (!strncmp((char *)data, "MM", 2) || |
|
b35a8de31e81
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 <evands@pidgin.im>
parents:
17572
diff
changeset
|
2738 | !strncmp((char *)data, "II", 2)) |
|
b35a8de31e81
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 <evands@pidgin.im>
parents:
17572
diff
changeset
|
2739 | return "tif"; |
|
17603
22bb998de435
Where did ekse come from?
Richard Laager <rlaager@pidgin.im>
parents:
17602
diff
changeset
|
2740 | else if (!strncmp((char *)data, "BM", 2)) |
|
17602
b35a8de31e81
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 <evands@pidgin.im>
parents:
17572
diff
changeset
|
2741 | return "bmp"; |
|
16437
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2742 | } |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2743 | |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2744 | return "icon"; |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2745 | } |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2746 | |
|
26394
e97f7512b037
Add a note that this function could potentially be faster.
Mark Doliner <markdoliner@pidgin.im>
parents:
25888
diff
changeset
|
2747 | /* |
|
27662
afdc8aac00d9
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <markdoliner@pidgin.im>
parents:
27652
diff
changeset
|
2748 | * We thought about using non-cryptographic hashes like CRC32 here. |
|
afdc8aac00d9
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <markdoliner@pidgin.im>
parents:
27652
diff
changeset
|
2749 | * They would be faster, but we think using something more secure is |
|
afdc8aac00d9
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <markdoliner@pidgin.im>
parents:
27652
diff
changeset
|
2750 | * important, so that it is more difficult for someone to maliciously |
|
afdc8aac00d9
Update this comment. We talked about using CRC32 on the devel list
Mark Doliner <markdoliner@pidgin.im>
parents:
27652
diff
changeset
|
2751 | * replace one buddy's icon with something else. |
|
26394
e97f7512b037
Add a note that this function could potentially be faster.
Mark Doliner <markdoliner@pidgin.im>
parents:
25888
diff
changeset
|
2752 | */ |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2753 | char * |
|
22443
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2754 | purple_util_get_image_checksum(gconstpointer image_data, size_t image_len) |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2755 | { |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2756 | PurpleCipherContext *context; |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2757 | gchar digest[41]; |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2758 | |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2759 | context = purple_cipher_context_new_by_name("sha1", NULL); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2760 | if (context == NULL) |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2761 | { |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2762 | purple_debug_error("util", "Could not find sha1 cipher\n"); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2763 | g_return_val_if_reached(NULL); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2764 | } |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2765 | |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2766 | /* Hash the image data */ |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2767 | purple_cipher_context_append(context, image_data, image_len); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2768 | if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL)) |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2769 | { |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2770 | purple_debug_error("util", "Failed to get SHA-1 digest.\n"); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2771 | g_return_val_if_reached(NULL); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2772 | } |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2773 | purple_cipher_context_destroy(context); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2774 | |
|
22443
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2775 | return g_strdup(digest); |
|
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2776 | } |
|
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2777 | |
|
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2778 | char * |
|
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2779 | purple_util_get_image_filename(gconstpointer image_data, size_t image_len) |
|
7b8772af6bb7
Apply the custom smiley patches from #1187, from Jorge Villaseño (Masca) and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22313
diff
changeset
|
2780 | { |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2781 | /* Return the filename */ |
| 22444 | 2782 | char *checksum = purple_util_get_image_checksum(image_data, image_len); |
| 2783 | char *filename = g_strdup_printf("%s.%s", checksum, | |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2784 | purple_util_get_image_extension(image_data, image_len)); |
| 22444 | 2785 | g_free(checksum); |
| 2786 | return filename; | |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2787 | } |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2788 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2789 | gboolean |
| 15884 | 2790 | purple_program_is_valid(const char *program) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2791 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2792 | GError *error = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2793 | char **argv; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2794 | gchar *progname; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2795 | gboolean is_valid = FALSE; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2796 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2797 | g_return_val_if_fail(program != NULL, FALSE); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2798 | g_return_val_if_fail(*program != '\0', FALSE); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2799 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2800 | if (!g_shell_parse_argv(program, NULL, &argv, &error)) { |
| 15884 | 2801 | purple_debug(PURPLE_DEBUG_ERROR, "program_is_valid", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2802 | "Could not parse program '%s': %s\n", |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2803 | program, error->message); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2804 | g_error_free(error); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2805 | return FALSE; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2806 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2807 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2808 | if (argv == NULL) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2809 | return FALSE; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2810 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2811 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2812 | progname = g_find_program_in_path(argv[0]); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2813 | is_valid = (progname != NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2814 | |
|
30797
2c0fe77a44bc
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30702
diff
changeset
|
2815 | if(purple_debug_is_verbose()) |
|
2c0fe77a44bc
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30702
diff
changeset
|
2816 | purple_debug_info("program_is_valid", "Tested program %s. %s.\n", program, |
|
2c0fe77a44bc
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30702
diff
changeset
|
2817 | is_valid ? "Valid" : "Invalid"); |
|
2c0fe77a44bc
Useful snippet of debugging that helped me out.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
30702
diff
changeset
|
2818 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2819 | g_strfreev(argv); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2820 | g_free(progname); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2821 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2822 | return is_valid; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2823 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2824 | |
| 11878 | 2825 | |
| 2826 | gboolean | |
| 15884 | 2827 | purple_running_gnome(void) |
| 11878 | 2828 | { |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2829 | #ifndef _WIN32 |
| 11878 | 2830 | gchar *tmp = g_find_program_in_path("gnome-open"); |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2831 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2832 | if (tmp == NULL) |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2833 | return FALSE; |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2834 | g_free(tmp); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2835 | |
|
21665
a1a724a89a03
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21468
diff
changeset
|
2836 | tmp = (gchar *)g_getenv("GNOME_DESKTOP_SESSION_ID"); |
|
a1a724a89a03
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21468
diff
changeset
|
2837 | |
|
a1a724a89a03
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21468
diff
changeset
|
2838 | return ((tmp != NULL) && (*tmp != '\0')); |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2839 | #else |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2840 | return FALSE; |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2841 | #endif |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2842 | } |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2843 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2844 | gboolean |
| 15884 | 2845 | purple_running_kde(void) |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2846 | { |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2847 | #ifndef _WIN32 |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2848 | gchar *tmp = g_find_program_in_path("kfmclient"); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2849 | const char *session; |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2850 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2851 | if (tmp == NULL) |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2852 | return FALSE; |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2853 | g_free(tmp); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2854 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2855 | session = g_getenv("KDE_FULL_SESSION"); |
|
25859
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2856 | if (purple_strequal(session, "true")) |
| 11878 | 2857 | return TRUE; |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2858 | |
| 15884 | 2859 | /* If you run Purple from Konsole under !KDE, this will provide a |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2860 | * a false positive. Since we do the GNOME checks first, this is |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2861 | * only a problem if you're running something !(KDE || GNOME) and |
| 15884 | 2862 | * you run Purple from Konsole. This really shouldn't be a problem. */ |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2863 | return ((g_getenv("KDEDIR") != NULL) || g_getenv("KDEDIRS") != NULL); |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2864 | #else |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2865 | return FALSE; |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2866 | #endif |
| 11878 | 2867 | } |
| 2868 | ||
|
15016
bdc3f402b3a0
[gaim-migrate @ 17733]
Luke Schierer <lschiere@pidgin.im>
parents:
14940
diff
changeset
|
2869 | gboolean |
| 15884 | 2870 | purple_running_osx(void) |
|
14708
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2871 | { |
|
16557
b0e9ddccdbb9
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <datallah@pidgin.im>
parents:
16545
diff
changeset
|
2872 | #if defined(__APPLE__) |
|
14708
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2873 | return TRUE; |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2874 | #else |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2875 | return FALSE; |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2876 | #endif |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2877 | } |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2878 | |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2879 | typedef union purple_sockaddr { |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2880 | struct sockaddr sa; |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2881 | struct sockaddr_in sa_in; |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2882 | #if defined(AF_INET6) |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2883 | struct sockaddr_in6 sa_in6; |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2884 | #endif |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2885 | struct sockaddr_storage sa_stor; |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2886 | } PurpleSockaddr; |
|
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2887 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2888 | char * |
| 15884 | 2889 | purple_fd_get_ip(int fd) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2890 | { |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2891 | PurpleSockaddr addr; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2892 | socklen_t namelen = sizeof(addr); |
|
30025
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2893 | int family; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2894 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2895 | g_return_val_if_fail(fd != 0, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2896 | |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2897 | if (getsockname(fd, &(addr.sa), &namelen)) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2898 | return NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2899 | |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2900 | family = addr.sa.sa_family; |
|
30025
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2901 | |
|
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2902 | if (family == AF_INET) { |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2903 | return g_strdup(inet_ntoa(addr.sa_in.sin_addr)); |
|
30026
4e07cacda11e
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <darkrain42@pidgin.im>
parents:
30025
diff
changeset
|
2904 | } |
|
4e07cacda11e
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <darkrain42@pidgin.im>
parents:
30025
diff
changeset
|
2905 | #if defined(AF_INET6) && defined(HAVE_INET_NTOP) |
|
4e07cacda11e
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <darkrain42@pidgin.im>
parents:
30025
diff
changeset
|
2906 | else if (family == AF_INET6) { |
|
30025
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2907 | char host[INET6_ADDRSTRLEN]; |
|
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2908 | const char *tmp; |
|
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2909 | |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2910 | tmp = inet_ntop(family, &(addr.sa_in6.sin6_addr), host, sizeof(host)); |
|
30025
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2911 | return g_strdup(tmp); |
|
30026
4e07cacda11e
util: Bah, AF_INET6 probably isn't always available
Paul Aurich <darkrain42@pidgin.im>
parents:
30025
diff
changeset
|
2912 | } |
|
30025
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2913 | #endif |
|
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2914 | |
|
065044c5f81e
util: Make purple_fd_get_ip IPv6-aware
Paul Aurich <darkrain42@pidgin.im>
parents:
29924
diff
changeset
|
2915 | return NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2916 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2917 | |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2918 | int |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2919 | purple_socket_get_family(int fd) |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2920 | { |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2921 | PurpleSockaddr addr; |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2922 | socklen_t len = sizeof(addr); |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2923 | |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2924 | g_return_val_if_fail(fd >= 0, -1); |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2925 | |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2926 | if (getsockname(fd, &(addr.sa), &len)) |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2927 | return -1; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2928 | |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2929 | return addr.sa.sa_family; |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2930 | } |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2931 | |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2932 | gboolean |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2933 | purple_socket_speaks_ipv4(int fd) |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2934 | { |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2935 | int family; |
|
30031
db4c6d9395e2
util: Fix some strict-aliasing issues.
Paul Aurich <darkrain42@pidgin.im>
parents:
30028
diff
changeset
|
2936 | |
|
30027
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2937 | g_return_val_if_fail(fd >= 0, FALSE); |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2938 | |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2939 | family = purple_socket_get_family(fd); |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2940 | |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2941 | switch (family) { |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2942 | case AF_INET: |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2943 | return TRUE; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2944 | #if defined(IPV6_V6ONLY) |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2945 | case AF_INET6: |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2946 | { |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2947 | int val = 0; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2948 | guint len = sizeof(val); |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2949 | |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2950 | if (getsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &val, &len) != 0) |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2951 | return FALSE; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2952 | return !val; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2953 | } |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2954 | #endif |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2955 | default: |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2956 | return FALSE; |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2957 | } |
|
2ab6e591cf72
Add network listen functions that accept a family argument (AF_INET(6?)).
Paul Aurich <darkrain42@pidgin.im>
parents:
30026
diff
changeset
|
2958 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2959 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2960 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2961 | * String Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2962 | **************************************************************************/ |
|
25859
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2963 | gboolean |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2964 | purple_strequal(const gchar *left, const gchar *right) |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2965 | { |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2966 | #if GLIB_CHECK_VERSION(2,16,0) |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2967 | return (g_strcmp0(left, right) == 0); |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2968 | #else |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2969 | return ((left == NULL && right == NULL) || |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2970 | (left != NULL && right != NULL && strcmp(left, right) == 0)); |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2971 | #endif |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2972 | } |
|
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
2973 | |
| 7162 | 2974 | const char * |
| 15884 | 2975 | purple_normalize(const PurpleAccount *account, const char *str) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2976 | { |
| 7430 | 2977 | const char *ret = NULL; |
|
16610
815ce4002357
sadrul fixed the next but not last crash
Luke Schierer <lschiere@pidgin.im>
parents:
16557
diff
changeset
|
2978 | static char buf[BUF_LEN]; |
| 7261 | 2979 | |
|
28410
184838e7f0c4
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@pidgin.im>
parents:
28407
diff
changeset
|
2980 | /* This should prevent a crash if purple_normalize gets called with NULL str, see #10115 */ |
|
184838e7f0c4
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@pidgin.im>
parents:
28407
diff
changeset
|
2981 | g_return_val_if_fail(str != NULL, ""); |
|
28407
821a151ef20c
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@pidgin.im>
parents:
28390
diff
changeset
|
2982 | |
|
13620
1374da61a5e2
[gaim-migrate @ 16005]
Richard Laager <rlaager@pidgin.im>
parents:
13616
diff
changeset
|
2983 | if (account != NULL) |
|
13614
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2984 | { |
| 15884 | 2985 | PurplePlugin *prpl = purple_find_prpl(purple_account_get_protocol_id(account)); |
|
13614
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2986 | |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2987 | if (prpl != NULL) |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2988 | { |
| 15884 | 2989 | PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
|
13614
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2990 | |
|
28577
513297aa5f42
Minor cleanup. gc->prpl is guarranteed to be a PurplePlugin with
Mark Doliner <markdoliner@pidgin.im>
parents:
28538
diff
changeset
|
2991 | if (prpl_info->normalize) |
|
13614
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2992 | ret = prpl_info->normalize(account, str); |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2993 | } |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2994 | } |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
2995 | |
|
13621
788d329bdfa0
[gaim-migrate @ 16006]
Richard Laager <rlaager@pidgin.im>
parents:
13620
diff
changeset
|
2996 | if (ret == NULL) |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
2997 | { |
| 7261 | 2998 | char *tmp; |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
2999 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3000 | tmp = g_utf8_normalize(str, -1, G_NORMALIZE_DEFAULT); |
| 7261 | 3001 | g_snprintf(buf, sizeof(buf), "%s", tmp); |
| 3002 | g_free(tmp); | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3003 | |
| 7430 | 3004 | ret = buf; |
| 7261 | 3005 | } |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3006 | |
| 7430 | 3007 | return ret; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3008 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3009 | |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3010 | /* |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3011 | * You probably don't want to call this directly, it is |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3012 | * mainly for use as a PRPL callback function. See the |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3013 | * comments in util.h. |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3014 | */ |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3015 | const char * |
| 15884 | 3016 | purple_normalize_nocase(const PurpleAccount *account, const char *str) |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3017 | { |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3018 | static char buf[BUF_LEN]; |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3019 | char *tmp1, *tmp2; |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3020 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3021 | g_return_val_if_fail(str != NULL, NULL); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3022 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3023 | tmp1 = g_utf8_strdown(str, -1); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3024 | tmp2 = g_utf8_normalize(tmp1, -1, G_NORMALIZE_DEFAULT); |
|
13646
3bf958a5e352
[gaim-migrate @ 16043]
Daniel Atallah <datallah@pidgin.im>
parents:
13644
diff
changeset
|
3025 | g_snprintf(buf, sizeof(buf), "%s", tmp2 ? tmp2 : ""); |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3026 | g_free(tmp2); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3027 | g_free(tmp1); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3028 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3029 | return buf; |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3030 | } |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3031 | |
|
8700
0c9288c5e40e
[gaim-migrate @ 9453]
Mark Doliner <markdoliner@pidgin.im>
parents:
8686
diff
changeset
|
3032 | gchar * |
| 15884 | 3033 | purple_strdup_withhtml(const gchar *src) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3034 | { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3035 | gulong destsize, i, j; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3036 | gchar *dest; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3037 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3038 | g_return_val_if_fail(src != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3039 | |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3040 | /* New length is (length of src) + (number of \n's * 3) - (number of \r's) + 1 */ |
|
14002
fb323d3eefee
[gaim-migrate @ 16475]
Mark Doliner <markdoliner@pidgin.im>
parents:
13994
diff
changeset
|
3041 | destsize = 1; |
|
fb323d3eefee
[gaim-migrate @ 16475]
Mark Doliner <markdoliner@pidgin.im>
parents:
13994
diff
changeset
|
3042 | for (i = 0; src[i] != '\0'; i++) |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3043 | { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3044 | if (src[i] == '\n') |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3045 | destsize += 4; |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3046 | else if (src[i] != '\r') |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3047 | destsize++; |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3048 | } |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3049 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3050 | dest = g_malloc(destsize); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3051 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3052 | /* Copy stuff, ignoring \r's, because they are dumb */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3053 | for (i = 0, j = 0; src[i] != '\0'; i++) { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3054 | if (src[i] == '\n') { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3055 | strcpy(&dest[j], "<BR>"); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3056 | j += 4; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3057 | } else if (src[i] != '\r') |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3058 | dest[j++] = src[i]; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3059 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3060 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3061 | dest[destsize-1] = '\0'; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3062 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3063 | return dest; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3064 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3065 | |
| 7628 | 3066 | gboolean |
| 15884 | 3067 | purple_str_has_prefix(const char *s, const char *p) |
| 7628 | 3068 | { |
|
11780
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3069 | return g_str_has_prefix(s, p); |
| 7628 | 3070 | } |
| 3071 | ||
| 3072 | gboolean | |
| 15884 | 3073 | purple_str_has_suffix(const char *s, const char *x) |
| 7628 | 3074 | { |
|
11780
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3075 | return g_str_has_suffix(s, x); |
| 7628 | 3076 | } |
| 3077 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3078 | char * |
| 15884 | 3079 | purple_str_add_cr(const char *text) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3080 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3081 | char *ret = NULL; |
| 7631 | 3082 | int count = 0, j; |
| 3083 | guint i; | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3084 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3085 | g_return_val_if_fail(text != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3086 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3087 | if (text[0] == '\n') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3088 | count++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3089 | for (i = 1; i < strlen(text); i++) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3090 | if (text[i] == '\n' && text[i - 1] != '\r') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3091 | count++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3092 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3093 | if (count == 0) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3094 | return g_strdup(text); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3095 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3096 | ret = g_malloc0(strlen(text) + count + 1); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3097 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3098 | i = 0; j = 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3099 | if (text[i] == '\n') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3100 | ret[j++] = '\r'; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3101 | ret[j++] = text[i++]; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3102 | for (; i < strlen(text); i++) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3103 | if (text[i] == '\n' && text[i - 1] != '\r') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3104 | ret[j++] = '\r'; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3105 | ret[j++] = text[i]; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3106 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3107 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3108 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3109 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3110 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3111 | void |
| 15884 | 3112 | purple_str_strip_char(char *text, char thechar) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3113 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3114 | int i, j; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3115 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3116 | g_return_if_fail(text != NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3117 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3118 | for (i = 0, j = 0; text[i]; i++) |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3119 | if (text[i] != thechar) |
|
11142
3ed4fc774b87
[gaim-migrate @ 13206]
Mark Doliner <markdoliner@pidgin.im>
parents:
11137
diff
changeset
|
3120 | text[j++] = text[i]; |
|
3ed4fc774b87
[gaim-migrate @ 13206]
Mark Doliner <markdoliner@pidgin.im>
parents:
11137
diff
changeset
|
3121 | |
|
30702
8a1938367841
These are dead increments.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
30515
diff
changeset
|
3122 | text[j] = '\0'; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3123 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3124 | |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3125 | void |
| 15884 | 3126 | purple_util_chrreplace(char *string, char delimiter, |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3127 | char replacement) |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3128 | { |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3129 | int i = 0; |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3130 | |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3131 | g_return_if_fail(string != NULL); |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3132 | |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3133 | while (string[i] != '\0') |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3134 | { |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3135 | if (string[i] == delimiter) |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3136 | string[i] = replacement; |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3137 | i++; |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3138 | } |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3139 | } |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3140 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3141 | gchar * |
| 15884 | 3142 | purple_strreplace(const char *string, const char *delimiter, |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3143 | const char *replacement) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3144 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3145 | gchar **split; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3146 | gchar *ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3147 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3148 | g_return_val_if_fail(string != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3149 | g_return_val_if_fail(delimiter != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3150 | g_return_val_if_fail(replacement != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3151 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3152 | split = g_strsplit(string, delimiter, 0); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3153 | ret = g_strjoinv(replacement, split); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3154 | g_strfreev(split); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3155 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3156 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3157 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3158 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3159 | gchar * |
| 15884 | 3160 | purple_strcasereplace(const char *string, const char *delimiter, |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3161 | const char *replacement) |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3162 | { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3163 | gchar *ret; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3164 | int length_del, length_rep, i, j; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3165 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3166 | g_return_val_if_fail(string != NULL, NULL); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3167 | g_return_val_if_fail(delimiter != NULL, NULL); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3168 | g_return_val_if_fail(replacement != NULL, NULL); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3169 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3170 | length_del = strlen(delimiter); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3171 | length_rep = strlen(replacement); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3172 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3173 | /* Count how many times the delimiter appears */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3174 | i = 0; /* position in the source string */ |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8700
diff
changeset
|
3175 | j = 0; /* number of occurrences of "delimiter" */ |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3176 | while (string[i] != '\0') { |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
3177 | if (!g_ascii_strncasecmp(&string[i], delimiter, length_del)) { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3178 | i += length_del; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3179 | j += length_rep; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3180 | } else { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3181 | i++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3182 | j++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3183 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3184 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3185 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3186 | ret = g_malloc(j+1); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3187 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3188 | i = 0; /* position in the source string */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3189 | j = 0; /* position in the destination string */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3190 | while (string[i] != '\0') { |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
3191 | if (!g_ascii_strncasecmp(&string[i], delimiter, length_del)) { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3192 | strncpy(&ret[j], replacement, length_rep); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3193 | i += length_del; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3194 | j += length_rep; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3195 | } else { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3196 | ret[j] = string[i]; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3197 | i++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3198 | j++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3199 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3200 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3201 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3202 | ret[j] = '\0'; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3203 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3204 | return ret; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3205 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3206 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3207 | const char * |
| 15884 | 3208 | purple_strcasestr(const char *haystack, const char *needle) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3209 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3210 | size_t hlen, nlen; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3211 | const char *tmp, *ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3212 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3213 | g_return_val_if_fail(haystack != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3214 | g_return_val_if_fail(needle != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3215 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3216 | hlen = strlen(haystack); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3217 | nlen = strlen(needle); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3218 | tmp = haystack, |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3219 | ret = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3220 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3221 | g_return_val_if_fail(hlen > 0, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3222 | g_return_val_if_fail(nlen > 0, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3223 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3224 | while (*tmp && !ret) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3225 | if (!g_ascii_strncasecmp(needle, tmp, nlen)) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3226 | ret = tmp; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3227 | else |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3228 | tmp++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3229 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3230 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3231 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3232 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3233 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3234 | char * |
| 15884 | 3235 | purple_str_size_to_units(size_t size) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3236 | { |
|
21091
07fe1a99c47b
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents:
21076
diff
changeset
|
3237 | static const char * const size_str[] = { "bytes", "KiB", "MiB", "GiB" }; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3238 | float size_mag; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3239 | int size_index = 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3240 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3241 | if (size == -1) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3242 | return g_strdup(_("Calculating...")); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3243 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3244 | else if (size == 0) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3245 | return g_strdup(_("Unknown.")); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3246 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3247 | else { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3248 | size_mag = (float)size; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3249 | |
|
10569
3324f62c07aa
[gaim-migrate @ 11957]
Daniel Atallah <datallah@pidgin.im>
parents:
10506
diff
changeset
|
3250 | while ((size_index < 3) && (size_mag > 1024)) { |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3251 | size_mag /= 1024; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3252 | size_index++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3253 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3254 | |
|
10103
5744088750bc
[gaim-migrate @ 11130]
Caleb Gilmour <caleb_gilmour@users.sourceforge.net>
parents:
9940
diff
changeset
|
3255 | if (size_index == 0) { |
|
11656
56f5e598dc6c
[gaim-migrate @ 13940]
Richard Laager <rlaager@pidgin.im>
parents:
11552
diff
changeset
|
3256 | return g_strdup_printf("%" G_GSIZE_FORMAT " %s", size, size_str[size_index]); |
|
10103
5744088750bc
[gaim-migrate @ 11130]
Caleb Gilmour <caleb_gilmour@users.sourceforge.net>
parents:
9940
diff
changeset
|
3257 | } else { |
|
5744088750bc
[gaim-migrate @ 11130]
Caleb Gilmour <caleb_gilmour@users.sourceforge.net>
parents:
9940
diff
changeset
|
3258 | return g_strdup_printf("%.2f %s", size_mag, size_str[size_index]); |
|
5744088750bc
[gaim-migrate @ 11130]
Caleb Gilmour <caleb_gilmour@users.sourceforge.net>
parents:
9940
diff
changeset
|
3259 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3260 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3261 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3262 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3263 | char * |
| 15884 | 3264 | purple_str_seconds_to_string(guint secs) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3265 | { |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3266 | char *ret = NULL; |
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3267 | guint days, hrs, mins; |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3268 | |
| 9424 | 3269 | if (secs < 60) |
| 3270 | { | |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3271 | return g_strdup_printf(dngettext(PACKAGE, "%d second", "%d seconds", secs), secs); |
| 9424 | 3272 | } |
| 3273 | ||
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3274 | days = secs / (60 * 60 * 24); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3275 | secs = secs % (60 * 60 * 24); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3276 | hrs = secs / (60 * 60); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3277 | secs = secs % (60 * 60); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3278 | mins = secs / 60; |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3279 | secs = secs % 60; |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3280 | |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3281 | if (days > 0) |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3282 | { |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3283 | ret = g_strdup_printf(dngettext(PACKAGE, "%d day", "%d days", days), days); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3284 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3285 | |
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3286 | if (hrs > 0) |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3287 | { |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3288 | if (ret != NULL) |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3289 | { |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3290 | char *tmp = g_strdup_printf( |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3291 | dngettext(PACKAGE, "%s, %d hour", "%s, %d hours", hrs), |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3292 | ret, hrs); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3293 | g_free(ret); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3294 | ret = tmp; |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3295 | } |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3296 | else |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3297 | ret = g_strdup_printf(dngettext(PACKAGE, "%d hour", "%d hours", hrs), hrs); |
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3298 | } |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3299 | |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3300 | if (mins > 0) |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3301 | { |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3302 | if (ret != NULL) |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3303 | { |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3304 | char *tmp = g_strdup_printf( |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3305 | dngettext(PACKAGE, "%s, %d minute", "%s, %d minutes", mins), |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3306 | ret, mins); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3307 | g_free(ret); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3308 | ret = tmp; |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3309 | } |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3310 | else |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3311 | ret = g_strdup_printf(dngettext(PACKAGE, "%d minute", "%d minutes", mins), mins); |
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3312 | } |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3313 | |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3314 | return ret; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3315 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3316 | |
| 9277 | 3317 | |
| 3318 | char * | |
| 15884 | 3319 | purple_str_binary_to_ascii(const unsigned char *binary, guint len) |
| 9277 | 3320 | { |
| 3321 | GString *ret; | |
| 3322 | guint i; | |
| 3323 | ||
| 3324 | g_return_val_if_fail(len > 0, NULL); | |
| 3325 | ||
| 3326 | ret = g_string_sized_new(len); | |
| 3327 | ||
| 3328 | for (i = 0; i < len; i++) | |
| 3329 | if (binary[i] < 32 || binary[i] > 126) | |
| 3330 | g_string_append_printf(ret, "\\x%02hhx", binary[i]); | |
| 3331 | else if (binary[i] == '\\') | |
| 3332 | g_string_append(ret, "\\\\"); | |
| 3333 | else | |
| 3334 | g_string_append_c(ret, binary[i]); | |
| 3335 | ||
| 3336 | return g_string_free(ret, FALSE); | |
| 3337 | } | |
| 3338 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3339 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3340 | * URI/URL Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3341 | **************************************************************************/ |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3342 | |
| 15884 | 3343 | void purple_got_protocol_handler_uri(const char *uri) |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3344 | { |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3345 | char proto[11]; |
|
28136
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3346 | char delimiter; |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3347 | const char *tmp, *param_string; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3348 | char *cmd; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3349 | GHashTable *params = NULL; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3350 | int len; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3351 | if (!(tmp = strchr(uri, ':')) || tmp == uri) { |
| 15884 | 3352 | purple_debug_error("util", "Malformed protocol handler message - missing protocol.\n"); |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3353 | return; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3354 | } |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3355 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3356 | len = MIN(sizeof(proto) - 1, (tmp - uri)); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3357 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3358 | strncpy(proto, uri, len); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3359 | proto[len] = '\0'; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3360 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3361 | tmp++; |
|
28136
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3362 | |
|
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3363 | if (g_str_equal(proto, "xmpp")) |
|
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3364 | delimiter = ';'; |
|
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3365 | else |
|
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3366 | delimiter = '&'; |
|
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3367 | |
|
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3368 | purple_debug_info("util", "Processing message '%s' for protocol '%s' using delimiter '%c'.\n", tmp, proto, delimiter); |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3369 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3370 | if ((param_string = strchr(tmp, '?'))) { |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3371 | const char *keyend = NULL, *pairstart; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3372 | char *key, *value = NULL; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3373 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3374 | cmd = g_strndup(tmp, (param_string - tmp)); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3375 | param_string++; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3376 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3377 | params = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3378 | pairstart = tmp = param_string; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3379 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3380 | while (*tmp || *pairstart) { |
|
28136
a3b6446eb2c4
Add support for XMPP URIs on Windows. Closes #2326.
Paul Aurich <darkrain42@pidgin.im>
parents:
27902
diff
changeset
|
3381 | if (*tmp == delimiter || !(*tmp)) { |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3382 | /* If there is no explicit value */ |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3383 | if (keyend == NULL) |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3384 | keyend = tmp; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3385 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3386 | if (keyend && keyend != pairstart) { |
|
17145
463085404f54
Patch #756 from EvilSporkMan. Use Datallah's url handling for Dbus
Sean Egan <seanegan@pidgin.im>
parents:
17143
diff
changeset
|
3387 | char *p; |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3388 | key = g_strndup(pairstart, (keyend - pairstart)); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3389 | /* If there is an explicit value */ |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3390 | if (keyend != tmp && keyend != (tmp - 1)) |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3391 | value = g_strndup(keyend + 1, (tmp - keyend - 1)); |
|
17145
463085404f54
Patch #756 from EvilSporkMan. Use Datallah's url handling for Dbus
Sean Egan <seanegan@pidgin.im>
parents:
17143
diff
changeset
|
3392 | for (p = key; *p; ++p) |
|
463085404f54
Patch #756 from EvilSporkMan. Use Datallah's url handling for Dbus
Sean Egan <seanegan@pidgin.im>
parents:
17143
diff
changeset
|
3393 | *p = g_ascii_tolower(*p); |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3394 | g_hash_table_insert(params, key, value); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3395 | } |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3396 | keyend = value = NULL; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3397 | pairstart = (*tmp) ? tmp + 1 : tmp; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3398 | } else if (*tmp == '=') |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3399 | keyend = tmp; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3400 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3401 | if (*tmp) |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3402 | tmp++; |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3403 | } |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3404 | } else |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3405 | cmd = g_strdup(tmp); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3406 | |
| 15884 | 3407 | purple_signal_emit_return_1(purple_get_core(), "uri-handler", proto, cmd, params); |
|
15678
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3408 | |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3409 | g_free(cmd); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3410 | if (params) |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3411 | g_hash_table_destroy(params); |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3412 | } |
|
7434ef155a3a
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 <datallah@pidgin.im>
parents:
15482
diff
changeset
|
3413 | |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3414 | /* |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3415 | * TODO: Should probably add a "gboolean *ret_ishttps" parameter that |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3416 | * is set to TRUE if this URL is https, otherwise it is set to |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3417 | * FALSE. But that change will break the API. |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3418 | * |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3419 | * This is important for Yahoo! web messenger login. They now |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3420 | * force https login, and if you access the web messenger login |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3421 | * page via http then it redirects you to the https version, but |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3422 | * purple_util_fetch_url() ignores the "https" and attempts to |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3423 | * fetch the URL via http again, which gets redirected again. |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3424 | */ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
3425 | gboolean |
| 15884 | 3426 | purple_url_parse(const char *url, char **ret_host, int *ret_port, |
| 9227 | 3427 | char **ret_path, char **ret_user, char **ret_passwd) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3428 | { |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3429 | gboolean is_https = FALSE; |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3430 | const char * scan_info; |
|
8118
7f5315bb4506
[gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents:
8088
diff
changeset
|
3431 | char port_str[6]; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3432 | int f; |
| 9341 | 3433 | const char *at, *slash; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3434 | const char *turl; |
| 9227 | 3435 | char host[256], path[256], user[256], passwd[256]; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3436 | int port = 0; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3437 | /* hyphen at end includes it in control set */ |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3438 | |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3439 | #define ADDR_CTRL "A-Za-z0-9.-" |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3440 | #define PORT_CTRL "0-9" |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3441 | #define PAGE_CTRL "A-Za-z0-9.~_/:*!@&%%?=+^-" |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3442 | #define USER_CTRL "A-Za-z0-9.~_/*!&%%?=+^-" |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3443 | #define PASSWD_CTRL "A-Za-z0-9.~_/*!&%%?=+^-" |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3444 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3445 | g_return_val_if_fail(url != NULL, FALSE); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3446 | |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3447 | if ((turl = purple_strcasestr(url, "http://")) != NULL) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3448 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3449 | turl += 7; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3450 | url = turl; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3451 | } |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3452 | else if ((turl = purple_strcasestr(url, "https://")) != NULL) |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3453 | { |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3454 | is_https = TRUE; |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3455 | turl += 8; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3456 | url = turl; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3457 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3458 | |
| 9227 | 3459 | /* parse out authentication information if supplied */ |
| 9341 | 3460 | /* Only care about @ char BEFORE the first / */ |
| 3461 | at = strchr(url, '@'); | |
| 3462 | slash = strchr(url, '/'); | |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3463 | f = 0; |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3464 | if (at && (!slash || at < slash)) { |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3465 | scan_info = "%255[" USER_CTRL "]:%255[" PASSWD_CTRL "]^@"; |
| 9227 | 3466 | f = sscanf(url, scan_info, user, passwd); |
| 3467 | ||
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3468 | if (f == 1) { |
| 9227 | 3469 | /* No passwd, possibly just username supplied */ |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3470 | scan_info = "%255[" USER_CTRL "]^@"; |
| 9227 | 3471 | f = sscanf(url, scan_info, user); |
| 3472 | } | |
| 3473 | ||
| 9230 | 3474 | url = at+1; /* move pointer after the @ char */ |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3475 | } |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3476 | |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3477 | if (f < 1) { |
| 9227 | 3478 | *user = '\0'; |
| 3479 | *passwd = '\0'; | |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3480 | } else if (f == 1) |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3481 | *passwd = '\0'; |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3482 | |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3483 | scan_info = "%255[" ADDR_CTRL "]:%5[" PORT_CTRL "]/%255[" PAGE_CTRL "]"; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3484 | f = sscanf(url, scan_info, host, port_str, path); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3485 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3486 | if (f == 1) |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3487 | { |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3488 | scan_info = "%255[" ADDR_CTRL "]/%255[" PAGE_CTRL "]"; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3489 | f = sscanf(url, scan_info, host, path); |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3490 | /* Use the default port */ |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3491 | if (is_https) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3492 | g_snprintf(port_str, sizeof(port_str), "443"); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3493 | else |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3494 | g_snprintf(port_str, sizeof(port_str), "80"); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3495 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3496 | |
|
24185
dde166723de7
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evands@pidgin.im>
parents:
24177
diff
changeset
|
3497 | if (f == 0) |
|
dde166723de7
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evands@pidgin.im>
parents:
24177
diff
changeset
|
3498 | *host = '\0'; |
|
dde166723de7
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evands@pidgin.im>
parents:
24177
diff
changeset
|
3499 | |
|
dde166723de7
purple_url_parse() now gracefully handles a url which is wholly invalid.
Evan Schoenberg <evands@pidgin.im>
parents:
24177
diff
changeset
|
3500 | if (f <= 1) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3501 | *path = '\0'; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3502 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3503 | sscanf(port_str, "%d", &port); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3504 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3505 | if (ret_host != NULL) *ret_host = g_strdup(host); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3506 | if (ret_port != NULL) *ret_port = port; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3507 | if (ret_path != NULL) *ret_path = g_strdup(path); |
| 9227 | 3508 | if (ret_user != NULL) *ret_user = g_strdup(user); |
| 3509 | if (ret_passwd != NULL) *ret_passwd = g_strdup(passwd); | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3510 | |
|
24186
f5802c63a14e
Return FALSE from purple_url_parse() if a host could not be determined
Evan Schoenberg <evands@pidgin.im>
parents:
24185
diff
changeset
|
3511 | return ((*host != '\0') ? TRUE : FALSE); |
|
30515
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3512 | |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3513 | #undef ADDR_CTRL |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3514 | #undef PORT_CTRL |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3515 | #undef PAGE_CTRL |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3516 | #undef USER_CTRL |
|
c82991b35371
Get rid of a few unnecessary strlen/g_snprintf's.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30444
diff
changeset
|
3517 | #undef PASSWD_CTRL |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3518 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3519 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3520 | /** |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3521 | * The arguments to this function are similar to printf. |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3522 | */ |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3523 | static void |
| 15884 | 3524 | purple_util_fetch_url_error(PurpleUtilFetchUrlData *gfud, const char *format, ...) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3525 | { |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3526 | gchar *error_message; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3527 | va_list args; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3528 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3529 | va_start(args, format); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3530 | error_message = g_strdup_vprintf(format, args); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3531 | va_end(args); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3532 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3533 | gfud->callback(gfud, gfud->user_data, NULL, 0, error_message); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3534 | g_free(error_message); |
| 15884 | 3535 | purple_util_fetch_url_cancel(gfud); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3536 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3537 | |
|
14465
2dacb84b7cb2
[gaim-migrate @ 17111]
Mark Doliner <markdoliner@pidgin.im>
parents:
14416
diff
changeset
|
3538 | static void url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message); |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3539 | static void ssl_url_fetch_connect_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3540 | static void ssl_url_fetch_error_cb(PurpleSslConnection *ssl_connection, PurpleSslErrorType error, gpointer data); |
|
14465
2dacb84b7cb2
[gaim-migrate @ 17111]
Mark Doliner <markdoliner@pidgin.im>
parents:
14416
diff
changeset
|
3541 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3542 | static gboolean |
|
23531
87a6c3eb9f47
Remove a unused variable
Mark Doliner <markdoliner@pidgin.im>
parents:
23507
diff
changeset
|
3543 | parse_redirect(const char *data, size_t data_len, |
| 15884 | 3544 | PurpleUtilFetchUrlData *gfud) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3545 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3546 | gchar *s; |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3547 | gchar *new_url, *temp_url, *end; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3548 | gboolean full; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3549 | int len; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3550 | |
|
21037
4861a7fc6708
When checking for redirects in purple_util_fetch_url(), look for
Mark Doliner <markdoliner@pidgin.im>
parents:
20992
diff
changeset
|
3551 | if ((s = g_strstr_len(data, data_len, "\nLocation: ")) == NULL) |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3552 | /* We're not being redirected */ |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3553 | return FALSE; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3554 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3555 | s += strlen("Location: "); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3556 | end = strchr(s, '\r'); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3557 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3558 | /* Just in case :) */ |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3559 | if (end == NULL) |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3560 | end = strchr(s, '\n'); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3561 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3562 | if (end == NULL) |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3563 | return FALSE; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3564 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3565 | len = end - s; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3566 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3567 | new_url = g_malloc(len + 1); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3568 | strncpy(new_url, s, len); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3569 | new_url[len] = '\0'; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3570 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3571 | full = gfud->full; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3572 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3573 | if (*new_url == '/' || g_strstr_len(new_url, len, "://") == NULL) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3574 | { |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3575 | temp_url = new_url; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3576 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3577 | new_url = g_strdup_printf("%s:%d%s", gfud->website.address, |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3578 | gfud->website.port, temp_url); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3579 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3580 | g_free(temp_url); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3581 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3582 | full = FALSE; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3583 | } |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3584 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3585 | purple_debug_info("util", "Redirecting to %s\n", new_url); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3586 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3587 | gfud->num_times_redirected++; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3588 | if (gfud->num_times_redirected >= 5) |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3589 | { |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3590 | purple_util_fetch_url_error(gfud, |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3591 | _("Could not open %s: Redirected too many times"), |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3592 | gfud->url); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3593 | return TRUE; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3594 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3595 | |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3596 | /* |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3597 | * Try again, with this new location. This code is somewhat |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3598 | * ugly, but we need to reuse the gfud because whoever called |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3599 | * us is holding a reference to it. |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3600 | */ |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3601 | g_free(gfud->url); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3602 | gfud->url = new_url; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3603 | gfud->full = full; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3604 | g_free(gfud->request); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3605 | gfud->request = NULL; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3606 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3607 | if (gfud->is_ssl) { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3608 | gfud->is_ssl = FALSE; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3609 | purple_ssl_close(gfud->ssl_connection); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3610 | gfud->ssl_connection = NULL; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3611 | } else { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3612 | purple_input_remove(gfud->inpa); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3613 | gfud->inpa = 0; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3614 | close(gfud->fd); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3615 | gfud->fd = -1; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3616 | } |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3617 | gfud->request_written = 0; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3618 | gfud->len = 0; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3619 | gfud->data_len = 0; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3620 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3621 | g_free(gfud->website.user); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3622 | g_free(gfud->website.passwd); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3623 | g_free(gfud->website.address); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3624 | g_free(gfud->website.page); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3625 | purple_url_parse(new_url, &gfud->website.address, &gfud->website.port, |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3626 | &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3627 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3628 | if (purple_strcasestr(new_url, "https://") != NULL) { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3629 | gfud->is_ssl = TRUE; |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3630 | gfud->ssl_connection = purple_ssl_connect(gfud->account, |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3631 | gfud->website.address, gfud->website.port, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3632 | ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3633 | } else { |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3634 | gfud->connect_data = purple_proxy_connect(NULL, gfud->account, |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3635 | gfud->website.address, gfud->website.port, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3636 | url_fetch_connect_cb, gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3637 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3638 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3639 | if (gfud->ssl_connection == NULL && gfud->connect_data == NULL) |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3640 | { |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3641 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3642 | gfud->website.address); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3643 | } |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3644 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3645 | return TRUE; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3646 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3647 | |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3648 | static const char * |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3649 | find_header_content(const char *data, size_t data_len, const char *header, size_t header_len) |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3650 | { |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3651 | const char *p = NULL; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3652 | |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3653 | if (header_len <= 0) |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3654 | header_len = strlen(header); |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3655 | |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3656 | /* Note: data is _not_ nul-terminated. */ |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3657 | if (data_len > header_len) { |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3658 | if (header[0] == '\n') |
|
28222
5643a627bc21
g_strncasecmp is deprecated. I thought I removed these already. Anyway, I
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28185
diff
changeset
|
3659 | p = (g_ascii_strncasecmp(data, header + 1, header_len - 1) == 0) ? data : NULL; |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3660 | if (!p) |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3661 | p = purple_strcasestr(data, header); |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3662 | if (p) |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3663 | p += header_len; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3664 | } |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3665 | |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3666 | /* If we can find the header at all, try to sscanf it. |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3667 | * Response headers should end with at least \r\n, so sscanf is safe, |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3668 | * if we make sure that there is indeed a \n in our header. |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3669 | */ |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3670 | if (p && g_strstr_len(p, data_len - (p - data), "\n")) { |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3671 | return p; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3672 | } |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3673 | |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3674 | return NULL; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3675 | } |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3676 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3677 | static size_t |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3678 | parse_content_len(const char *data, size_t data_len) |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3679 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3680 | size_t content_len = 0; |
| 9240 | 3681 | const char *p = NULL; |
| 3682 | ||
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3683 | p = find_header_content(data, data_len, "\nContent-Length: ", sizeof("\nContent-Length: ") - 1); |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3684 | if (p) { |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3685 | sscanf(p, "%" G_GSIZE_FORMAT, &content_len); |
|
22622
1ecb840b5101
Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents:
22488
diff
changeset
|
3686 | purple_debug_misc("util", "parsed %" G_GSIZE_FORMAT "\n", content_len); |
| 9240 | 3687 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3688 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3689 | return content_len; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3690 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3691 | |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3692 | static gboolean |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3693 | content_is_chunked(const char *data, size_t data_len) |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3694 | { |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3695 | const char *p = find_header_content(data, data_len, "\nTransfer-Encoding: ", sizeof("\nTransfer-Encoding: ") - 1); |
|
28222
5643a627bc21
g_strncasecmp is deprecated. I thought I removed these already. Anyway, I
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
28185
diff
changeset
|
3696 | if (p && g_ascii_strncasecmp(p, "chunked", 7) == 0) |
|
27478
59c53b8e5c3a
Remove just a tad bit of indirection
Mark Doliner <markdoliner@pidgin.im>
parents:
27477
diff
changeset
|
3697 | return TRUE; |
|
59c53b8e5c3a
Remove just a tad bit of indirection
Mark Doliner <markdoliner@pidgin.im>
parents:
27477
diff
changeset
|
3698 | |
|
59c53b8e5c3a
Remove just a tad bit of indirection
Mark Doliner <markdoliner@pidgin.im>
parents:
27477
diff
changeset
|
3699 | return FALSE; |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3700 | } |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3701 | |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3702 | /* Process in-place */ |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3703 | static void |
|
27477
0eaf20efffa7
Use unsigned lengths here and use %zu when reading into the gsize var
Mark Doliner <markdoliner@pidgin.im>
parents:
27465
diff
changeset
|
3704 | process_chunked_data(char *data, gsize *len) |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3705 | { |
|
27477
0eaf20efffa7
Use unsigned lengths here and use %zu when reading into the gsize var
Mark Doliner <markdoliner@pidgin.im>
parents:
27465
diff
changeset
|
3706 | gsize sz; |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3707 | gsize newlen = 0; |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3708 | char *p = data; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3709 | char *s = data; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3710 | |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3711 | while (*s) { |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3712 | /* Read the size of this chunk */ |
|
27630
c831a8c52f55
Hey Stu, it should be safe to combine this check, right? It'll make us
Mark Doliner <markdoliner@pidgin.im>
parents:
27543
diff
changeset
|
3713 | if (sscanf(s, "%" G_GSIZE_MODIFIER "x", &sz) != 1) |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3714 | { |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3715 | purple_debug_error("util", "Error processing chunked data: " |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3716 | "Expected data length, found: %s\n", s); |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3717 | break; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3718 | } |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3719 | if (sz == 0) { |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3720 | /* We've reached the last chunk */ |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3721 | /* |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3722 | * TODO: The spec allows "footers" to follow the last chunk. |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3723 | * If there is more data after this line then we should |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3724 | * treat it like a header. |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3725 | */ |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3726 | break; |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3727 | } |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3728 | |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3729 | /* Advance to the start of the data */ |
|
27519
aba49eea4417
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
27516
diff
changeset
|
3730 | s = strstr(s, "\r\n"); |
|
aba49eea4417
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
27516
diff
changeset
|
3731 | if (s == NULL) |
|
aba49eea4417
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
27516
diff
changeset
|
3732 | break; |
|
aba49eea4417
Apparently there might be stuff after the semicolon before the \r\n so just
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
27516
diff
changeset
|
3733 | s += 2; |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3734 | |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3735 | if (s + sz > data + *len) { |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3736 | purple_debug_error("util", "Error processing chunked data: " |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3737 | "Chunk size %" G_GSIZE_FORMAT " bytes was longer " |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3738 | "than the data remaining in the buffer (%" |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3739 | G_GSIZE_FORMAT " bytes)\n", sz, data + *len - s); |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3740 | } |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3741 | |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3742 | /* Move all data overtop of the chunk length that we read in earlier */ |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3743 | g_memmove(p, s, sz); |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3744 | p += sz; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3745 | s += sz; |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3746 | newlen += sz; |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3747 | if (*s != '\r' && *(s + 1) != '\n') { |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3748 | purple_debug_error("util", "Error processing chunked data: " |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3749 | "Expected \\r\\n, found: %s\n", s); |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3750 | break; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3751 | } |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3752 | s += 2; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3753 | } |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3754 | |
|
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3755 | /* NULL terminate the data */ |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3756 | *p = 0; |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3757 | |
|
27479
ebe3fb4a3bc2
A few changes to our code to handle chunked transfer-encodings (technically
Mark Doliner <markdoliner@pidgin.im>
parents:
27478
diff
changeset
|
3758 | *len = newlen; |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3759 | } |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3760 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3761 | static void |
| 15884 | 3762 | url_fetch_recv_cb(gpointer url_data, gint source, PurpleInputCondition cond) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3763 | { |
| 15884 | 3764 | PurpleUtilFetchUrlData *gfud = url_data; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3765 | int len; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3766 | char buf[4096]; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3767 | char *data_cursor; |
| 9240 | 3768 | gboolean got_eof = FALSE; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3769 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3770 | /* |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3771 | * Read data in a loop until we can't read any more! This is a |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3772 | * little confusing because we read using a different function |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3773 | * depending on whether the socket is ssl or cleartext. |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3774 | */ |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3775 | while ((gfud->is_ssl && ((len = purple_ssl_read(gfud->ssl_connection, buf, sizeof(buf))) > 0)) || |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3776 | (!gfud->is_ssl && (len = read(source, buf, sizeof(buf))) > 0)) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3777 | { |
|
24011
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
3778 | if(gfud->max_len != -1 && (gfud->len + len) > gfud->max_len) { |
|
24274
8fb64dfd0464
Fix a TODO and mark a string translatable now that we're not string frozen.
Daniel Atallah <datallah@pidgin.im>
parents:
24186
diff
changeset
|
3779 | purple_util_fetch_url_error(gfud, _("Error reading from %s: response too long (%d bytes limit)"), |
|
24011
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
3780 | gfud->website.address, gfud->max_len); |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
3781 | return; |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
3782 | } |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
3783 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3784 | /* If we've filled up our buffer, make it bigger */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3785 | if((gfud->len + len) >= gfud->data_len) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3786 | while((gfud->len + len) >= gfud->data_len) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3787 | gfud->data_len += sizeof(buf); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3788 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3789 | gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3790 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3791 | |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3792 | data_cursor = gfud->webdata + gfud->len; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3793 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3794 | gfud->len += len; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3795 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3796 | memcpy(data_cursor, buf, len); |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3797 | |
|
11407
3f89b9b59ba9
[gaim-migrate @ 13642]
Federico G. Schwindt <fgsch@lodoss.net>
parents:
11361
diff
changeset
|
3798 | gfud->webdata[gfud->len] = '\0'; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3799 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3800 | if(!gfud->got_headers) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3801 | char *tmp; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3802 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3803 | /* See if we've reached the end of the headers yet */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3804 | if((tmp = strstr(gfud->webdata, "\r\n\r\n"))) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3805 | char * new_data; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3806 | guint header_len = (tmp + 4 - gfud->webdata); |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3807 | size_t content_len; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3808 | |
| 15884 | 3809 | purple_debug_misc("util", "Response headers: '%.*s'\n", |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3810 | header_len, gfud->webdata); |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3811 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3812 | /* See if we can find a redirect. */ |
|
23531
87a6c3eb9f47
Remove a unused variable
Mark Doliner <markdoliner@pidgin.im>
parents:
23507
diff
changeset
|
3813 | if(parse_redirect(gfud->webdata, header_len, gfud)) |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3814 | return; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3815 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3816 | gfud->got_headers = TRUE; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3817 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3818 | /* No redirect. See if we can find a content length. */ |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3819 | content_len = parse_content_len(gfud->webdata, header_len); |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3820 | gfud->chunked = content_is_chunked(gfud->webdata, header_len); |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3821 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3822 | if(content_len == 0) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3823 | /* We'll stick with an initial 8192 */ |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3824 | content_len = 8192; |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3825 | } else { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3826 | gfud->has_explicit_data_len = TRUE; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3827 | } |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3828 | |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3829 | |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3830 | /* If we're returning the headers too, we don't need to clean them out */ |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3831 | if(gfud->include_headers) { |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3832 | gfud->data_len = content_len + header_len; |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3833 | gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3834 | } else { |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3835 | size_t body_len = 0; |
|
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3836 | |
|
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3837 | if(gfud->len > (header_len + 1)) |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3838 | body_len = (gfud->len - header_len); |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3839 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3840 | content_len = MAX(content_len, body_len); |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3841 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3842 | new_data = g_try_malloc(content_len); |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3843 | if(new_data == NULL) { |
| 15884 | 3844 | purple_debug_error("util", |
|
22622
1ecb840b5101
Fix a bunch of compiler warnings caused by my addition of G_GNUC_PRINTF()
Mark Doliner <markdoliner@pidgin.im>
parents:
22488
diff
changeset
|
3845 | "Failed to allocate %" G_GSIZE_FORMAT " bytes: %s\n", |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
3846 | content_len, g_strerror(errno)); |
| 15884 | 3847 | purple_util_fetch_url_error(gfud, |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3848 | _("Unable to allocate enough memory to hold " |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3849 | "the contents from %s. The web server may " |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3850 | "be trying something malicious."), |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3851 | gfud->website.address); |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3852 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3853 | return; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3854 | } |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3855 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3856 | /* We may have read part of the body when reading the headers, don't lose it */ |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3857 | if(body_len > 0) { |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3858 | tmp += 4; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3859 | memcpy(new_data, tmp, body_len); |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3860 | } |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3861 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3862 | /* Out with the old... */ |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3863 | g_free(gfud->webdata); |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3864 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3865 | /* In with the new. */ |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3866 | gfud->len = body_len; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3867 | gfud->data_len = content_len; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3868 | gfud->webdata = new_data; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3869 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3870 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3871 | } |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3872 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3873 | if(gfud->has_explicit_data_len && gfud->len >= gfud->data_len) { |
| 9240 | 3874 | got_eof = TRUE; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3875 | break; |
| 9240 | 3876 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3877 | } |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3878 | |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3879 | if(len < 0) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3880 | if(errno == EAGAIN) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3881 | return; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3882 | } else { |
| 15884 | 3883 | purple_util_fetch_url_error(gfud, _("Error reading from %s: %s"), |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
3884 | gfud->website.address, g_strerror(errno)); |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3885 | return; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3886 | } |
| 9240 | 3887 | } |
| 3888 | ||
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3889 | if((len == 0) || got_eof) { |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3890 | gfud->webdata = g_realloc(gfud->webdata, gfud->len + 1); |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3891 | gfud->webdata[gfud->len] = '\0'; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3892 | |
|
27462
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3893 | if (!gfud->include_headers && gfud->chunked) { |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3894 | /* Process only if we don't want the headers. */ |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3895 | process_chunked_data(gfud->webdata, &gfud->len); |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3896 | } |
|
f0069b4bddb7
Process the data correctly if the server sends chunked data.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
27361
diff
changeset
|
3897 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3898 | gfud->callback(gfud, gfud->user_data, gfud->webdata, gfud->len, NULL); |
| 15884 | 3899 | purple_util_fetch_url_cancel(gfud); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3900 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3901 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3902 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3903 | static void ssl_url_fetch_recv_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3904 | { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3905 | url_fetch_recv_cb(data, -1, cond); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3906 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3907 | |
|
27344
608181252ce8
Allow doxygen to pick up the comment for this function. It's
Mark Doliner <markdoliner@pidgin.im>
parents:
27243
diff
changeset
|
3908 | /** |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3909 | * This function is called when the socket is available to be written |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3910 | * to. |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3911 | * |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3912 | * @param source The file descriptor that can be written to. This can |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3913 | * be an http connection or it can be the SSL connection of an |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3914 | * https request. So be careful what you use it for! If it's |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3915 | * an https request then use purple_ssl_write() instead of |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3916 | * writing to it directly. |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3917 | */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3918 | static void |
| 15884 | 3919 | url_fetch_send_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3920 | { |
| 15884 | 3921 | PurpleUtilFetchUrlData *gfud; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3922 | int len, total_len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3923 | |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3924 | gfud = data; |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3925 | |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3926 | if (gfud->request == NULL) { |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3927 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3928 | PurpleProxyInfo *gpi = purple_proxy_get_setup(gfud->account); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3929 | GString *request_str = g_string_new(NULL); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3930 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3931 | g_string_append_printf(request_str, "GET %s%s HTTP/%s\r\n" |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3932 | "Connection: close\r\n", |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3933 | (gfud->full ? "" : "/"), |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3934 | (gfud->full ? (gfud->url ? gfud->url : "") : (gfud->website.page ? gfud->website.page : "")), |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3935 | (gfud->http11 ? "1.1" : "1.0")); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3936 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3937 | if (gfud->user_agent) |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3938 | g_string_append_printf(request_str, "User-Agent: %s\r\n", gfud->user_agent); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3939 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3940 | /* Host header is not forbidden in HTTP/1.0 requests, and HTTP/1.1 |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3941 | * clients must know how to handle the "chunked" transfer encoding. |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3942 | * Purple doesn't know how to handle "chunked", so should always send |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3943 | * the Host header regardless, to get around some observed problems |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3944 | */ |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3945 | g_string_append_printf(request_str, "Accept: */*\r\n" |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3946 | "Host: %s\r\n", |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3947 | (gfud->website.address ? gfud->website.address : "")); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3948 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3949 | if (purple_proxy_info_get_username(gpi) != NULL |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3950 | && (purple_proxy_info_get_type(gpi) == PURPLE_PROXY_USE_ENVVAR |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3951 | || purple_proxy_info_get_type(gpi) == PURPLE_PROXY_HTTP)) { |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3952 | /* This chunk of code was copied from proxy.c http_start_connect_tunneling() |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3953 | * This is really a temporary hack - we need a more complete proxy handling solution, |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3954 | * so I didn't think it was worthwhile to refactor for reuse |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3955 | */ |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3956 | char *t1, *t2, *ntlm_type1; |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3957 | char hostname[256]; |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3958 | int ret; |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3959 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3960 | ret = gethostname(hostname, sizeof(hostname)); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3961 | hostname[sizeof(hostname) - 1] = '\0'; |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3962 | if (ret < 0 || hostname[0] == '\0') { |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3963 | purple_debug_warning("util", "proxy - gethostname() failed -- is your hostname set?"); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3964 | strcpy(hostname, "localhost"); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3965 | } |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3966 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3967 | t1 = g_strdup_printf("%s:%s", |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3968 | purple_proxy_info_get_username(gpi), |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3969 | purple_proxy_info_get_password(gpi) ? |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3970 | purple_proxy_info_get_password(gpi) : ""); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3971 | t2 = purple_base64_encode((const guchar *)t1, strlen(t1)); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3972 | g_free(t1); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3973 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3974 | ntlm_type1 = purple_ntlm_gen_type1(hostname, ""); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3975 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3976 | g_string_append_printf(request_str, |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3977 | "Proxy-Authorization: Basic %s\r\n" |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3978 | "Proxy-Authorization: NTLM %s\r\n" |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3979 | "Proxy-Connection: Keep-Alive\r\n", |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3980 | t2, ntlm_type1); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3981 | g_free(ntlm_type1); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3982 | g_free(t2); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3983 | } |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3984 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3985 | g_string_append(request_str, "\r\n"); |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3986 | |
|
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
3987 | gfud->request = g_string_free(request_str, FALSE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3988 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3989 | |
|
27543
96889def856c
Convert all uses of PURPLE_UNSAFE_DEBUG to the new API I added.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27528
diff
changeset
|
3990 | if(purple_debug_is_unsafe()) |
|
25763
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
3991 | purple_debug_misc("util", "Request: '%s'\n", gfud->request); |
|
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
3992 | else |
|
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
3993 | purple_debug_misc("util", "request constructed\n"); |
| 15884 | 3994 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3995 | total_len = strlen(gfud->request); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3996 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3997 | if (gfud->is_ssl) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3998 | len = purple_ssl_write(gfud->ssl_connection, gfud->request + gfud->request_written, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
3999 | total_len - gfud->request_written); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4000 | else |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4001 | len = write(gfud->fd, gfud->request + gfud->request_written, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4002 | total_len - gfud->request_written); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4003 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4004 | if (len < 0 && errno == EAGAIN) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4005 | return; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4006 | else if (len < 0) { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4007 | purple_util_fetch_url_error(gfud, _("Error writing to %s: %s"), |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4008 | gfud->website.address, g_strerror(errno)); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4009 | return; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4010 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4011 | gfud->request_written += len; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4012 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4013 | if (gfud->request_written < total_len) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4014 | return; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4015 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4016 | /* We're done writing our request, now start reading the response */ |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4017 | if (gfud->is_ssl) { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4018 | purple_input_remove(gfud->inpa); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4019 | gfud->inpa = 0; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4020 | purple_ssl_input_add(gfud->ssl_connection, ssl_url_fetch_recv_cb, gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4021 | } else { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4022 | purple_input_remove(gfud->inpa); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4023 | gfud->inpa = purple_input_add(gfud->fd, PURPLE_INPUT_READ, url_fetch_recv_cb, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4024 | gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4025 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4026 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4027 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4028 | static void |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4029 | url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4030 | { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4031 | PurpleUtilFetchUrlData *gfud; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4032 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4033 | gfud = url_data; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4034 | gfud->connect_data = NULL; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4035 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4036 | if (source == -1) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4037 | { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4038 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4039 | (gfud->website.address ? gfud->website.address : ""), error_message); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4040 | return; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4041 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4042 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4043 | gfud->fd = source; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4044 | |
| 15884 | 4045 | gfud->inpa = purple_input_add(source, PURPLE_INPUT_WRITE, |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
4046 | url_fetch_send_cb, gfud); |
| 15884 | 4047 | url_fetch_send_cb(gfud, source, PURPLE_INPUT_WRITE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4048 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4049 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4050 | static void ssl_url_fetch_connect_cb(gpointer data, PurpleSslConnection *ssl_connection, PurpleInputCondition cond) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4051 | { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4052 | PurpleUtilFetchUrlData *gfud; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4053 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4054 | gfud = data; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4055 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4056 | gfud->inpa = purple_input_add(ssl_connection->fd, PURPLE_INPUT_WRITE, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4057 | url_fetch_send_cb, gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4058 | url_fetch_send_cb(gfud, ssl_connection->fd, PURPLE_INPUT_WRITE); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4059 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4060 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4061 | static void ssl_url_fetch_error_cb(PurpleSslConnection *ssl_connection, PurpleSslErrorType error, gpointer data) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4062 | { |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4063 | PurpleUtilFetchUrlData *gfud; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4064 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4065 | gfud = data; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4066 | gfud->ssl_connection = NULL; |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4067 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4068 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4069 | (gfud->website.address ? gfud->website.address : ""), |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4070 | purple_ssl_strerror(error)); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4071 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4072 | |
| 15884 | 4073 | PurpleUtilFetchUrlData * |
| 4074 | purple_util_fetch_url_request(const char *url, gboolean full, | |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
4075 | const char *user_agent, gboolean http11, |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
4076 | const char *request, gboolean include_headers, |
| 15884 | 4077 | PurpleUtilFetchUrlCallback callback, void *user_data) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4078 | { |
|
27192
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4079 | return purple_util_fetch_url_request_len_with_account(NULL, url, full, |
|
24011
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4080 | user_agent, http11, |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4081 | request, include_headers, -1, |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4082 | callback, user_data); |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4083 | } |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4084 | |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4085 | PurpleUtilFetchUrlData * |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4086 | purple_util_fetch_url_request_len(const char *url, gboolean full, |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4087 | const char *user_agent, gboolean http11, |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4088 | const char *request, gboolean include_headers, gssize max_len, |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4089 | PurpleUtilFetchUrlCallback callback, void *user_data) |
|
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4090 | { |
|
27192
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4091 | return purple_util_fetch_url_request_len_with_account(NULL, url, full, |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4092 | user_agent, http11, request, include_headers, max_len, callback, |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4093 | user_data); |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4094 | } |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4095 | |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4096 | PurpleUtilFetchUrlData * |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4097 | purple_util_fetch_url_request_len_with_account(PurpleAccount *account, |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4098 | const char *url, gboolean full, const char *user_agent, gboolean http11, |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4099 | const char *request, gboolean include_headers, gssize max_len, |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4100 | PurpleUtilFetchUrlCallback callback, void *user_data) |
|
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4101 | { |
| 15884 | 4102 | PurpleUtilFetchUrlData *gfud; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4103 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4104 | g_return_val_if_fail(url != NULL, NULL); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4105 | g_return_val_if_fail(callback != NULL, NULL); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4106 | |
|
27543
96889def856c
Convert all uses of PURPLE_UNSAFE_DEBUG to the new API I added.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27528
diff
changeset
|
4107 | if(purple_debug_is_unsafe()) |
|
25763
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
4108 | purple_debug_info("util", |
|
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
4109 | "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", |
|
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
4110 | url, full, user_agent?user_agent:"(null)", http11); |
|
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
4111 | else |
|
e9f0ad7afa7b
*** Plucked rev c1ede5faf776dc1cc966dabb42c1ef0dbaea31db (rekkanoryo@pidgin.im):
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
25298
diff
changeset
|
4112 | purple_debug_info("util", "requesting to fetch a URL\n"); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4113 | |
| 15884 | 4114 | gfud = g_new0(PurpleUtilFetchUrlData, 1); |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4115 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4116 | gfud->callback = callback; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4117 | gfud->user_data = user_data; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
4118 | gfud->url = g_strdup(url); |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
4119 | gfud->user_agent = g_strdup(user_agent); |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
4120 | gfud->http11 = http11; |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
4121 | gfud->full = full; |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
4122 | gfud->request = g_strdup(request); |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
4123 | gfud->include_headers = include_headers; |
|
20661
f7678627901e
Initialize file-descriptors to -1.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20656
diff
changeset
|
4124 | gfud->fd = -1; |
|
24011
0cff24bf7dba
Add temporary purple_util_fetch_url_request_len and purple_util_fetch_url_len
Daniel Atallah <datallah@pidgin.im>
parents:
23995
diff
changeset
|
4125 | gfud->max_len = max_len; |
|
30437
e2de518ff723
Attempt to improve handling of HTTP requests on port 80 when there is a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
30414
diff
changeset
|
4126 | gfud->account = account; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4127 | |
| 15884 | 4128 | purple_url_parse(url, &gfud->website.address, &gfud->website.port, |
| 9227 | 4129 | &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4130 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4131 | if (purple_strcasestr(url, "https://") != NULL) { |
|
26470
7d709a8580b3
Add a friendly error message if something uses
Mark Doliner <markdoliner@pidgin.im>
parents:
26394
diff
changeset
|
4132 | if (!purple_ssl_is_supported()) { |
|
7d709a8580b3
Add a friendly error message if something uses
Mark Doliner <markdoliner@pidgin.im>
parents:
26394
diff
changeset
|
4133 | purple_util_fetch_url_error(gfud, |
|
27632
0da289638ff4
Change strings in libpurple/protocols/jabber/auth.c and util.c a little bit
Mark Doliner <markdoliner@pidgin.im>
parents:
27630
diff
changeset
|
4134 | _("Unable to connect to %s: %s"), |
|
0da289638ff4
Change strings in libpurple/protocols/jabber/auth.c and util.c a little bit
Mark Doliner <markdoliner@pidgin.im>
parents:
27630
diff
changeset
|
4135 | gfud->website.address, |
|
0da289638ff4
Change strings in libpurple/protocols/jabber/auth.c and util.c a little bit
Mark Doliner <markdoliner@pidgin.im>
parents:
27630
diff
changeset
|
4136 | _("Server requires TLS/SSL, but no TLS/SSL support was found.")); |
|
26470
7d709a8580b3
Add a friendly error message if something uses
Mark Doliner <markdoliner@pidgin.im>
parents:
26394
diff
changeset
|
4137 | return NULL; |
|
7d709a8580b3
Add a friendly error message if something uses
Mark Doliner <markdoliner@pidgin.im>
parents:
26394
diff
changeset
|
4138 | } |
|
7d709a8580b3
Add a friendly error message if something uses
Mark Doliner <markdoliner@pidgin.im>
parents:
26394
diff
changeset
|
4139 | |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4140 | gfud->is_ssl = TRUE; |
|
27192
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4141 | gfud->ssl_connection = purple_ssl_connect(account, |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4142 | gfud->website.address, gfud->website.port, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4143 | ssl_url_fetch_connect_cb, ssl_url_fetch_error_cb, gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4144 | } else { |
|
27192
de49f0e36f18
Add yet another URL fetching function. This one takes an account as a
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
27128
diff
changeset
|
4145 | gfud->connect_data = purple_proxy_connect(NULL, account, |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4146 | gfud->website.address, gfud->website.port, |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4147 | url_fetch_connect_cb, gfud); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4148 | } |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4149 | |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4150 | if (gfud->ssl_connection == NULL && gfud->connect_data == NULL) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14144
diff
changeset
|
4151 | { |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4152 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4153 | gfud->website.address); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4154 | return NULL; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4155 | } |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4156 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4157 | return gfud; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4158 | } |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4159 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4160 | void |
| 15884 | 4161 | purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *gfud) |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4162 | { |
|
24857
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4163 | if (gfud->ssl_connection != NULL) |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4164 | purple_ssl_close(gfud->ssl_connection); |
|
c3c6b48534d8
Make our purple_util_fetch_url_request() function able to handle
Mark Doliner <markdoliner@pidgin.im>
parents:
24647
diff
changeset
|
4165 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4166 | if (gfud->connect_data != NULL) |
| 15884 | 4167 | purple_proxy_connect_cancel(gfud->connect_data); |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4168 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4169 | if (gfud->inpa > 0) |
| 15884 | 4170 | purple_input_remove(gfud->inpa); |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4171 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4172 | if (gfud->fd >= 0) |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4173 | close(gfud->fd); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4174 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4175 | g_free(gfud->website.user); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4176 | g_free(gfud->website.passwd); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4177 | g_free(gfud->website.address); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4178 | g_free(gfud->website.page); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4179 | g_free(gfud->url); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4180 | g_free(gfud->user_agent); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4181 | g_free(gfud->request); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4182 | g_free(gfud->webdata); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4183 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
4184 | g_free(gfud); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
4185 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4186 | |
| 7162 | 4187 | const char * |
| 15884 | 4188 | purple_url_decode(const char *str) |
| 7134 | 4189 | { |
| 4190 | static char buf[BUF_LEN]; | |
| 7631 | 4191 | guint i, j = 0; |
| 7134 | 4192 | char *bum; |
|
9804
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4193 | char hex[3]; |
| 7134 | 4194 | |
| 4195 | g_return_val_if_fail(str != NULL, NULL); | |
| 4196 | ||
|
9804
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4197 | /* |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4198 | * XXX - This check could be removed and buf could be made |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4199 | * dynamically allocated, but this is easier. |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4200 | */ |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4201 | if (strlen(str) >= BUF_LEN) |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4202 | return NULL; |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4203 | |
| 7134 | 4204 | for (i = 0; i < strlen(str); i++) { |
| 4205 | ||
| 4206 | if (str[i] != '%') | |
| 4207 | buf[j++] = str[i]; | |
| 4208 | else { | |
| 4209 | strncpy(hex, str + ++i, 2); | |
| 4210 | hex[2] = '\0'; | |
| 4211 | ||
| 4212 | /* i is pointing to the start of the number */ | |
| 4213 | i++; | |
| 4214 | ||
| 4215 | /* | |
| 4216 | * Now it's at the end and at the start of the for loop | |
| 4217 | * will be at the next character. | |
| 4218 | */ | |
| 4219 | buf[j++] = strtol(hex, NULL, 16); | |
| 4220 | } | |
| 4221 | } | |
| 4222 | ||
| 4223 | buf[j] = '\0'; | |
| 4224 | ||
| 4225 | if (!g_utf8_validate(buf, -1, (const char **)&bum)) | |
| 4226 | *bum = '\0'; | |
| 4227 | ||
| 4228 | return buf; | |
| 4229 | } | |
| 4230 | ||
| 7162 | 4231 | const char * |
| 15884 | 4232 | purple_url_encode(const char *str) |
| 7134 | 4233 | { |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4234 | const char *iter; |
| 7134 | 4235 | static char buf[BUF_LEN]; |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4236 | char utf_char[6]; |
| 7631 | 4237 | guint i, j = 0; |
| 7134 | 4238 | |
| 4239 | g_return_val_if_fail(str != NULL, NULL); | |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4240 | g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4241 | |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4242 | iter = str; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4243 | for (; *iter && j < (BUF_LEN - 1) ; iter = g_utf8_next_char(iter)) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4244 | gunichar c = g_utf8_get_char(iter); |
|
10800
00a2c404c1dc
[gaim-migrate @ 12446]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10732
diff
changeset
|
4245 | /* If the character is an ASCII character and is alphanumeric |
|
00a2c404c1dc
[gaim-migrate @ 12446]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10732
diff
changeset
|
4246 | * no need to escape */ |
|
28538
fb879aa298ee
Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <markdoliner@pidgin.im>
parents:
28438
diff
changeset
|
4247 | if (c < 128 && (isalnum(c) || c == '-' || c == '.' || c == '_' || c == '~')) { |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4248 | buf[j++] = c; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4249 | } else { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4250 | int bytes = g_unichar_to_utf8(c, utf_char); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4251 | for (i = 0; i < bytes; i++) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4252 | if (j > (BUF_LEN - 4)) |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4253 | break; |
|
28538
fb879aa298ee
Change purple_url_encode() to not encode . _ - ~ because it's not
Mark Doliner <markdoliner@pidgin.im>
parents:
28438
diff
changeset
|
4254 | sprintf(buf + j, "%%%02X", utf_char[i] & 0xff); |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4255 | j += 3; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4256 | } |
| 7134 | 4257 | } |
| 4258 | } | |
| 4259 | ||
| 4260 | buf[j] = '\0'; | |
| 4261 | ||
| 4262 | return buf; | |
| 4263 | } | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4264 | |
| 9054 | 4265 | /* Originally lifted from |
| 4266 | * http://www.oreillynet.com/pub/a/network/excerpt/spcookbook_chap03/index3.html | |
| 4267 | * ... and slightly modified to be a bit more rfc822 compliant | |
| 4268 | * ... and modified a bit more to make domain checking rfc1035 compliant | |
| 4269 | * with the exception permitted in rfc1101 for domains to start with digit | |
| 4270 | * but not completely checking to avoid conflicts with IP addresses | |
| 4271 | */ | |
| 9045 | 4272 | gboolean |
| 15884 | 4273 | purple_email_is_valid(const char *address) |
| 9045 | 4274 | { |
| 4275 | const char *c, *domain; | |
| 4276 | static char *rfc822_specials = "()<>@,;:\\\"[]"; | |
| 4277 | ||
| 24645 | 4278 | g_return_val_if_fail(address != NULL, FALSE); |
| 4279 | ||
|
30444
d871c3fd6637
Catch some more invalid email addresses, thanks to Mark for additional
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30437
diff
changeset
|
4280 | if (*address == '.') return FALSE; |
|
d871c3fd6637
Catch some more invalid email addresses, thanks to Mark for additional
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30437
diff
changeset
|
4281 | |
| 9054 | 4282 | /* first we validate the name portion (name@domain) (rfc822)*/ |
| 9045 | 4283 | for (c = address; *c; c++) { |
| 4284 | if (*c == '\"' && (c == address || *(c - 1) == '.' || *(c - 1) == '\"')) { | |
| 4285 | while (*++c) { | |
| 9054 | 4286 | if (*c == '\\') { |
| 4287 | if (*c++ && *c < 127 && *c != '\n' && *c != '\r') continue; | |
| 4288 | else return FALSE; | |
| 4289 | } | |
| 9045 | 4290 | if (*c == '\"') break; |
| 9054 | 4291 | if (*c < ' ' || *c >= 127) return FALSE; |
| 9045 | 4292 | } |
| 4293 | if (!*c++) return FALSE; | |
| 4294 | if (*c == '@') break; | |
| 4295 | if (*c != '.') return FALSE; | |
| 4296 | continue; | |
| 4297 | } | |
| 4298 | if (*c == '@') break; | |
| 4299 | if (*c <= ' ' || *c >= 127) return FALSE; | |
| 4300 | if (strchr(rfc822_specials, *c)) return FALSE; | |
| 4301 | } | |
|
18871
078df6ae587a
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <markdoliner@pidgin.im>
parents:
18813
diff
changeset
|
4302 | |
|
078df6ae587a
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <markdoliner@pidgin.im>
parents:
18813
diff
changeset
|
4303 | /* It's obviously not an email address if we didn't find an '@' above */ |
|
078df6ae587a
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <markdoliner@pidgin.im>
parents:
18813
diff
changeset
|
4304 | if (*c == '\0') return FALSE; |
|
078df6ae587a
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <markdoliner@pidgin.im>
parents:
18813
diff
changeset
|
4305 | |
| 9054 | 4306 | /* strictly we should return false if (*(c - 1) == '.') too, but I think |
| 4307 | * we should permit user.@domain type addresses - they do work :) */ | |
| 4308 | if (c == address) return FALSE; | |
| 4309 | ||
| 4310 | /* next we validate the domain portion (name@domain) (rfc1035 & rfc1011) */ | |
| 9045 | 4311 | if (!*(domain = ++c)) return FALSE; |
| 4312 | do { | |
| 9054 | 4313 | if (*c == '.' && (c == domain || *(c - 1) == '.' || *(c - 1) == '-')) |
| 4314 | return FALSE; | |
|
30444
d871c3fd6637
Catch some more invalid email addresses, thanks to Mark for additional
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30437
diff
changeset
|
4315 | if (*c == '-' && (*(c - 1) == '.' || *(c - 1) == '@')) return FALSE; |
| 9054 | 4316 | if ((*c < '0' && *c != '-' && *c != '.') || (*c > '9' && *c < 'A') || |
| 4317 | (*c > 'Z' && *c < 'a') || (*c > 'z')) return FALSE; | |
| 9045 | 4318 | } while (*++c); |
| 4319 | ||
| 9054 | 4320 | if (*(c - 1) == '-') return FALSE; |
| 4321 | ||
| 4322 | return ((c - domain) > 3 ? TRUE : FALSE); | |
| 9045 | 4323 | } |
| 4324 | ||
|
22468
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4325 | gboolean |
|
27732
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4326 | purple_ipv4_address_is_valid(const char *ip) |
|
22468
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4327 | { |
|
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4328 | int c, o1, o2, o3, o4; |
|
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4329 | char end; |
| 24643 | 4330 | |
| 4331 | g_return_val_if_fail(ip != NULL, FALSE); | |
| 4332 | ||
|
22468
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4333 | c = sscanf(ip, "%d.%d.%d.%d%c", &o1, &o2, &o3, &o4, &end); |
|
22488
ef0f082ab476
Fixes an error detected by valgrind:
Ka-Hing Cheung <khc@pidgin.im>
parents:
22468
diff
changeset
|
4334 | if (c != 4 || o1 < 0 || o1 > 255 || o2 < 0 || o2 > 255 || o3 < 0 || o3 > 255 || o4 < 0 || o4 > 255) |
|
22468
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4335 | return FALSE; |
|
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4336 | return TRUE; |
|
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4337 | } |
|
c0f99a22627f
Use connect server as FQDN for SASL auth except when it is an IP address.
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
22313
diff
changeset
|
4338 | |
|
27727
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4339 | gboolean |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4340 | purple_ipv6_address_is_valid(const gchar *ip) |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4341 | { |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4342 | const gchar *c; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4343 | gboolean double_colon = FALSE; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4344 | gint chunks = 1; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4345 | gint in = 0; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4346 | |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4347 | g_return_val_if_fail(ip != NULL, FALSE); |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4348 | |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4349 | if (*ip == '\0') |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4350 | return FALSE; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4351 | |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4352 | for (c = ip; *c; ++c) { |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4353 | if ((*c >= '0' && *c <= '9') || |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4354 | (*c >= 'a' && *c <= 'f') || |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4355 | (*c >= 'A' && *c <= 'F')) { |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4356 | if (++in > 4) |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4357 | /* Only four hex digits per chunk */ |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4358 | return FALSE; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4359 | continue; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4360 | } else if (*c == ':') { |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4361 | /* The start of a new chunk */ |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4362 | ++chunks; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4363 | in = 0; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4364 | if (*(c + 1) == ':') { |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4365 | /* |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4366 | * '::' indicates a consecutive series of chunks full |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4367 | * of zeroes. There can be only one of these per address. |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4368 | */ |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4369 | if (double_colon) |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4370 | return FALSE; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4371 | double_colon = TRUE; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4372 | } |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4373 | } else |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4374 | return FALSE; |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4375 | } |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4376 | |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4377 | /* |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4378 | * Either we saw a '::' and there were fewer than 8 chunks -or- |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4379 | * we didn't see a '::' and saw exactly 8 chunks. |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4380 | */ |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4381 | return (double_colon && chunks < 8) || (!double_colon && chunks == 8); |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4382 | } |
|
0c888674bbfc
Add purple_ipv6_address_is_valid; guess what it does?
Paul Aurich <darkrain42@pidgin.im>
parents:
27707
diff
changeset
|
4383 | |
|
27732
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4384 | /* TODO 3.0.0: Add ipv6 check, too */ |
|
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4385 | gboolean |
|
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4386 | purple_ip_address_is_valid(const char *ip) |
|
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4387 | { |
|
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4388 | return purple_ipv4_address_is_valid(ip); |
|
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4389 | } |
|
3df98cc829ac
Added the function in util.h, forgot it here.
Paul Aurich <darkrain42@pidgin.im>
parents:
27727
diff
changeset
|
4390 | |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4391 | /* Stolen from gnome_uri_list_extract_uris */ |
|
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4392 | GList * |
| 15884 | 4393 | purple_uri_list_extract_uris(const gchar *uri_list) |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4394 | { |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4395 | const gchar *p, *q; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4396 | gchar *retval; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4397 | GList *result = NULL; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4398 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4399 | g_return_val_if_fail (uri_list != NULL, NULL); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4400 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4401 | p = uri_list; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4402 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4403 | /* We don't actually try to validate the URI according to RFC |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4404 | * 2396, or even check for allowed characters - we just ignore |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4405 | * comments and trim whitespace off the ends. We also |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4406 | * allow LF delimination as well as the specified CRLF. |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4407 | */ |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4408 | while (p) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4409 | if (*p != '#') { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4410 | while (isspace(*p)) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4411 | p++; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4412 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4413 | q = p; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4414 | while (*q && (*q != '\n') && (*q != '\r')) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4415 | q++; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4416 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4417 | if (q > p) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4418 | q--; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4419 | while (q > p && isspace(*q)) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4420 | q--; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4421 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4422 | retval = (gchar*)g_malloc (q - p + 2); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4423 | strncpy (retval, p, q - p + 1); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4424 | retval[q - p + 1] = '\0'; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4425 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4426 | result = g_list_prepend (result, retval); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4427 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4428 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4429 | p = strchr (p, '\n'); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4430 | if (p) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4431 | p++; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4432 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4433 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4434 | return g_list_reverse (result); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4435 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4436 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4437 | |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4438 | /* Stolen from gnome_uri_list_extract_filenames */ |
|
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4439 | GList * |
| 15884 | 4440 | purple_uri_list_extract_filenames(const gchar *uri_list) |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4441 | { |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4442 | GList *tmp_list, *node, *result; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4443 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4444 | g_return_val_if_fail (uri_list != NULL, NULL); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4445 | |
| 15884 | 4446 | result = purple_uri_list_extract_uris(uri_list); |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4447 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4448 | tmp_list = result; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4449 | while (tmp_list) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4450 | gchar *s = (gchar*)tmp_list->data; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4451 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4452 | node = tmp_list; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4453 | tmp_list = tmp_list->next; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4454 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4455 | if (!strncmp (s, "file:", 5)) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4456 | node->data = g_filename_from_uri (s, NULL, NULL); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4457 | /* not sure if this fallback is useful at all */ |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4458 | if (!node->data) node->data = g_strdup (s+5); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4459 | } else { |
|
23028
b17c77748d6d
Fix some potential leakage in the craziness called purple_markup_html_to_xhtml().
Daniel Atallah <datallah@pidgin.im>
parents:
22622
diff
changeset
|
4460 | result = g_list_delete_link(result, node); |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4461 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4462 | g_free (s); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4463 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4464 | return result; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4465 | } |
| 9054 | 4466 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4467 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4468 | * UTF8 String Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4469 | **************************************************************************/ |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4470 | gchar * |
| 15884 | 4471 | purple_utf8_try_convert(const char *str) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4472 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4473 | gsize converted; |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4474 | gchar *utf8; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4475 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4476 | g_return_val_if_fail(str != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4477 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4478 | if (g_utf8_validate(str, -1, NULL)) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4479 | return g_strdup(str); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4480 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4481 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4482 | utf8 = g_locale_to_utf8(str, -1, &converted, NULL, NULL); |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4483 | if (utf8 != NULL) |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4484 | return utf8; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4485 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4486 | utf8 = g_convert(str, -1, "UTF-8", "ISO-8859-15", &converted, NULL, NULL); |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4487 | if ((utf8 != NULL) && (converted == strlen(str))) |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4488 | return utf8; |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4489 | |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
4490 | g_free(utf8); |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4491 | |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4492 | return NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4493 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4494 | |
| 10258 | 4495 | #define utf8_first(x) ((x & 0x80) == 0 || (x & 0xe0) == 0xc0 \ |
| 4496 | || (x & 0xf0) == 0xe0 || (x & 0xf8) == 0xf) | |
| 4497 | gchar * | |
| 15884 | 4498 | purple_utf8_salvage(const char *str) |
| 10258 | 4499 | { |
| 4500 | GString *workstr; | |
| 4501 | const char *end; | |
| 4502 | ||
| 4503 | g_return_val_if_fail(str != NULL, NULL); | |
| 4504 | ||
| 4505 | workstr = g_string_sized_new(strlen(str)); | |
| 4506 | ||
| 4507 | do { | |
| 4508 | g_utf8_validate(str, -1, &end); | |
| 4509 | workstr = g_string_append_len(workstr, str, end - str); | |
| 4510 | str = end; | |
| 4511 | if (*str == '\0') | |
| 4512 | break; | |
| 4513 | do { | |
| 4514 | workstr = g_string_append_c(workstr, '?'); | |
| 4515 | str++; | |
| 4516 | } while (!utf8_first(*str)); | |
| 4517 | } while (*str != '\0'); | |
| 4518 | ||
| 4519 | return g_string_free(workstr, FALSE); | |
| 4520 | } | |
| 4521 | ||
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4522 | gchar * |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4523 | purple_utf8_strip_unprintables(const gchar *str) |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4524 | { |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4525 | gchar *workstr, *iter; |
|
28389
3f6d1ba8a58b
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <darkrain42@pidgin.im>
parents:
28388
diff
changeset
|
4526 | const gchar *bad; |
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4527 | |
|
27243
fb50a38b034b
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
4528 | if (str == NULL) |
|
fb50a38b034b
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
4529 | /* Act like g_strdup */ |
|
fb50a38b034b
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
4530 | return NULL; |
|
fb50a38b034b
Strip unprintable UTF-8 characters from buddy list strings. Fixes #8776.
Paul Aurich <darkrain42@pidgin.im>
parents:
27237
diff
changeset
|
4531 | |
|
28390
5c701ddc9c81
Oops, I think it's either sleep or coffee time.
Paul Aurich <darkrain42@pidgin.im>
parents:
28389
diff
changeset
|
4532 | if (!g_utf8_validate(str, -1, &bad)) { |
|
28389
3f6d1ba8a58b
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <darkrain42@pidgin.im>
parents:
28388
diff
changeset
|
4533 | purple_debug_error("util", "purple_utf8_strip_unprintables(%s) failed; " |
|
3f6d1ba8a58b
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <darkrain42@pidgin.im>
parents:
28388
diff
changeset
|
4534 | "first bad character was %02x (%c)\n", |
|
3f6d1ba8a58b
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <darkrain42@pidgin.im>
parents:
28388
diff
changeset
|
4535 | str, *bad, *bad); |
|
3f6d1ba8a58b
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <darkrain42@pidgin.im>
parents:
28388
diff
changeset
|
4536 | g_return_val_if_reached(NULL); |
|
3f6d1ba8a58b
Add more verbose debugging to purple_utf8_strip_unprintables.
Paul Aurich <darkrain42@pidgin.im>
parents:
28388
diff
changeset
|
4537 | } |
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4538 | |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4539 | workstr = iter = g_new(gchar, strlen(str) + 1); |
|
30143
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4540 | while (*str) { |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4541 | gunichar ch = g_utf8_get_char(str); |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4542 | gchar *next = g_utf8_next_char(str); |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4543 | /* |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4544 | * Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4545 | * [#x10000-#x10FFFF] |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4546 | */ |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4547 | if ((ch == '\t' || ch == '\n' || ch == '\r') || |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4548 | (ch >= 0x20 && ch <= 0xD7FF) || |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4549 | (ch >= 0xE000 && ch <= 0xFFFD) || |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4550 | (ch >= 0x10000 && ch <= 0x10FFFF)) { |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4551 | memcpy(iter, str, next - str); |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4552 | iter += (next - str); |
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4553 | } |
|
30143
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4554 | |
|
468e3b69fd10
util: Better validation of the allowed character values in XML 1.0
Paul Aurich <darkrain42@pidgin.im>
parents:
30031
diff
changeset
|
4555 | str = next; |
|
27237
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4556 | } |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4557 | |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4558 | /* nul-terminate the new string */ |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4559 | *iter = '\0'; |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4560 | |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4561 | return workstr; |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4562 | } |
|
0643ac0e5658
Add purple_utf8_strip_unprintables and use it on outgoing XMPP messages.
Paul Aurich <darkrain42@pidgin.im>
parents:
27234
diff
changeset
|
4563 | |
|
21978
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4564 | /* |
|
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4565 | * This function is copied from g_strerror() but changed to use |
|
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4566 | * gai_strerror(). |
|
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4567 | */ |
|
21977
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4568 | G_CONST_RETURN gchar * |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4569 | purple_gai_strerror(gint errnum) |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4570 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4571 | static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4572 | char *msg; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4573 | int saved_errno = errno; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4574 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4575 | const char *msg_locale; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4576 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4577 | msg_locale = gai_strerror(errnum); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4578 | if (g_get_charset(NULL)) |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4579 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4580 | /* This string is already UTF-8--great! */ |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4581 | errno = saved_errno; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4582 | return msg_locale; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4583 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4584 | else |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4585 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4586 | gchar *msg_utf8 = g_locale_to_utf8(msg_locale, -1, NULL, NULL, NULL); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4587 | if (msg_utf8) |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4588 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4589 | /* Stick in the quark table so that we can return a static result */ |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4590 | GQuark msg_quark = g_quark_from_string(msg_utf8); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4591 | g_free(msg_utf8); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4592 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4593 | msg_utf8 = (gchar *)g_quark_to_string(msg_quark); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4594 | errno = saved_errno; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4595 | return msg_utf8; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4596 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4597 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4598 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4599 | msg = g_static_private_get(&msg_private); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4600 | if (!msg) |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4601 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4602 | msg = g_new(gchar, 64); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4603 | g_static_private_set(&msg_private, msg, g_free); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4604 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4605 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4606 | sprintf(msg, "unknown error (%d)", errnum); |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4607 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4608 | errno = saved_errno; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4609 | return msg; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4610 | } |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4611 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4612 | char * |
| 15884 | 4613 | purple_utf8_ncr_encode(const char *str) |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4614 | { |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4615 | GString *out; |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4616 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4617 | g_return_val_if_fail(str != NULL, NULL); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4618 | g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4619 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4620 | out = g_string_new(""); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4621 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4622 | for(; *str; str = g_utf8_next_char(str)) { |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4623 | gunichar wc = g_utf8_get_char(str); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4624 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4625 | /* super simple check. hopefully not too wrong. */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4626 | if(wc >= 0x80) { |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4627 | g_string_append_printf(out, "&#%u;", (guint32) wc); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4628 | } else { |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4629 | g_string_append_unichar(out, wc); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4630 | } |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4631 | } |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4632 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4633 | return g_string_free(out, FALSE); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4634 | } |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4635 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4636 | |
| 9161 | 4637 | char * |
| 15884 | 4638 | purple_utf8_ncr_decode(const char *str) |
| 9161 | 4639 | { |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4640 | GString *out; |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4641 | char *buf, *b; |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4642 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4643 | g_return_val_if_fail(str != NULL, NULL); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4644 | g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4645 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4646 | buf = (char *) str; |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4647 | out = g_string_new(""); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4648 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4649 | while( (b = strstr(buf, "&#")) ) { |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4650 | gunichar wc; |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4651 | int base = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4652 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4653 | /* append everything leading up to the &# */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4654 | g_string_append_len(out, buf, b-buf); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4655 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4656 | b += 2; /* skip past the &# */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4657 | |
|
13489
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4658 | /* strtoul will treat 0x prefix as hex, but not just x */ |
|
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4659 | if(*b == 'x' || *b == 'X') { |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4660 | base = 16; |
|
13489
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4661 | b++; |
|
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4662 | } |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4663 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4664 | /* advances buf to the end of the ncr segment */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4665 | wc = (gunichar) strtoul(b, &buf, base); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4666 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4667 | /* this mimics the previous impl of ncr_decode */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4668 | if(*buf == ';') { |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4669 | g_string_append_unichar(out, wc); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4670 | buf++; |
| 9161 | 4671 | } |
| 4672 | } | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4673 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4674 | /* append whatever's left */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4675 | g_string_append(out, buf); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4676 | |
| 9161 | 4677 | return g_string_free(out, FALSE); |
| 4678 | } | |
| 4679 | ||
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4680 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4681 | int |
| 15884 | 4682 | purple_utf8_strcasecmp(const char *a, const char *b) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4683 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4684 | char *a_norm = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4685 | char *b_norm = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4686 | int ret = -1; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4687 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4688 | if(!a && b) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4689 | return -1; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4690 | else if(!b && a) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4691 | return 1; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4692 | else if(!a && !b) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4693 | return 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4694 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4695 | if(!g_utf8_validate(a, -1, NULL) || !g_utf8_validate(b, -1, NULL)) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4696 | { |
| 15884 | 4697 | purple_debug_error("purple_utf8_strcasecmp", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4698 | "One or both parameters are invalid UTF8\n"); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4699 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4700 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4701 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4702 | a_norm = g_utf8_casefold(a, -1); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4703 | b_norm = g_utf8_casefold(b, -1); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4704 | ret = g_utf8_collate(a_norm, b_norm); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4705 | g_free(a_norm); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4706 | g_free(b_norm); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4707 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4708 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4709 | } |
| 7162 | 4710 | |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4711 | /* previously conversation::find_nick() */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4712 | gboolean |
| 15884 | 4713 | purple_utf8_has_word(const char *haystack, const char *needle) |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4714 | { |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4715 | char *hay, *pin, *p; |
|
25276
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4716 | const char *start, *prev_char; |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4717 | gunichar before, after; |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4718 | int n; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4719 | gboolean ret = FALSE; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4720 | |
|
25276
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4721 | start = hay = g_utf8_strdown(haystack, -1); |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4722 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4723 | pin = g_utf8_strdown(needle, -1); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4724 | n = strlen(pin); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4725 | |
|
25276
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4726 | while ((p = strstr(start, pin)) != NULL) { |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4727 | prev_char = g_utf8_find_prev_char(hay, p); |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4728 | before = -2; |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4729 | if (prev_char) { |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4730 | before = g_utf8_get_char(prev_char); |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4731 | } |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4732 | after = g_utf8_get_char_validated(p + n, - 1); |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4733 | |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4734 | if ((p == hay || |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4735 | /* The character before is a reasonable guess for a word boundary |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4736 | ("!g_unichar_isalnum()" is not a valid way to determine word |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4737 | boundaries, but it is the only reasonable thing to do here), |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4738 | and isn't the '&' from a "&" or some such entity*/ |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4739 | (before != -2 && !g_unichar_isalnum(before) && *(p - 1) != '&')) |
|
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4740 | && after != -2 && !g_unichar_isalnum(after)) { |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4741 | ret = TRUE; |
|
25276
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4742 | break; |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4743 | } |
|
25276
b178d389afe0
Make purple_utf8_has_word() better about detecting word boundaries (still not
Daniel Atallah <datallah@pidgin.im>
parents:
24857
diff
changeset
|
4744 | start = p + 1; |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4745 | } |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4746 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4747 | g_free(pin); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4748 | g_free(hay); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4749 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4750 | return ret; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4751 | } |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4752 | |
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4753 | void |
| 15884 | 4754 | purple_print_utf8_to_console(FILE *filestream, char *message) |
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4755 | { |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4756 | gchar *message_conv; |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4757 | GError *error = NULL; |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4758 | |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4759 | /* Try to convert 'message' to user's locale */ |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4760 | message_conv = g_locale_from_utf8(message, -1, NULL, NULL, &error); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4761 | if (message_conv != NULL) { |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4762 | fputs(message_conv, filestream); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4763 | g_free(message_conv); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4764 | } |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4765 | else |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4766 | { |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4767 | /* use 'message' as a fallback */ |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4768 | g_warning("%s\n", error->message); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4769 | g_error_free(error); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4770 | fputs(message, filestream); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4771 | } |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4772 | } |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4773 | |
|
19585
14b519abcc26
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 <datallah@pidgin.im>
parents:
19327
diff
changeset
|
4774 | gboolean purple_message_meify(char *message, gssize len) |
| 7564 | 4775 | { |
| 4776 | char *c; | |
| 4777 | gboolean inside_html = FALSE; | |
| 4778 | ||
| 4779 | g_return_val_if_fail(message != NULL, FALSE); | |
| 4780 | ||
| 4781 | if(len == -1) | |
| 4782 | len = strlen(message); | |
| 4783 | ||
| 4784 | for (c = message; *c; c++, len--) { | |
| 4785 | if(inside_html) { | |
| 4786 | if(*c == '>') | |
| 4787 | inside_html = FALSE; | |
| 4788 | } else { | |
| 4789 | if(*c == '<') | |
| 4790 | inside_html = TRUE; | |
| 4791 | else | |
| 4792 | break; | |
| 4793 | } | |
| 4794 | } | |
| 4795 | ||
| 4796 | if(*c && !g_ascii_strncasecmp(c, "/me ", 4)) { | |
| 4797 | memmove(c, c+4, len-3); | |
| 4798 | return TRUE; | |
| 4799 | } | |
| 4800 | ||
| 4801 | return FALSE; | |
| 4802 | } | |
| 4803 | ||
| 15884 | 4804 | char *purple_text_strip_mnemonic(const char *in) |
| 7889 | 4805 | { |
| 4806 | char *out; | |
| 4807 | char *a; | |
| 8561 | 4808 | char *a0; |
| 7889 | 4809 | const char *b; |
| 4810 | ||
| 4811 | g_return_val_if_fail(in != NULL, NULL); | |
| 4812 | ||
| 4813 | out = g_malloc(strlen(in)+1); | |
| 4814 | a = out; | |
| 4815 | b = in; | |
| 4816 | ||
| 8561 | 4817 | a0 = a; /* The last non-space char seen so far, or the first char */ |
| 4818 | ||
| 7889 | 4819 | while(*b) { |
| 4820 | if(*b == '_') { | |
| 8561 | 4821 | if(a > out && b > in && *(b-1) == '(' && *(b+1) && !(*(b+1) & 0x80) && *(b+2) == ')') { |
| 4822 | /* Detected CJK style shortcut (Bug 875311) */ | |
| 4823 | a = a0; /* undo the left parenthesis */ | |
| 4824 | b += 3; /* and skip the whole mess */ | |
| 4825 | } else if(*(b+1) == '_') { | |
| 7889 | 4826 | *(a++) = '_'; |
| 4827 | b += 2; | |
| 8561 | 4828 | a0 = a; |
| 7889 | 4829 | } else { |
| 4830 | b++; | |
| 4831 | } | |
| 8561 | 4832 | /* We don't want to corrupt the middle of UTF-8 characters */ |
| 4833 | } else if (!(*b & 0x80)) { /* other 1-byte char */ | |
| 4834 | if (*b != ' ') | |
| 4835 | a0 = a; | |
| 4836 | *(a++) = *(b++); | |
| 7889 | 4837 | } else { |
| 8561 | 4838 | /* Multibyte utf8 char, don't look for _ inside these */ |
| 4839 | int n = 0; | |
| 4840 | int i; | |
| 4841 | if ((*b & 0xe0) == 0xc0) { | |
| 4842 | n = 2; | |
| 4843 | } else if ((*b & 0xf0) == 0xe0) { | |
| 4844 | n = 3; | |
| 4845 | } else if ((*b & 0xf8) == 0xf0) { | |
| 4846 | n = 4; | |
| 4847 | } else if ((*b & 0xfc) == 0xf8) { | |
| 4848 | n = 5; | |
| 4849 | } else if ((*b & 0xfe) == 0xfc) { | |
| 4850 | n = 6; | |
| 4851 | } else { /* Illegal utf8 */ | |
| 4852 | n = 1; | |
| 4853 | } | |
| 4854 | a0 = a; /* unless we want to delete CJK spaces too */ | |
| 4855 | for (i = 0; i < n && *b; i += 1) { | |
| 4856 | *(a++) = *(b++); | |
| 4857 | } | |
| 7889 | 4858 | } |
| 4859 | } | |
| 4860 | *a = '\0'; | |
| 4861 | ||
| 4862 | return out; | |
| 4863 | } | |
| 4864 | ||
| 15884 | 4865 | const char* purple_unescape_filename(const char *escaped) { |
| 4866 | return purple_url_decode(escaped); | |
| 9926 | 4867 | } |
| 4868 | ||
| 4869 | ||
| 15884 | 4870 | /* this is almost identical to purple_url_encode (hence purple_url_decode |
| 9926 | 4871 | * being used above), but we want to keep certain characters unescaped |
| 4872 | * for compat reasons */ | |
| 4873 | const char * | |
| 15884 | 4874 | purple_escape_filename(const char *str) |
| 9926 | 4875 | { |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4876 | const char *iter; |
| 9926 | 4877 | static char buf[BUF_LEN]; |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4878 | char utf_char[6]; |
| 9926 | 4879 | guint i, j = 0; |
| 4880 | ||
| 4881 | g_return_val_if_fail(str != NULL, NULL); | |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4882 | g_return_val_if_fail(g_utf8_validate(str, -1, NULL), NULL); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4883 | |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4884 | iter = str; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4885 | for (; *iter && j < (BUF_LEN - 1) ; iter = g_utf8_next_char(iter)) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4886 | gunichar c = g_utf8_get_char(iter); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4887 | /* If the character is an ASCII character and is alphanumeric, |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4888 | * or one of the specified values, no need to escape */ |
|
17261
65aa3164dcce
If we're operating on ASCII characters only, we should use g_ascii_isalnum.
Richard Laager <rlaager@pidgin.im>
parents:
17254
diff
changeset
|
4889 | if (c < 128 && (g_ascii_isalnum(c) || c == '@' || c == '-' || |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4890 | c == '_' || c == '.' || c == '#')) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4891 | buf[j++] = c; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4892 | } else { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4893 | int bytes = g_unichar_to_utf8(c, utf_char); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4894 | for (i = 0; i < bytes; i++) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4895 | if (j > (BUF_LEN - 4)) |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4896 | break; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4897 | sprintf(buf + j, "%%%02x", utf_char[i] & 0xff); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4898 | j += 3; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4899 | } |
| 9926 | 4900 | } |
| 4901 | } | |
|
30414
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4902 | #ifdef _WIN32 |
|
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4903 | /* File/Directory names in windows cannot end in periods/spaces. |
|
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4904 | * http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx |
|
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4905 | */ |
|
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4906 | while (j > 0 && (buf[j - 1] == '.' || buf[j - 1] == ' ')) |
|
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4907 | j--; |
|
b334269e9ecf
Apparently file/directory names in windows cannot end in periods/spaces.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
30413
diff
changeset
|
4908 | #endif |
| 9926 | 4909 | buf[j] = '\0'; |
| 4910 | ||
| 4911 | return buf; | |
| 4912 | } | |
| 4913 | ||
| 15884 | 4914 | const char *_purple_oscar_convert(const char *act, const char *protocol) |
|
15482
b943b932a41b
Make sure the pounces, buddy-aliases, savedstatuses etc. saved before the aim/icq split works after the split. The util function _gaim_oscar_convert will be removed at a 'suitable' time in the future.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15460
diff
changeset
|
4915 | { |
|
25859
b42be7bb9dac
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 <darkrain42@pidgin.im>
parents:
25854
diff
changeset
|
4916 | if (act && purple_strequal(protocol, "prpl-oscar")) { |
|
19766
3b54c91fb393
You can't just look at the first letter of the screen name to determine
Mark Doliner <markdoliner@pidgin.im>
parents:
19662
diff
changeset
|
4917 | int i; |
|
3b54c91fb393
You can't just look at the first letter of the screen name to determine
Mark Doliner <markdoliner@pidgin.im>
parents:
19662
diff
changeset
|
4918 | for (i = 0; act[i] != '\0'; i++) |
|
3b54c91fb393
You can't just look at the first letter of the screen name to determine
Mark Doliner <markdoliner@pidgin.im>
parents:
19662
diff
changeset
|
4919 | if (!isdigit(act[i])) |
|
3b54c91fb393
You can't just look at the first letter of the screen name to determine
Mark Doliner <markdoliner@pidgin.im>
parents:
19662
diff
changeset
|
4920 | return "prpl-aim"; |
|
3b54c91fb393
You can't just look at the first letter of the screen name to determine
Mark Doliner <markdoliner@pidgin.im>
parents:
19662
diff
changeset
|
4921 | return "prpl-icq"; |
|
15482
b943b932a41b
Make sure the pounces, buddy-aliases, savedstatuses etc. saved before the aim/icq split works after the split. The util function _gaim_oscar_convert will be removed at a 'suitable' time in the future.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15460
diff
changeset
|
4922 | } |
|
b943b932a41b
Make sure the pounces, buddy-aliases, savedstatuses etc. saved before the aim/icq split works after the split. The util function _gaim_oscar_convert will be removed at a 'suitable' time in the future.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15460
diff
changeset
|
4923 | return protocol; |
|
b943b932a41b
Make sure the pounces, buddy-aliases, savedstatuses etc. saved before the aim/icq split works after the split. The util function _gaim_oscar_convert will be removed at a 'suitable' time in the future.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15460
diff
changeset
|
4924 | } |
|
b943b932a41b
Make sure the pounces, buddy-aliases, savedstatuses etc. saved before the aim/icq split works after the split. The util function _gaim_oscar_convert will be removed at a 'suitable' time in the future.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15460
diff
changeset
|
4925 | |
| 15884 | 4926 | void purple_restore_default_signal_handlers(void) |
|
15707
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4927 | { |
|
15726
03539465ace5
Merge fix and build fix for win32
Daniel Atallah <datallah@pidgin.im>
parents:
15725
diff
changeset
|
4928 | #ifndef _WIN32 |
|
15707
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4929 | #ifdef HAVE_SIGNAL_H |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4930 | signal(SIGHUP, SIG_DFL); /* 1: terminal line hangup */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4931 | signal(SIGINT, SIG_DFL); /* 2: interrupt program */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4932 | signal(SIGQUIT, SIG_DFL); /* 3: quit program */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4933 | signal(SIGILL, SIG_DFL); /* 4: illegal instruction (not reset when caught) */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4934 | signal(SIGTRAP, SIG_DFL); /* 5: trace trap (not reset when caught) */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4935 | signal(SIGABRT, SIG_DFL); /* 6: abort program */ |
|
15723
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4936 | |
|
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4937 | #ifdef SIGPOLL |
|
16557
b0e9ddccdbb9
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <datallah@pidgin.im>
parents:
16545
diff
changeset
|
4938 | signal(SIGPOLL, SIG_DFL); /* 7: pollable event (POSIX) */ |
|
15723
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4939 | #endif /* SIGPOLL */ |
|
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4940 | |
|
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4941 | #ifdef SIGEMT |
|
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4942 | signal(SIGEMT, SIG_DFL); /* 7: EMT instruction (Non-POSIX) */ |
|
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4943 | #endif /* SIGEMT */ |
|
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4944 | |
|
15707
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4945 | signal(SIGFPE, SIG_DFL); /* 8: floating point exception */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4946 | signal(SIGBUS, SIG_DFL); /* 10: bus error */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4947 | signal(SIGSEGV, SIG_DFL); /* 11: segmentation violation */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4948 | signal(SIGSYS, SIG_DFL); /* 12: bad argument to system call */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4949 | signal(SIGPIPE, SIG_DFL); /* 13: write on a pipe with no reader */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4950 | signal(SIGALRM, SIG_DFL); /* 14: real-time timer expired */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4951 | signal(SIGTERM, SIG_DFL); /* 15: software termination signal */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4952 | signal(SIGCHLD, SIG_DFL); /* 20: child status has changed */ |
|
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4953 | signal(SIGXCPU, SIG_DFL); /* 24: exceeded CPU time limit */ |
|
16557
b0e9ddccdbb9
Fix purple_util_get_image_extension()'s data param. to be correctly marked as constant.
Daniel Atallah <datallah@pidgin.im>
parents:
16545
diff
changeset
|
4954 | signal(SIGXFSZ, SIG_DFL); /* 25: exceeded file size limit */ |
|
15723
feaa3efdab08
SIGEMT is not available on non-POSIX systems; SIGPOLL is present, instead. Thanks to Richard for catching this.
Evan Schoenberg <evands@pidgin.im>
parents:
15707
diff
changeset
|
4955 | #endif /* HAVE_SIGNAL_H */ |
|
15726
03539465ace5
Merge fix and build fix for win32
Daniel Atallah <datallah@pidgin.im>
parents:
15725
diff
changeset
|
4956 | #endif /* !_WIN32 */ |
|
15707
e9d3280caf69
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 <evands@pidgin.im>
parents:
15678
diff
changeset
|
4957 | } |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4958 | |
|
22217
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4959 | static void |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4960 | set_status_with_attrs(PurpleStatus *status, ...) |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4961 | { |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4962 | va_list args; |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4963 | va_start(args, status); |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4964 | purple_status_set_active_with_attrs(status, TRUE, args); |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4965 | va_end(args); |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4966 | } |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4967 | |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4968 | void purple_util_set_current_song(const char *title, const char *artist, const char *album) |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4969 | { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4970 | GList *list = purple_accounts_get_all(); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4971 | for (; list; list = list->next) { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4972 | PurplePresence *presence; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4973 | PurpleStatus *tune; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4974 | PurpleAccount *account = list->data; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4975 | if (!purple_account_get_enabled(account, purple_core_get_ui())) |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4976 | continue; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4977 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4978 | presence = purple_account_get_presence(account); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4979 | tune = purple_presence_get_status(presence, "tune"); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4980 | if (!tune) |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4981 | continue; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4982 | if (title) { |
|
22217
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4983 | set_status_with_attrs(tune, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4984 | PURPLE_TUNE_TITLE, title, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4985 | PURPLE_TUNE_ARTIST, artist, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4986 | PURPLE_TUNE_ALBUM, album, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4987 | NULL); |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4988 | } else { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4989 | purple_status_set_active(tune, FALSE); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4990 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4991 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4992 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4993 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4994 | char * purple_util_format_song_info(const char *title, const char *artist, const char *album, gpointer unused) |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4995 | { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4996 | GString *string; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4997 | char *esc; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4998 | |
|
22181
4b62573becd9
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22133
diff
changeset
|
4999 | if (!title || !*title) |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5000 | return NULL; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5001 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5002 | esc = g_markup_escape_text(title, -1); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5003 | string = g_string_new(""); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5004 | g_string_append_printf(string, "%s", esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5005 | g_free(esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5006 | |
|
22181
4b62573becd9
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22133
diff
changeset
|
5007 | if (artist && *artist) { |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5008 | esc = g_markup_escape_text(artist, -1); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5009 | g_string_append_printf(string, _(" - %s"), esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5010 | g_free(esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5011 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5012 | |
|
22181
4b62573becd9
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22133
diff
changeset
|
5013 | if (album && *album) { |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5014 | esc = g_markup_escape_text(album, -1); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5015 | g_string_append_printf(string, _(" (%s)"), esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5016 | g_free(esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5017 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5018 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5019 | return g_string_free(string, FALSE); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5020 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
5021 | |
|
23850
b68e174fffc2
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23531
diff
changeset
|
5022 | const gchar * |
|
b68e174fffc2
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23531
diff
changeset
|
5023 | purple_get_host_name(void) |
|
b68e174fffc2
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23531
diff
changeset
|
5024 | { |
|
b68e174fffc2
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23531
diff
changeset
|
5025 | return g_get_host_name(); |
|
b68e174fffc2
Add purple_get_host_name to get the hostname of the machine.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23531
diff
changeset
|
5026 | } |
|
29538
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5027 | |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5028 | gchar * |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5029 | purple_uuid_random(void) |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5030 | { |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5031 | guint32 tmp, a, b; |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5032 | |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5033 | tmp = g_random_int(); |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5034 | a = 0x4000 | (tmp & 0xFFF); /* 0x4000 to 0x4FFF */ |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5035 | tmp >>= 12; |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5036 | b = ((1 << 3) << 12) | (tmp & 0x3FFF); /* 0x8000 to 0xBFFF */ |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5037 | |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5038 | tmp = g_random_int(); |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5039 | |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5040 | return g_strdup_printf("%08x-%04x-%04x-%04x-%04x%08x", |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5041 | g_random_int(), |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5042 | tmp & 0xFFFF, |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5043 | a, |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5044 | b, |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5045 | (tmp >> 16) & 0xFFFF, g_random_int()); |
|
f1c9c6791e98
Broke out the generation of random UUIDs to its own function
Marcus Lundblad <malu@pidgin.im>
parents:
29519
diff
changeset
|
5046 | } |