Sat, 22 Mar 2008 09:40:38 +0000
Add log-handlers for farsight foo.
| 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" |
|
1575
220b4d845309
[gaim-migrate @ 1585]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1560
diff
changeset
|
31 | #include "prpl.h" |
|
5545
a8b1a1262402
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5532
diff
changeset
|
32 | #include "prefs.h" |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
33 | #include "util.h" |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
34 | |
| 15884 | 35 | struct _PurpleUtilFetchUrlData |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
36 | { |
| 15884 | 37 | PurpleUtilFetchUrlCallback callback; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
38 | void *user_data; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
39 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
40 | struct |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
41 | { |
| 9227 | 42 | char *user; |
| 43 | char *passwd; | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
44 | char *address; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
45 | int port; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
46 | char *page; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
47 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
48 | } website; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
49 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
50 | 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
|
51 | int num_times_redirected; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
52 | gboolean full; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
53 | char *user_agent; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
54 | gboolean http11; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
55 | char *request; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
56 | gsize request_written; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
57 | gboolean include_headers; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
58 | |
| 15884 | 59 | PurpleProxyConnectData *connect_data; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
60 | int fd; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
61 | guint inpa; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
62 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
63 | gboolean got_headers; |
| 9240 | 64 | gboolean has_explicit_data_len; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
65 | char *webdata; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
66 | unsigned long len; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
67 | unsigned long data_len; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
68 | }; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
69 | |
|
18219
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
70 | 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
|
71 | static char *user_dir = NULL; |
| 3630 | 72 | |
|
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
|
73 | |
| 15884 | 74 | PurpleMenuAction * |
| 75 | purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data, | |
| 12919 | 76 | GList *children) |
| 77 | { | |
| 15884 | 78 | PurpleMenuAction *act = g_new0(PurpleMenuAction, 1); |
|
13103
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
79 | act->label = g_strdup(label); |
| 12919 | 80 | act->callback = callback; |
| 81 | act->data = data; | |
| 82 | act->children = children; | |
| 83 | return act; | |
| 84 | } | |
| 85 | ||
|
13103
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
86 | void |
| 15884 | 87 | purple_menu_action_free(PurpleMenuAction *act) |
|
13103
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
88 | { |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
89 | g_return_if_fail(act != NULL); |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
90 | |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
91 | g_free(act->label); |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
92 | g_free(act); |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
93 | } |
|
81ccb40de82b
[gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents:
13098
diff
changeset
|
94 | |
|
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
|
95 | 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
|
96 | 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
|
97 | { |
|
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
|
98 | /* This does nothing right now. It exists for symmetry with |
|
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
|
99 | * 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
|
100 | } |
|
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 | |
|
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 | 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 | 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
|
104 | { |
|
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 | /* 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
|
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 | 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
|
108 | 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
|
109 | |
|
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 | 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
|
111 | 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
|
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 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
114 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
115 | * Base16 Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
116 | **************************************************************************/ |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
117 | gchar * |
| 15884 | 118 | purple_base16_encode(const guchar *data, gsize len) |
| 1 | 119 | { |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
120 | int i; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
121 | gchar *ascii = NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
122 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
123 | g_return_val_if_fail(data != NULL, NULL); |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
124 | g_return_val_if_fail(len > 0, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
125 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
126 | ascii = g_malloc(len * 2 + 1); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
127 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
128 | for (i = 0; i < len; i++) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
129 | snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
130 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
131 | return ascii; |
| 1 | 132 | } |
| 133 | ||
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
134 | guchar * |
| 15884 | 135 | purple_base16_decode(const char *str, gsize *ret_len) |
| 1 | 136 | { |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
137 | int len, i, accumulator = 0; |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
138 | guchar *data; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
139 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
140 | g_return_val_if_fail(str != NULL, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
141 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
142 | len = strlen(str); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
143 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
144 | g_return_val_if_fail(strlen(str) > 0, 0); |
| 15101 | 145 | g_return_val_if_fail(len % 2 == 0, 0); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
146 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
147 | data = g_malloc(len / 2); |
| 1 | 148 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
149 | for (i = 0; i < len; i++) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
150 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
151 | if ((i % 2) == 0) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
152 | accumulator = 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
153 | else |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
154 | accumulator <<= 4; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
155 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
156 | if (isdigit(str[i])) |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
157 | accumulator |= str[i] - 48; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
158 | else |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
159 | { |
|
16214
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
160 | switch(tolower(str[i])) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
161 | { |
|
16214
74d15bac89b7
Call strtolower() so that we don't have to check against the
Mark Doliner <markdoliner@pidgin.im>
parents:
16144
diff
changeset
|
162 | 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
|
163 | 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
|
164 | 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
|
165 | 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
|
166 | 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
|
167 | case 'f': accumulator |= 15; break; |
|
1826
2353dd376dcf
[gaim-migrate @ 1836]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1815
diff
changeset
|
168 | } |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
169 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
170 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
171 | if (i % 2) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
172 | data[(i - 1) / 2] = accumulator; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
173 | } |
| 1 | 174 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
175 | if (ret_len != NULL) |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
176 | *ret_len = len / 2; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
177 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
178 | return data; |
| 1 | 179 | } |
| 180 | ||
|
17389
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
181 | gchar * |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
182 | 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
|
183 | { |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
184 | int i; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
185 | gchar *ascii = NULL; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
186 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
187 | 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
|
188 | 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
|
189 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
190 | /* 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
|
191 | * 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
|
192 | * 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
|
193 | */ |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
194 | 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
|
195 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
196 | 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
|
197 | 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
|
198 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
199 | /* 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
|
200 | 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
|
201 | |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
202 | return ascii; |
|
125a4df6d42c
- Add purple_base16_encode_chunked, which is handy for key fingerprints.
William Ehlhardt <williamehlhardt@gmail.com>
parents:
17287
diff
changeset
|
203 | } |
|
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 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
206 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
207 | * Base64 Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
208 | **************************************************************************/ |
|
4888
09f16a932490
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
209 | static const char alphabet[] = |
|
09f16a932490
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
210 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
|
09f16a932490
[gaim-migrate @ 5218]
Christian Hammond <chipx86@chipx86.com>
parents:
4853
diff
changeset
|
211 | "0123456789+/"; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
212 | |
| 8929 | 213 | static const char xdigits[] = |
| 214 | "0123456789abcdef"; | |
| 215 | ||
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
216 | gchar * |
| 15884 | 217 | purple_base64_encode(const guchar *data, gsize len) |
| 1 | 218 | { |
| 6872 | 219 | char *out, *rv; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
220 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
221 | g_return_val_if_fail(data != NULL, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
222 | g_return_val_if_fail(len > 0, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
223 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
224 | rv = out = g_malloc(((len/3)+1)*4 + 1); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
225 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
226 | for (; len >= 3; len -= 3) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
227 | { |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
228 | *out++ = alphabet[data[0] >> 2]; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
229 | *out++ = alphabet[((data[0] << 4) & 0x30) | (data[1] >> 4)]; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
230 | *out++ = alphabet[((data[1] << 2) & 0x3c) | (data[2] >> 6)]; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
231 | *out++ = alphabet[data[2] & 0x3f]; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
232 | data += 3; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
233 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
234 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
235 | if (len > 0) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
236 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
237 | unsigned char fragment; |
| 6872 | 238 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
239 | *out++ = alphabet[data[0] >> 2]; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
240 | fragment = (data[0] << 4) & 0x30; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
241 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
242 | if (len > 1) |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
243 | fragment |= data[1] >> 4; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
244 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
245 | *out++ = alphabet[fragment]; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
246 | *out++ = (len < 2) ? '=' : alphabet[(data[1] << 2) & 0x3c]; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
247 | *out++ = '='; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
248 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
249 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
250 | *out = '\0'; |
| 5426 | 251 | |
| 252 | return rv; | |
| 1 | 253 | } |
| 254 | ||
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
255 | guchar * |
| 15884 | 256 | purple_base64_decode(const char *str, gsize *ret_len) |
| 1 | 257 | { |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
258 | guchar *out = NULL; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
259 | char tmp = 0; |
|
1920
8e86151db7dc
[gaim-migrate @ 1930]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1878
diff
changeset
|
260 | const char *c; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
261 | gint32 tmp2 = 0; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
262 | int len = 0, n = 0; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
263 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
264 | g_return_val_if_fail(str != NULL, NULL); |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
265 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
266 | c = str; |
| 1 | 267 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
268 | while (*c) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
269 | if (*c >= 'A' && *c <= 'Z') { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
270 | tmp = *c - 'A'; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
271 | } else if (*c >= 'a' && *c <= 'z') { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
272 | tmp = 26 + (*c - 'a'); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
273 | } else if (*c >= '0' && *c <= 57) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
274 | tmp = 52 + (*c - '0'); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
275 | } else if (*c == '+') { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
276 | tmp = 62; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
277 | } else if (*c == '/') { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
278 | tmp = 63; |
| 5289 | 279 | } else if (*c == '\r' || *c == '\n') { |
| 280 | c++; | |
| 281 | continue; | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
282 | } else if (*c == '=') { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
283 | if (n == 3) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
284 | out = g_realloc(out, len + 2); |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
285 | out[len] = (guchar)(tmp2 >> 10) & 0xff; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
286 | len++; |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
287 | out[len] = (guchar)(tmp2 >> 2) & 0xff; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
288 | len++; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
289 | } else if (n == 2) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
290 | out = g_realloc(out, len + 1); |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
291 | out[len] = (guchar)(tmp2 >> 4) & 0xff; |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
292 | len++; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
293 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
294 | break; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
295 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
296 | tmp2 = ((tmp2 << 6) | (tmp & 0xff)); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
297 | n++; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
298 | if (n == 4) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
299 | out = g_realloc(out, len + 3); |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
300 | out[len] = (guchar)((tmp2 >> 16) & 0xff); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
301 | len++; |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
302 | out[len] = (guchar)((tmp2 >> 8) & 0xff); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
303 | len++; |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
304 | out[len] = (guchar)(tmp2 & 0xff); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
305 | len++; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
306 | tmp2 = 0; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
307 | n = 0; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
308 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
309 | c++; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
310 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
311 | |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
312 | out = g_realloc(out, len + 1); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
313 | out[len] = 0; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1250
diff
changeset
|
314 | |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
315 | if (ret_len != NULL) |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
316 | *ret_len = len; |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
317 | |
|
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
318 | return out; |
| 1 | 319 | } |
| 320 | ||
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
321 | /************************************************************************** |
|
11132
eeb2afd70f70
[gaim-migrate @ 13189]
Mark Doliner <markdoliner@pidgin.im>
parents:
11127
diff
changeset
|
322 | * Quoted Printable Functions (see RFC 2045). |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
323 | **************************************************************************/ |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
324 | guchar * |
| 15884 | 325 | purple_quotedp_decode(const char *str, gsize *ret_len) |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
326 | { |
| 8125 | 327 | char *n, *new; |
| 328 | const char *end, *p; | |
| 7722 | 329 | |
|
8005
de2b2ad34ee5
[gaim-migrate @ 8682]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7956
diff
changeset
|
330 | n = new = g_malloc(strlen (str) + 1); |
| 8125 | 331 | end = str + strlen(str); |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
332 | |
| 8125 | 333 | for (p = str; p < end; p++, n++) { |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
334 | if (*p == '=') { |
| 8929 | 335 | if (p[1] == '\r' && p[2] == '\n') { /* 5.1 #5 */ |
| 336 | n -= 1; | |
| 337 | p += 2; | |
| 338 | } else if (p[1] == '\n') { /* fuzzy case for 5.1 #5 */ | |
| 339 | n -= 1; | |
| 340 | p += 1; | |
| 341 | } else if (p[1] && p[2]) { | |
| 342 | char *nibble1 = strchr(xdigits, tolower(p[1])); | |
| 343 | char *nibble2 = strchr(xdigits, tolower(p[2])); | |
| 344 | if (nibble1 && nibble2) { /* 5.1 #1 */ | |
| 345 | *n = ((nibble1 - xdigits) << 4) | (nibble2 - xdigits); | |
| 346 | p += 2; | |
| 347 | } else { /* This should never happen */ | |
| 348 | *n = *p; | |
| 349 | } | |
| 350 | } else { /* This should never happen */ | |
| 351 | *n = *p; | |
| 352 | } | |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
353 | } |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
354 | else if (*p == '_') |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
355 | *n = ' '; |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
356 | else |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
357 | *n = *p; |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
358 | } |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
359 | |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
360 | *n = '\0'; |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
361 | |
|
11132
eeb2afd70f70
[gaim-migrate @ 13189]
Mark Doliner <markdoliner@pidgin.im>
parents:
11127
diff
changeset
|
362 | if (ret_len != NULL) |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
363 | *ret_len = n - new; |
| 7722 | 364 | |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
365 | /* Resize to take less space */ |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
366 | /* new = realloc(new, n - new); */ |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
367 | |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11135
diff
changeset
|
368 | return (guchar *)new; |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
369 | } |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
370 | |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
371 | /************************************************************************** |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
372 | * MIME Functions |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
373 | **************************************************************************/ |
|
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
374 | char * |
| 15884 | 375 | purple_mime_decode_field(const char *str) |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
376 | { |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
377 | /* |
| 8958 | 378 | * This is wing's version, partially based on revo/shx's version |
| 379 | * See RFC2047 [which apparently obsoletes RFC1342] | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
380 | */ |
| 8958 | 381 | typedef enum { |
| 382 | state_start, state_equal1, state_question1, | |
| 383 | state_charset, state_question2, | |
| 384 | state_encoding, state_question3, | |
| 385 | state_encoded_text, state_question4, state_equal2 = state_start | |
| 386 | } encoded_word_state_t; | |
| 387 | encoded_word_state_t state = state_start; | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
388 | const char *cur, *mark; |
| 8958 | 389 | const char *charset0 = NULL, *encoding0 = NULL, *encoded_text0 = NULL; |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
390 | char *n, *new; |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
391 | |
| 8976 | 392 | /* token can be any CHAR (supposedly ISO8859-1/ISO2022), not just ASCII */ |
| 8958 | 393 | #define token_char_p(c) \ |
| 394 | (c != ' ' && !iscntrl(c) && !strchr("()<>@,;:\"/[]?.=", c)) | |
| 395 | ||
| 396 | /* But encoded-text must be ASCII; alas, isascii() may not exist */ | |
| 397 | #define encoded_text_char_p(c) \ | |
| 398 | ((c & 0x80) == 0 && c != '?' && c != ' ' && isgraph(c)) | |
| 399 | ||
| 400 | #define RECOVER_MARKED_TEXT strncpy(n, mark, cur - mark + 1); \ | |
| 401 | n += cur - mark + 1 | |
| 402 | ||
| 8976 | 403 | g_return_val_if_fail(str != NULL, NULL); |
| 404 | ||
| 405 | /* NOTE: Assuming that we need just strlen(str)+1 *may* be wrong. | |
| 406 | * It would be wrong if one byte (in some unknown encoding) could | |
| 407 | * expand to >=4 bytes of UTF-8; I don't know if there are such things. | |
| 408 | */ | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
409 | n = new = g_malloc(strlen(str) + 1); |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
410 | |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
411 | /* 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
|
412 | * valid then decode them. |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
413 | * They are of this form: =?charset?encoding?text?= |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
414 | */ |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
415 | |
| 8958 | 416 | for (cur = str, mark = NULL; *cur; cur += 1) { |
| 417 | switch (state) { | |
| 418 | case state_equal1: | |
| 419 | if (*cur == '?') { | |
| 420 | state = state_question1; | |
| 421 | } else { | |
| 422 | RECOVER_MARKED_TEXT; | |
| 423 | state = state_start; | |
| 424 | } | |
| 425 | break; | |
| 426 | case state_question1: | |
| 427 | if (token_char_p(*cur)) { | |
| 428 | charset0 = cur; | |
| 429 | state = state_charset; | |
| 430 | } else { /* This should never happen */ | |
| 431 | RECOVER_MARKED_TEXT; | |
| 432 | state = state_start; | |
| 433 | } | |
| 434 | break; | |
| 435 | case state_charset: | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
436 | if (*cur == '?') { |
| 8958 | 437 | state = state_question2; |
| 8976 | 438 | } else if (!token_char_p(*cur)) { /* This should never happen */ |
| 8958 | 439 | RECOVER_MARKED_TEXT; |
| 440 | state = state_start; | |
| 441 | } | |
| 442 | break; | |
| 443 | case state_question2: | |
| 444 | if (token_char_p(*cur)) { | |
| 445 | encoding0 = cur; | |
| 446 | state = state_encoding; | |
| 447 | } else { /* This should never happen */ | |
| 448 | RECOVER_MARKED_TEXT; | |
| 449 | state = state_start; | |
| 450 | } | |
| 451 | break; | |
| 452 | case state_encoding: | |
| 453 | if (*cur == '?') { | |
| 454 | state = state_question3; | |
| 8976 | 455 | } else if (!token_char_p(*cur)) { /* This should never happen */ |
| 8958 | 456 | RECOVER_MARKED_TEXT; |
| 457 | state = state_start; | |
| 458 | } | |
| 459 | break; | |
| 460 | case state_question3: | |
| 461 | if (encoded_text_char_p(*cur)) { | |
| 462 | encoded_text0 = cur; | |
| 463 | state = state_encoded_text; | |
| 8976 | 464 | } else if (*cur == '?') { /* empty string */ |
| 465 | encoded_text0 = cur; | |
| 466 | state = state_question4; | |
| 8958 | 467 | } else { /* This should never happen */ |
| 468 | RECOVER_MARKED_TEXT; | |
| 469 | state = state_start; | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
470 | } |
| 8958 | 471 | break; |
| 472 | case state_encoded_text: | |
| 473 | if (*cur == '?') { | |
| 474 | state = state_question4; | |
| 475 | } else if (!encoded_text_char_p(*cur)) { | |
| 476 | RECOVER_MARKED_TEXT; | |
| 477 | state = state_start; | |
| 478 | } | |
| 479 | break; | |
| 480 | case state_question4: | |
| 481 | if (*cur == '=') { /* Got the whole encoded-word */ | |
| 482 | char *charset = g_strndup(charset0, encoding0 - charset0 - 1); | |
| 483 | char *encoding = g_strndup(encoding0, encoded_text0 - encoding0 - 1); | |
| 484 | 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
|
485 | guchar *decoded = NULL; |
|
11127
5e539d9d26a4
[gaim-migrate @ 13183]
Mark Doliner <markdoliner@pidgin.im>
parents:
10987
diff
changeset
|
486 | gsize dec_len; |
| 8958 | 487 | if (g_ascii_strcasecmp(encoding, "Q") == 0) |
| 15884 | 488 | decoded = purple_quotedp_decode(encoded_text, &dec_len); |
| 8958 | 489 | else if (g_ascii_strcasecmp(encoding, "B") == 0) |
| 15884 | 490 | decoded = purple_base64_decode(encoded_text, &dec_len); |
| 8958 | 491 | else |
| 492 | decoded = NULL; | |
| 493 | if (decoded) { | |
| 494 | gsize len; | |
|
11132
eeb2afd70f70
[gaim-migrate @ 13189]
Mark Doliner <markdoliner@pidgin.im>
parents:
11127
diff
changeset
|
495 | char *converted = g_convert((const gchar *)decoded, dec_len, "utf-8", charset, NULL, &len, NULL); |
| 8958 | 496 | |
| 497 | if (converted) { | |
| 498 | n = strncpy(n, converted, len) + len; | |
| 499 | g_free(converted); | |
| 500 | } | |
| 501 | g_free(decoded); | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
502 | } |
| 8958 | 503 | g_free(charset); |
| 504 | g_free(encoding); | |
| 505 | g_free(encoded_text); | |
| 506 | state = state_equal2; /* Restart the FSM */ | |
| 507 | } else { /* This should never happen */ | |
| 508 | RECOVER_MARKED_TEXT; | |
| 509 | state = state_start; | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
510 | } |
| 8958 | 511 | break; |
| 512 | default: | |
| 513 | if (*cur == '=') { | |
| 514 | mark = cur; | |
| 515 | state = state_equal1; | |
| 516 | } else { | |
| 517 | /* Some unencoded text. */ | |
| 518 | *n = *cur; | |
| 519 | n += 1; | |
| 520 | } | |
| 521 | break; | |
| 522 | } /* switch */ | |
| 523 | } /* for */ | |
| 524 | ||
| 525 | if (state != state_start) { | |
| 526 | RECOVER_MARKED_TEXT; | |
|
7858
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
527 | } |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
528 | *n = '\0'; |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
529 | |
|
d382c4189f4d
[gaim-migrate @ 8512]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7840
diff
changeset
|
530 | return new; |
|
7840
6a145f8cea82
[gaim-migrate @ 8493]
Mark Doliner <markdoliner@pidgin.im>
parents:
7824
diff
changeset
|
531 | } |
|
7824
8ac3a78f2ec0
[gaim-migrate @ 8476]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7820
diff
changeset
|
532 | |
|
7679
c9804d02dcab
[gaim-migrate @ 8323]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
7675
diff
changeset
|
533 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
534 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
535 | * Date/Time Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
536 | **************************************************************************/ |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
537 | |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
538 | 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
|
539 | { |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
540 | static char buf[7]; |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
541 | long off; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
542 | gint8 min; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
543 | gint8 hrs; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
544 | struct tm new_tm = *tm; |
|
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 | mktime(&new_tm); |
|
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 | if (new_tm.tm_isdst < 0) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
549 | g_return_val_if_reached(""); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
550 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
551 | #ifdef _WIN32 |
|
20587
55af483c9e86
3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents:
19662
diff
changeset
|
552 | if ((off = wpurple_get_tz_offset()) == -1) |
|
13427
9830277962aa
[gaim-migrate @ 15801]
Daniel Atallah <datallah@pidgin.im>
parents:
13400
diff
changeset
|
553 | return ""; |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
554 | #else |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
555 | # ifdef HAVE_TM_GMTOFF |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
556 | off = new_tm.tm_gmtoff; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
557 | # else |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
558 | # ifdef HAVE_TIMEZONE |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
559 | tzset(); |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
560 | off = -1 * timezone; |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
561 | # endif /* HAVE_TIMEZONE */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
562 | # endif /* !HAVE_TM_GMTOFF */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
563 | #endif /* _WIN32 */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
564 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
565 | min = (off / 60) % 60; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
566 | hrs = ((off / 60) - min) / 60; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
567 | |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
568 | if(iso) { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
569 | if (0 == off) { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
570 | strcpy(buf, "Z"); |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
571 | } else { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
572 | /* 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
|
573 | * wants them */ |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
574 | 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
|
575 | g_return_val_if_reached(""); |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
576 | } |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
577 | } else { |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
578 | 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
|
579 | g_return_val_if_reached(""); |
|
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
580 | } |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
581 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
582 | return buf; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
583 | } |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
584 | |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
585 | /* 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
|
586 | #if !defined(HAVE_STRFTIME_Z_FORMAT) || defined(_WIN32) |
| 15884 | 587 | 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
|
588 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
589 | const char *start; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
590 | const char *c; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
591 | char *fmt = NULL; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
592 | |
| 15884 | 593 | /* Yes, this is checked in purple_utf8_strftime(), |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
594 | * but better safe than sorry. -- rlaager */ |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
595 | g_return_val_if_fail(format != NULL, 0); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
596 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
597 | /* This is fairly efficient, and it only gets |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
598 | * executed on Windows or if the underlying |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
599 | * system doesn't support the %z format string, |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
600 | * for strftime() so I think it's good enough. |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
601 | * -- rlaager */ |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
602 | for (c = start = format; *c ; c++) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
603 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
604 | if (*c != '%') |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
605 | continue; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
606 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
607 | c++; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
608 | |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
609 | #ifndef HAVE_STRFTIME_Z_FORMAT |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
610 | if (*c == 'z') |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
611 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
612 | char *tmp = g_strdup_printf("%s%.*s%s", |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
613 | fmt ? fmt : "", |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
614 | c - start - 1, |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
615 | start, |
|
18317
6c814e134e56
support replying to XEP-0202 queries
Nathan Walp <nwalp@pidgin.im>
parents:
18219
diff
changeset
|
616 | purple_get_tzoff_str(tm, FALSE)); |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
617 | g_free(fmt); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
618 | fmt = tmp; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
619 | start = c + 1; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
620 | } |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
621 | #endif |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
622 | #ifdef _WIN32 |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
623 | if (*c == 'Z') |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
624 | { |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
625 | char *tmp = g_strdup_printf("%s%.*s%s", |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
626 | fmt ? fmt : "", |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
627 | c - start - 1, |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
628 | start, |
| 15884 | 629 | wpurple_get_timezone_abbreviation(tm)); |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
630 | g_free(fmt); |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
631 | fmt = tmp; |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
632 | start = c + 1; |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
633 | } |
|
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
634 | #endif |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
635 | } |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
636 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
637 | if (fmt != NULL) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
638 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
639 | size_t ret; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
640 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
641 | if (*start) |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
642 | { |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
643 | char *tmp = g_strconcat(fmt, start, NULL); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
644 | g_free(fmt); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
645 | fmt = tmp; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
646 | } |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
647 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
648 | ret = strftime(s, max, fmt, tm); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
649 | g_free(fmt); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
650 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
651 | return ret; |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
652 | } |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
653 | |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
654 | return strftime(s, max, format, tm); |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
655 | } |
|
13334
d0d48650f114
[gaim-migrate @ 15703]
Richard Laager <rlaager@pidgin.im>
parents:
13308
diff
changeset
|
656 | #else /* HAVE_STRFTIME_Z_FORMAT && !_WIN32 */ |
| 15884 | 657 | #define purple_internal_strftime strftime |
|
13153
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
658 | #endif |
|
3e0b91a83516
[gaim-migrate @ 15515]
Richard Laager <rlaager@pidgin.im>
parents:
13121
diff
changeset
|
659 | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
660 | const char * |
| 15884 | 661 | purple_utf8_strftime(const char *format, const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
662 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
663 | static char buf[128]; |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
664 | char *locale; |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
665 | GError *err = NULL; |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
666 | int len; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
667 | char *utf8; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
668 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
669 | g_return_val_if_fail(format != NULL, NULL); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
670 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
671 | if (tm == NULL) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
672 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
673 | time_t now = time(NULL); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
674 | tm = localtime(&now); |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
675 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
676 | |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
677 | locale = g_locale_from_utf8(format, -1, NULL, NULL, &err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
678 | if (err != NULL) |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
679 | { |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19766
diff
changeset
|
680 | 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
|
681 | g_error_free(err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
682 | locale = g_strdup(format); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
683 | } |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
684 | |
|
13116
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
685 | /* A return value of 0 is either an error (in |
|
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
686 | * which case, the contents of the buffer are |
|
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
687 | * undefined) or the empty string (in which |
|
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
688 | * case, no harm is done here). */ |
| 15884 | 689 | 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
|
690 | { |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
691 | g_free(locale); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
692 | return ""; |
|
13116
677ff68a65af
[gaim-migrate @ 15477]
Richard Laager <rlaager@pidgin.im>
parents:
13105
diff
changeset
|
693 | } |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
694 | |
|
13308
e6882a87f32d
[gaim-migrate @ 15673]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13216
diff
changeset
|
695 | g_free(locale); |
|
e6882a87f32d
[gaim-migrate @ 15673]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
13216
diff
changeset
|
696 | |
|
13216
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
697 | utf8 = g_locale_to_utf8(buf, len, NULL, NULL, &err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
698 | if (err != NULL) |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
699 | { |
|
19832
84b69b21672b
Patch from QuLogic. Fixes #2903 ('Missing newlines in debug messages.')
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
19766
diff
changeset
|
700 | 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
|
701 | g_error_free(err); |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
702 | } |
|
2cc737d198f3
[gaim-migrate @ 15579]
Richard Laager <rlaager@pidgin.im>
parents:
13201
diff
changeset
|
703 | else |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
704 | { |
| 15884 | 705 | purple_strlcpy(buf, utf8); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
706 | g_free(utf8); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
707 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
708 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
709 | return buf; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
710 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
711 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
712 | const char * |
| 15884 | 713 | purple_date_format_short(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
714 | { |
| 15884 | 715 | return purple_utf8_strftime("%x", tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
716 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
717 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
718 | const char * |
| 15884 | 719 | purple_date_format_long(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
720 | { |
| 15884 | 721 | return purple_utf8_strftime(_("%x %X"), tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
722 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
723 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
724 | const char * |
| 15884 | 725 | purple_date_format_full(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
726 | { |
| 15884 | 727 | return purple_utf8_strftime("%c", tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
728 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
729 | |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
730 | const char * |
| 15884 | 731 | purple_time_format(const struct tm *tm) |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
732 | { |
| 15884 | 733 | return purple_utf8_strftime("%X", tm); |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
734 | } |
| 3630 | 735 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
736 | time_t |
| 15884 | 737 | 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
|
738 | { |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
739 | struct tm tm; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
740 | |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
741 | tm.tm_year = year - 1900; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
742 | tm.tm_mon = month - 1; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
743 | tm.tm_mday = day; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
744 | tm.tm_hour = hour; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
745 | tm.tm_min = min; |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
746 | tm.tm_sec = sec >= 0 ? sec : time(NULL) % 60; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
747 | |
|
1805
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
748 | return mktime(&tm); |
|
c2aeee08d50e
[gaim-migrate @ 1815]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1753
diff
changeset
|
749 | } |
|
3230
6d0e07333504
[gaim-migrate @ 3247]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3153
diff
changeset
|
750 | |
| 8577 | 751 | time_t |
| 15884 | 752 | purple_str_to_time(const char *timestamp, gboolean utc, |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
753 | struct tm *tm, long *tz_off, const char **rest) |
| 8577 | 754 | { |
|
9722
c1072806bcae
[gaim-migrate @ 10583]
Mark Doliner <markdoliner@pidgin.im>
parents:
9716
diff
changeset
|
755 | time_t retval = 0; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
756 | static struct tm t; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
757 | const char *c = timestamp; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
758 | int year = 0; |
| 15884 | 759 | long tzoff = PURPLE_NO_TZ_OFF; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
760 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
761 | time(&retval); |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
762 | localtime_r(&retval, &t); |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
763 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
764 | /* 4 digit year */ |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
765 | if (sscanf(c, "%04d", &year) && year > 1900) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
766 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
767 | c += 4; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
768 | if (*c == '-') |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
769 | c++; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
770 | t.tm_year = year - 1900; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
771 | } |
| 8577 | 772 | |
| 773 | /* 2 digit month */ | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
774 | if (!sscanf(c, "%02d", &t.tm_mon)) |
|
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 | *rest = c; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
778 | return 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
779 | } |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
780 | c += 2; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
781 | if (*c == '-' || *c == '/') |
| 8577 | 782 | c++; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
783 | t.tm_mon -= 1; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
784 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
785 | /* 2 digit day */ |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
786 | if (!sscanf(c, "%02d", &t.tm_mday)) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
787 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
788 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
789 | *rest = c; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
790 | return 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
791 | } |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
792 | c += 2; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
793 | if (*c == '/') |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
794 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
795 | c++; |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
796 | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
797 | if (!sscanf(c, "%04d", &t.tm_year)) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
798 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
799 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
800 | *rest = c; |
|
13465
259b56595409
[gaim-migrate @ 15839]
Richard Laager <rlaager@pidgin.im>
parents:
13444
diff
changeset
|
801 | return 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
802 | } |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
803 | t.tm_year -= 1900; |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
804 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
805 | else if (*c == 'T' || *c == '.') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
806 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
807 | c++; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
808 | /* we have more than a date, keep going */ |
|
9725
4383542a4291
[gaim-migrate @ 10586]
Mark Doliner <markdoliner@pidgin.im>
parents:
9722
diff
changeset
|
809 | |
|
4383542a4291
[gaim-migrate @ 10586]
Mark Doliner <markdoliner@pidgin.im>
parents:
9722
diff
changeset
|
810 | /* 2 digit hour */ |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
811 | 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
|
812 | (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
|
813 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
814 | gboolean offset_positive = FALSE; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
815 | int tzhrs; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
816 | int tzmins; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
817 | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
818 | t.tm_isdst = -1; |
| 10876 | 819 | |
|
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
|
820 | 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
|
821 | 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
|
822 | 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
|
823 | } 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
|
824 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
825 | if (*c == '+') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
826 | offset_positive = TRUE; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
827 | if (((*c == '+' || *c == '-') && (c = c + 1)) && |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
828 | ((sscanf(c, "%02d:%02d", &tzhrs, &tzmins) == 2 && (c = c + 5)) || |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
829 | (sscanf(c, "%02d%02d", &tzhrs, &tzmins) == 2 && (c = c + 4)))) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
830 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
831 | tzoff = tzhrs*60*60 + tzmins*60; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
832 | if (offset_positive) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
833 | tzoff *= -1; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
834 | /* We don't want the C library doing DST calculations |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
835 | * if we know the UTC offset already. */ |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
836 | t.tm_isdst = 0; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
837 | } |
|
15059
73305cb095c7
[gaim-migrate @ 17776]
Richard Laager <rlaager@pidgin.im>
parents:
15021
diff
changeset
|
838 | else if (utc) |
|
73305cb095c7
[gaim-migrate @ 17776]
Richard Laager <rlaager@pidgin.im>
parents:
15021
diff
changeset
|
839 | { |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
840 | 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
|
841 | time_t tmp; |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
842 | 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
|
843 | /* 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
|
844 | * 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
|
845 | * 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
|
846 | * 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
|
847 | * 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
|
848 | localtime_r(&tmp, &tmptm); |
|
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
849 | 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
|
850 | #ifdef HAVE_TM_GMTOFF |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
851 | 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
|
852 | #endif |
|
15059
73305cb095c7
[gaim-migrate @ 17776]
Richard Laager <rlaager@pidgin.im>
parents:
15021
diff
changeset
|
853 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
854 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
855 | if (rest != NULL && *c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
856 | { |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
857 | if (*c == ' ') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
858 | c++; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
859 | if (*c != '\0') |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
860 | *rest = c; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
861 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
862 | |
| 15884 | 863 | if (tzoff != PURPLE_NO_TZ_OFF || utc) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
864 | { |
|
13585
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
865 | #if defined(_WIN32) |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
866 | long sys_tzoff; |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
867 | #endif |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
868 | |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
869 | #if defined(_WIN32) || defined(HAVE_TM_GMTOFF) || defined (HAVE_TIMEZONE) |
| 15884 | 870 | if (tzoff == PURPLE_NO_TZ_OFF) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
871 | tzoff = 0; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
872 | #endif |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
873 | |
|
10987
50b656536923
[gaim-migrate @ 12824]
Daniel Atallah <datallah@pidgin.im>
parents:
10948
diff
changeset
|
874 | #ifdef _WIN32 |
|
20587
55af483c9e86
3rd time the charm? Fixes #2990, maybe
Ka-Hing Cheung <khc@pidgin.im>
parents:
19662
diff
changeset
|
875 | if ((sys_tzoff = wpurple_get_tz_offset()) == -1) |
| 15884 | 876 | tzoff = PURPLE_NO_TZ_OFF; |
|
13585
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
877 | else |
|
b0752c839d60
[gaim-migrate @ 15966]
Richard Laager <rlaager@pidgin.im>
parents:
13521
diff
changeset
|
878 | tzoff += sys_tzoff; |
|
10987
50b656536923
[gaim-migrate @ 12824]
Daniel Atallah <datallah@pidgin.im>
parents:
10948
diff
changeset
|
879 | #else |
| 8577 | 880 | #ifdef HAVE_TM_GMTOFF |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
881 | tzoff += t.tm_gmtoff; |
| 8577 | 882 | #else |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
883 | # ifdef HAVE_TIMEZONE |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
884 | tzset(); /* making sure */ |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
885 | tzoff -= timezone; |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
886 | # endif |
| 8577 | 887 | #endif |
|
10987
50b656536923
[gaim-migrate @ 12824]
Daniel Atallah <datallah@pidgin.im>
parents:
10948
diff
changeset
|
888 | #endif /* _WIN32 */ |
| 8577 | 889 | } |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
890 | } |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
891 | else |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
892 | { |
|
13400
a23782f450d2
[gaim-migrate @ 15773]
Richard Laager <rlaager@pidgin.im>
parents:
13368
diff
changeset
|
893 | if (rest != NULL && *c != '\0') |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
894 | *rest = c; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
895 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
896 | } |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
897 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
898 | if (tm != NULL) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
899 | { |
|
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
|
900 | *tm = t; |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
901 | tm->tm_isdst = -1; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
902 | mktime(tm); |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
903 | } |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
904 | |
|
21698
a63eace78d68
'man 3 ctime' says of localtime() (and friends):
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21697
diff
changeset
|
905 | retval = mktime(&t); |
| 15884 | 906 | if (tzoff != PURPLE_NO_TZ_OFF) |
|
13120
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
907 | retval += tzoff; |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
908 | |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
909 | if (tz_off != NULL) |
|
c25222322810
[gaim-migrate @ 15481]
Richard Laager <rlaager@pidgin.im>
parents:
13118
diff
changeset
|
910 | *tz_off = tzoff; |
|
9716
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
911 | |
|
4011c0d5f384
[gaim-migrate @ 10577]
Mark Doliner <markdoliner@pidgin.im>
parents:
9696
diff
changeset
|
912 | return retval; |
| 8577 | 913 | } |
| 914 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
915 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
916 | * Markup Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
917 | **************************************************************************/ |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
918 | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
919 | const char * |
| 16144 | 920 | purple_markup_unescape_entity(const char *text, int *length) |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
921 | { |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
922 | const char *pln; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
923 | 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
|
924 | char temp[2]; |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
925 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
926 | if (!text || *text != '&') |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
927 | return NULL; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
928 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
929 | #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
|
930 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
931 | if(IS_ENTITY("&")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
932 | pln = "&"; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
933 | else if(IS_ENTITY("<")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
934 | pln = "<"; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
935 | else if(IS_ENTITY(">")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
936 | pln = ">"; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
937 | else if(IS_ENTITY(" ")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
938 | pln = " "; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
939 | else if(IS_ENTITY("©")) |
|
14236
543c18d72123
[gaim-migrate @ 16824]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14233
diff
changeset
|
940 | 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
|
941 | else if(IS_ENTITY(""")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
942 | pln = "\""; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
943 | else if(IS_ENTITY("®")) |
|
14236
543c18d72123
[gaim-migrate @ 16824]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14233
diff
changeset
|
944 | 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
|
945 | else if(IS_ENTITY("'")) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
946 | 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
|
947 | else if(*(text+1) == '#' && |
|
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
|
948 | (sscanf(text, "&#%u%1[;]", £, temp) == 2 || sscanf(text, "&#x%x%1[;]", £, temp) == 2) && |
|
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
|
949 | pound != 0) { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
950 | static char buf[7]; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
951 | int buflen = g_unichar_to_utf8((gunichar)pound, buf); |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
952 | buf[buflen] = '\0'; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
953 | pln = buf; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
954 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
955 | len = 2; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
956 | while(isdigit((gint) text[len])) len++; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
957 | if(text[len] == ';') len++; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
958 | } |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
959 | else |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
960 | return NULL; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
961 | |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
962 | if (length) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
963 | *length = len; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
964 | return pln; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
965 | } |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
966 | |
| 16144 | 967 | char * |
| 968 | purple_markup_get_css_property(const gchar *style, | |
| 969 | const gchar *opt) | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
970 | { |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
971 | const gchar *css_str = style; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
972 | const gchar *css_value_start; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
973 | const gchar *css_value_end; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
974 | gchar *tmp; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
975 | gchar *ret; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
976 | |
| 16144 | 977 | if (!css_str) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
978 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
979 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
980 | /* find the CSS property */ |
| 16144 | 981 | while (1) |
| 982 | { | |
| 983 | /* skip whitespace characters */ | |
| 984 | 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
|
985 | css_str++; |
| 16144 | 986 | if (!g_ascii_isalpha(*css_str)) |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
987 | return NULL; |
| 16144 | 988 | 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
|
989 | { |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
990 | /* go to next css property positioned after the next ';' */ |
| 16144 | 991 | while (*css_str && *css_str != '"' && *css_str != ';') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
992 | css_str++; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
993 | if(*css_str != ';') |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
994 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
995 | css_str++; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
996 | } |
| 16144 | 997 | else |
| 998 | break; | |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
999 | } |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1000 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1001 | /* find the CSS value position in the string */ |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1002 | css_str += strlen(opt); |
| 16144 | 1003 | 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
|
1004 | css_str++; |
| 16144 | 1005 | if (*css_str != ':') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1006 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1007 | css_str++; |
| 16144 | 1008 | 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
|
1009 | css_str++; |
| 16144 | 1010 | 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
|
1011 | return NULL; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1012 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1013 | /* mark the CSS value */ |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1014 | css_value_start = css_str; |
| 16144 | 1015 | while (*css_str && *css_str != '"' && *css_str != ';') |
|
16143
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1016 | css_str++; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1017 | css_value_end = css_str - 1; |
|
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 | /* Removes trailing whitespace */ |
| 16144 | 1020 | 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
|
1021 | css_value_end--; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1022 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1023 | 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
|
1024 | ret = purple_unescape_html(tmp); |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1025 | g_free(tmp); |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1026 | |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1027 | return ret; |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1028 | } |
|
6393e5b11ff5
Patch from shlomil in ticket #78.
Shlomi Loubaton <shlomister@gmail.com>
parents:
16124
diff
changeset
|
1029 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1030 | gboolean |
| 15884 | 1031 | purple_markup_find_tag(const char *needle, const char *haystack, |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1032 | const char **start, const char **end, GData **attributes) |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1033 | { |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1034 | GData *attribs; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1035 | const char *cur = haystack; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1036 | char *name = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1037 | gboolean found = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1038 | gboolean in_tag = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1039 | gboolean in_attr = FALSE; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1040 | const char *in_quotes = NULL; |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1041 | size_t needlelen; |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1042 | |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1043 | g_return_val_if_fail( needle != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1044 | g_return_val_if_fail( *needle != '\0', FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1045 | g_return_val_if_fail( haystack != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1046 | g_return_val_if_fail( start != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1047 | g_return_val_if_fail( end != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1048 | g_return_val_if_fail(attributes != NULL, FALSE); |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1049 | |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1050 | needlelen = strlen(needle); |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1051 | g_datalist_init(&attribs); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1052 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1053 | while (*cur && !found) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1054 | if (in_tag) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1055 | if (in_quotes) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1056 | const char *close = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1057 | |
| 7078 | 1058 | while (*close && *close != *in_quotes) |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1059 | close++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1060 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1061 | /* 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
|
1062 | * 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
|
1063 | * and we're outta here */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1064 | if (*close) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1065 | /* only store a value if we have an attribute name */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1066 | if (name) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1067 | size_t len = close - cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1068 | char *val = g_strndup(cur, len); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1069 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1070 | g_datalist_set_data_full(&attribs, name, val, g_free); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1071 | g_free(name); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1072 | name = NULL; |
|
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 | |
| 7078 | 1075 | in_quotes = NULL; |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1076 | cur = close + 1; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1077 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1078 | cur = close; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1079 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1080 | } else if (in_attr) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1081 | const char *close = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1082 | |
| 7078 | 1083 | while (*close && *close != '>' && *close != '"' && |
| 1084 | *close != '\'' && *close != ' ' && *close != '=') | |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1085 | close++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1086 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1087 | /* 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
|
1088 | * the quote, save the attribute and go straight to quote mode. |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1089 | * 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
|
1090 | * so we can get outta here */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1091 | switch (*close) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1092 | case '"': |
| 7078 | 1093 | case '\'': |
| 1094 | in_quotes = close; | |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1095 | case '=': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1096 | { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1097 | size_t len = close - cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1098 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1099 | /* don't store a blank attribute name */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1100 | if (len) { |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
1101 | g_free(name); |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1102 | name = g_ascii_strdown(cur, len); |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1103 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1104 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1105 | in_attr = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1106 | cur = close + 1; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1107 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1108 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1109 | case ' ': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1110 | case '>': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1111 | in_attr = FALSE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1112 | default: |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1113 | cur = close; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1114 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1115 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1116 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1117 | switch (*cur) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1118 | case ' ': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1119 | /* swallow extra spaces inside tag */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1120 | while (*cur && *cur == ' ') cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1121 | in_attr = TRUE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1122 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1123 | case '>': |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1124 | found = TRUE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1125 | *end = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1126 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1127 | case '"': |
| 7078 | 1128 | case '\'': |
| 1129 | in_quotes = cur; | |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1130 | default: |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1131 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1132 | break; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1133 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1134 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1135 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1136 | /* if we hit a < followed by the name of our tag... */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1137 | if (*cur == '<' && !g_ascii_strncasecmp(cur + 1, needle, needlelen)) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1138 | *start = cur; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1139 | cur = cur + needlelen + 1; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1140 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1141 | /* 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
|
1142 | * 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
|
1143 | * >, but not being distracted by >s inside quotes. */ |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1144 | if (*cur == ' ' || *cur == '>') { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1145 | in_tag = TRUE; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1146 | } else { |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1147 | while (*cur && *cur != '"' && *cur != '\'' && *cur != '>') { |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1148 | if (*cur == '"') { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1149 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1150 | while (*cur && *cur != '"') |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1151 | cur++; |
|
7804
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1152 | } else if (*cur == '\'') { |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1153 | cur++; |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1154 | while (*cur && *cur != '\'') |
|
125cc377a21c
[gaim-migrate @ 8451]
Robert McQueen <robot101@debian.org>
parents:
7722
diff
changeset
|
1155 | cur++; |
|
6982
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 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1158 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1159 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1160 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1161 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1162 | cur++; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1163 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1164 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1165 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1166 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1167 | /* clean up any attribute name from a premature termination */ |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
1168 | g_free(name); |
|
6982
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1169 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1170 | if (found) { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1171 | *attributes = attribs; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1172 | } else { |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1173 | *start = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1174 | *end = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1175 | *attributes = NULL; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1176 | } |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1177 | |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1178 | return found; |
|
12f08de92674
[gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents:
6872
diff
changeset
|
1179 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1180 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
1181 | gboolean |
| 15884 | 1182 | 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
|
1183 | const char *start_token, int skip, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1184 | const char *end_token, char check_value, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1185 | const char *no_value_token, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1186 | const char *display_name, gboolean is_link, |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1187 | const char *link_prefix, |
| 15884 | 1188 | PurpleInfoFieldFormatCallback format_cb) |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1189 | { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1190 | const char *p, *q; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1191 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1192 | g_return_val_if_fail(str != NULL, FALSE); |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1193 | g_return_val_if_fail(user_info != NULL, FALSE); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1194 | g_return_val_if_fail(start_token != NULL, FALSE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1195 | g_return_val_if_fail(end_token != NULL, FALSE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1196 | g_return_val_if_fail(display_name != NULL, FALSE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1197 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1198 | p = strstr(str, start_token); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1199 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1200 | if (p == NULL) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1201 | return FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1202 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1203 | p += strlen(start_token) + skip; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1204 | |
| 7675 | 1205 | if (p >= str + len) |
| 1206 | return FALSE; | |
| 1207 | ||
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1208 | if (check_value != '\0' && *p == check_value) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1209 | return FALSE; |
|
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 | q = strstr(p, end_token); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1212 | |
| 9161 | 1213 | /* Trim leading blanks */ |
| 1214 | while (*p != '\n' && g_ascii_isspace(*p)) { | |
| 1215 | p += 1; | |
| 1216 | } | |
| 1217 | ||
| 1218 | /* Trim trailing blanks */ | |
| 1219 | while (q > p && g_ascii_isspace(*(q - 1))) { | |
| 1220 | q -= 1; | |
| 1221 | } | |
| 1222 | ||
| 1223 | /* Don't bother with null strings */ | |
| 1224 | if (p == q) | |
| 1225 | return FALSE; | |
| 1226 | ||
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1227 | if (q != NULL && (!no_value_token || |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1228 | (no_value_token && strncmp(p, no_value_token, |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1229 | strlen(no_value_token))))) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1230 | { |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1231 | GString *dest = g_string_new(""); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1232 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1233 | if (is_link) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1234 | { |
|
15205
f642029b2f97
[gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents:
15101
diff
changeset
|
1235 | g_string_append(dest, "<a href=\""); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1236 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1237 | if (link_prefix) |
| 7675 | 1238 | g_string_append(dest, link_prefix); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1239 | |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1240 | if (format_cb != NULL) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1241 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1242 | char *reformatted = format_cb(p, q - p); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1243 | g_string_append(dest, reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1244 | g_free(reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1245 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1246 | else |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1247 | g_string_append_len(dest, p, q - p); |
| 7675 | 1248 | g_string_append(dest, "\">"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1249 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1250 | if (link_prefix) |
| 7675 | 1251 | g_string_append(dest, link_prefix); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1252 | |
| 7675 | 1253 | g_string_append_len(dest, p, q - p); |
| 1254 | g_string_append(dest, "</a>"); | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1255 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1256 | else |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1257 | { |
|
13105
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1258 | if (format_cb != NULL) |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1259 | { |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1260 | char *reformatted = format_cb(p, q - p); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1261 | g_string_append(dest, reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1262 | g_free(reformatted); |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1263 | } |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1264 | else |
|
8f9c66e4af87
[gaim-migrate @ 15466]
Richard Laager <rlaager@pidgin.im>
parents:
13103
diff
changeset
|
1265 | g_string_append_len(dest, p, q - p); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1266 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1267 | |
| 15884 | 1268 | 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
|
1269 | g_string_free(dest, TRUE); |
|
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 | return TRUE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1272 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1273 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1274 | return FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1275 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1276 | |
| 15884 | 1277 | struct purple_parse_tag { |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1278 | char *src_tag; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1279 | char *dest_tag; |
| 8064 | 1280 | gboolean ignore; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1281 | }; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1282 | |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1283 | #define ALLOW_TAG_ALT(x, y) if(!g_ascii_strncasecmp(c, "<" x " ", strlen("<" x " "))) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1284 | const char *o = c + strlen("<" x); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1285 | const char *p = NULL, *q = NULL, *r = NULL; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1286 | GString *innards = g_string_new(""); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1287 | while(o && *o) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1288 | if(!q && (*o == '\"' || *o == '\'') ) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1289 | q = o; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1290 | } else if(q) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1291 | if(*o == *q) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1292 | char *unescaped = g_strndup(q+1, o-q-1); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1293 | char *escaped = g_markup_escape_text(unescaped, -1); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1294 | g_string_append_printf(innards, "%c%s%c", *q, escaped, *q); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1295 | g_free(unescaped); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1296 | g_free(escaped); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1297 | q = NULL; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1298 | } else if(*c == '\\') { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1299 | o++; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1300 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1301 | } else if(*o == '<') { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1302 | r = o; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1303 | } else if(*o == '>') { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1304 | p = o; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1305 | break; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1306 | } else { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1307 | innards = g_string_append_c(innards, *o); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1308 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1309 | o++; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1310 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1311 | if(p && !r) { \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1312 | if(*(p-1) != '/') { \ |
| 15884 | 1313 | 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
|
1314 | pt->src_tag = x; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1315 | pt->dest_tag = y; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1316 | tags = g_list_prepend(tags, pt); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1317 | } \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1318 | if(xhtml) { \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1319 | xhtml = g_string_append(xhtml, "<" y); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1320 | xhtml = g_string_append(xhtml, innards->str); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1321 | xhtml = g_string_append_c(xhtml, '>'); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1322 | } \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1323 | c = p + 1; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1324 | } else { \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1325 | if(xhtml) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1326 | xhtml = g_string_append(xhtml, "<"); \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1327 | if(plain) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1328 | plain = g_string_append_c(plain, '<'); \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1329 | c++; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1330 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1331 | g_string_free(innards, TRUE); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1332 | continue; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1333 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1334 | if(!g_ascii_strncasecmp(c, "<" x, strlen("<" x)) && \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1335 | (*(c+strlen("<" x)) == '>' || \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1336 | !g_ascii_strncasecmp(c+strlen("<" x), "/>", 2))) { \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1337 | if(xhtml) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1338 | xhtml = g_string_append(xhtml, "<" y); \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1339 | c += strlen("<" x); \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1340 | if(*c != '/') { \ |
| 15884 | 1341 | 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
|
1342 | pt->src_tag = x; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1343 | pt->dest_tag = y; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1344 | tags = g_list_prepend(tags, pt); \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1345 | if(xhtml) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1346 | xhtml = g_string_append_c(xhtml, '>'); \ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1347 | } else { \ |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1348 | if(xhtml) \ |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1349 | xhtml = g_string_append(xhtml, "/>");\ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1350 | } \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1351 | c = strchr(c, '>') + 1; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1352 | continue; \ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1353 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1354 | #define ALLOW_TAG(x) ALLOW_TAG_ALT(x, x) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1355 | void |
| 15884 | 1356 | 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
|
1357 | char **plain_out) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1358 | { |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1359 | GString *xhtml = NULL; |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1360 | 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
|
1361 | 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
|
1362 | GString *cdata = NULL; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1363 | GList *tags = NULL, *tag; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1364 | const char *c = html; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1365 | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1366 | 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
|
1367 | |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1368 | if(xhtml_out) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1369 | xhtml = g_string_new(""); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1370 | if(plain_out) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1371 | plain = g_string_new(""); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1372 | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1373 | while(c && *c) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1374 | if(*c == '<') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1375 | if(*(c+1) == '/') { /* closing tag */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1376 | tag = tags; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1377 | while(tag) { |
| 15884 | 1378 | struct purple_parse_tag *pt = tag->data; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1379 | 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
|
1380 | c += strlen(pt->src_tag) + 3; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1381 | break; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1382 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1383 | tag = tag->next; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1384 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1385 | if(tag) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1386 | while(tags) { |
| 15884 | 1387 | struct purple_parse_tag *pt = tags->data; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1388 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1389 | g_string_append_printf(xhtml, "</%s>", pt->dest_tag); |
|
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
|
1390 | if(plain && !strcmp(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
|
1391 | /* 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
|
1392 | if (cdata && url && |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1393 | (!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
|
1394 | 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
|
1395 | 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
|
1396 | 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
|
1397 | 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
|
1398 | 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
|
1399 | } |
|
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
|
1400 | |
|
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
|
1401 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1402 | if(tags == tag) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1403 | break; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1404 | tags = g_list_remove(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1405 | g_free(pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1406 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1407 | g_free(tag->data); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1408 | tags = g_list_remove(tags, tag->data); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1409 | } else { |
| 8534 | 1410 | /* a closing tag we weren't expecting... |
| 1411 | * we'll let it slide, if it's really a tag...if it's | |
| 1412 | * just a </ we'll escape it properly */ | |
| 1413 | const char *end = c+2; | |
| 1414 | while(*end && g_ascii_isalpha(*end)) | |
| 1415 | end++; | |
| 1416 | if(*end == '>') { | |
| 1417 | c = end+1; | |
| 1418 | } else { | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1419 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1420 | xhtml = g_string_append(xhtml, "<"); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1421 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1422 | plain = g_string_append_c(plain, '<'); |
| 8534 | 1423 | c++; |
| 1424 | } | |
|
7095
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 | } else { /* opening tag */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1427 | ALLOW_TAG("blockquote"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1428 | ALLOW_TAG("cite"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1429 | ALLOW_TAG("div"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1430 | ALLOW_TAG("em"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1431 | ALLOW_TAG("h1"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1432 | ALLOW_TAG("h2"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1433 | ALLOW_TAG("h3"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1434 | ALLOW_TAG("h4"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1435 | ALLOW_TAG("h5"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1436 | ALLOW_TAG("h6"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1437 | /* we only allow html to start the message */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1438 | if(c == html) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1439 | ALLOW_TAG("html"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1440 | ALLOW_TAG_ALT("i", "em"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1441 | ALLOW_TAG_ALT("italic", "em"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1442 | ALLOW_TAG("li"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1443 | ALLOW_TAG("ol"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1444 | ALLOW_TAG("p"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1445 | ALLOW_TAG("pre"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1446 | ALLOW_TAG("q"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1447 | ALLOW_TAG("span"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1448 | 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
|
1449 | |
|
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
|
1450 | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1451 | /* 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
|
1452 | * we still want to send something sensible, so we put a |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1453 | * linebreak in its place. <BR> also needs special handling |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1454 | * because putting a </BR> to close it would just be dumb. */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1455 | if((!g_ascii_strncasecmp(c, "<br", 3) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1456 | || !g_ascii_strncasecmp(c, "<hr", 3)) |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1457 | && (*(c+3) == '>' || |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1458 | !g_ascii_strncasecmp(c+3, "/>", 2) || |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1459 | !g_ascii_strncasecmp(c+3, " />", 3))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1460 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1461 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1462 | xhtml = g_string_append(xhtml, "<br/>"); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1463 | if(plain && *c != '\n') |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1464 | plain = g_string_append_c(plain, '\n'); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1465 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1466 | } |
|
22313
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1467 | if(!g_ascii_strncasecmp(c, "<b>", 3) || !g_ascii_strncasecmp(c, "<bold>", strlen("<bold>")) || !g_ascii_strncasecmp(c, "<strong>", strlen("<strong>"))) { |
| 15884 | 1468 | 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
|
1469 | if (*(c+2) == '>') |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1470 | 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
|
1471 | 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
|
1472 | 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
|
1473 | else |
|
99ace937826d
Change purple_markup_html_to_xhtml() to convert <strong> tags to
Mark Doliner <markdoliner@pidgin.im>
parents:
22217
diff
changeset
|
1474 | pt->src_tag = "strong"; |
| 14395 | 1475 | pt->dest_tag = "span"; |
| 1476 | tags = g_list_prepend(tags, pt); | |
| 1477 | c = strchr(c, '>') + 1; | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1478 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1479 | xhtml = g_string_append(xhtml, "<span style='font-weight: bold;'>"); |
| 14395 | 1480 | continue; |
| 1481 | } | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1482 | if(!g_ascii_strncasecmp(c, "<u>", 3) || !g_ascii_strncasecmp(c, "<underline>", strlen("<underline>"))) { |
| 15884 | 1483 | 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
|
1484 | pt->src_tag = *(c+2) == '>' ? "u" : "underline"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1485 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1486 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1487 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1488 | if (xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1489 | xhtml = g_string_append(xhtml, "<span style='text-decoration: underline;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1490 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1491 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1492 | if(!g_ascii_strncasecmp(c, "<s>", 3) || !g_ascii_strncasecmp(c, "<strike>", strlen("<strike>"))) { |
| 15884 | 1493 | 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
|
1494 | pt->src_tag = *(c+2) == '>' ? "s" : "strike"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1495 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1496 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1497 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1498 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1499 | 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
|
1500 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1501 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1502 | if(!g_ascii_strncasecmp(c, "<sub>", 5)) { |
| 15884 | 1503 | 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
|
1504 | pt->src_tag = "sub"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1505 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1506 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1507 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1508 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1509 | xhtml = g_string_append(xhtml, "<span style='vertical-align:sub;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1510 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1511 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1512 | if(!g_ascii_strncasecmp(c, "<sup>", 5)) { |
| 15884 | 1513 | 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
|
1514 | pt->src_tag = "sup"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1515 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1516 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1517 | c = strchr(c, '>') + 1; |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1518 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1519 | xhtml = g_string_append(xhtml, "<span style='vertical-align:super;'>"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1520 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1521 | } |
|
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
|
1522 | if(!g_ascii_strncasecmp(c, "<img", 4) && (*(c+4) == '>' || *(c+4) == ' ')) { |
|
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
|
1523 | const char *p = 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
|
1524 | GString *src = NULL, *alt = NULL; |
|
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
|
1525 | while(*p && *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
|
1526 | if(!g_ascii_strncasecmp(p, "src=", strlen("src="))) { |
|
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
|
1527 | const char *q = p + strlen("src="); |
|
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
|
1528 | src = g_string_new(""); |
|
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
|
1529 | if(*q == '\'' || *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
|
1530 | 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
|
1531 | while(*q && *q != '\"' && *q != '\'' && *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
|
1532 | 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
|
1533 | 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
|
1534 | } |
|
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
|
1535 | p = 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
|
1536 | } else if(!g_ascii_strncasecmp(p, "alt=", strlen("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
|
1537 | const char *q = p + strlen("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
|
1538 | alt = g_string_new(""); |
|
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
|
1539 | if(*q == '\'' || *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
|
1540 | 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
|
1541 | while(*q && *q != '\"' && *q != '\'' && *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
|
1542 | 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
|
1543 | 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
|
1544 | } |
|
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
|
1545 | p = 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
|
1546 | } |
|
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
|
1547 | 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
|
1548 | } |
|
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
|
1549 | if ((c = strchr(c, '>')) != NULL) |
|
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
|
1550 | 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
|
1551 | 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
|
1552 | 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
|
1553 | /* 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
|
1554 | 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
|
1555 | 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
|
1556 | 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
|
1557 | 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
|
1558 | 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
|
1559 | 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
|
1560 | 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
|
1561 | 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
|
1562 | } |
|
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
|
1563 | 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
|
1564 | 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
|
1565 | } |
|
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 | if(!g_ascii_strncasecmp(c, "<a", 2) && (*(c+2) == '>' || *(c+2) == ' ')) { |
|
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
|
1567 | const char *p = 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
|
1568 | struct purple_parse_tag *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
|
1569 | while(*p && *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
|
1570 | if(!g_ascii_strncasecmp(p, "href=", strlen("href="))) { |
|
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
|
1571 | const char *q = p + strlen("href="); |
|
20656
9a092747dcea
Fix some incorrect assertions when G_DEBUG=fatal_warnings is set.
Daniel Atallah <datallah@pidgin.im>
parents:
20611
diff
changeset
|
1572 | if (url) |
|
9a092747dcea
Fix some incorrect assertions when G_DEBUG=fatal_warnings is set.
Daniel Atallah <datallah@pidgin.im>
parents:
20611
diff
changeset
|
1573 | 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
|
1574 | url = g_string_new(""); |
|
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
|
1575 | cdata = g_string_new(""); |
|
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
|
1576 | if(*q == '\'' || *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 | 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
|
1578 | while(*q && *q != '\"' && *q != '\'' && *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
|
1579 | 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
|
1580 | 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
|
1581 | 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
|
1582 | else |
|
4a0917337f8f
Escape any un-escaped entities in purple_markup_html_to_xhtml when parsing
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21453
diff
changeset
|
1583 | 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
|
1584 | 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
|
1585 | } |
|
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 | p = 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 | } |
|
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 | 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
|
1589 | } |
|
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
|
1590 | if ((c = strchr(c, '>')) != NULL) |
|
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
|
1591 | 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
|
1592 | 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
|
1593 | 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
|
1594 | 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
|
1595 | 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
|
1596 | 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
|
1597 | 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
|
1598 | if(xhtml) |
|
20263
6a3888aa5213
a patch from stu for html handling.
Luke Schierer <lschiere@pidgin.im>
parents:
20249
diff
changeset
|
1599 | 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
|
1600 | 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
|
1601 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1602 | if(!g_ascii_strncasecmp(c, "<font", 5) && (*(c+5) == '>' || *(c+5) == ' ')) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1603 | const char *p = c; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1604 | GString *style = g_string_new(""); |
| 15884 | 1605 | struct purple_parse_tag *pt; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1606 | while(*p && *p != '>') { |
| 8064 | 1607 | if(!g_ascii_strncasecmp(p, "back=", strlen("back="))) { |
| 1608 | const char *q = p + strlen("back="); | |
| 1609 | GString *color = g_string_new(""); | |
| 1610 | if(*q == '\'' || *q == '\"') | |
| 1611 | q++; | |
| 1612 | while(*q && *q != '\"' && *q != '\'' && *q != ' ') { | |
| 1613 | color = g_string_append_c(color, *q); | |
| 1614 | q++; | |
| 1615 | } | |
| 1616 | g_string_append_printf(style, "background: %s; ", color->str); | |
| 1617 | g_string_free(color, TRUE); | |
| 1618 | p = q; | |
| 1619 | } else if(!g_ascii_strncasecmp(p, "color=", strlen("color="))) { | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1620 | const char *q = p + strlen("color="); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1621 | GString *color = g_string_new(""); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1622 | if(*q == '\'' || *q == '\"') |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1623 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1624 | while(*q && *q != '\"' && *q != '\'' && *q != ' ') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1625 | color = g_string_append_c(color, *q); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1626 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1627 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1628 | g_string_append_printf(style, "color: %s; ", color->str); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1629 | g_string_free(color, TRUE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1630 | p = q; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1631 | } else if(!g_ascii_strncasecmp(p, "face=", strlen("face="))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1632 | const char *q = p + strlen("face="); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1633 | gboolean space_allowed = FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1634 | GString *face = g_string_new(""); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1635 | if(*q == '\'' || *q == '\"') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1636 | space_allowed = TRUE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1637 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1638 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1639 | while(*q && *q != '\"' && *q != '\'' && (space_allowed || *q != ' ')) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1640 | face = g_string_append_c(face, *q); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1641 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1642 | } |
|
13836
43be98fd1be0
[gaim-migrate @ 16283]
Brian Chu <roast@users.sourceforge.net>
parents:
13831
diff
changeset
|
1643 | 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
|
1644 | g_string_free(face, TRUE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1645 | p = q; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1646 | } else if(!g_ascii_strncasecmp(p, "size=", strlen("size="))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1647 | const char *q = p + strlen("size="); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1648 | int sz; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1649 | const char *size = "medium"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1650 | if(*q == '\'' || *q == '\"') |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1651 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1652 | sz = atoi(q); |
| 8686 | 1653 | switch (sz) |
| 1654 | { | |
| 1655 | case 1: | |
| 1656 | size = "xx-small"; | |
| 1657 | break; | |
| 1658 | case 2: | |
| 1659 | size = "x-small"; | |
| 1660 | break; | |
| 1661 | case 3: | |
| 1662 | size = "small"; | |
| 1663 | break; | |
| 1664 | case 4: | |
| 1665 | size = "medium"; | |
| 1666 | break; | |
| 1667 | case 5: | |
| 1668 | size = "large"; | |
| 1669 | break; | |
| 1670 | case 6: | |
| 1671 | size = "x-large"; | |
| 1672 | break; | |
| 1673 | case 7: | |
| 1674 | size = "xx-large"; | |
| 1675 | break; | |
| 1676 | default: | |
| 1677 | break; | |
| 1678 | } | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1679 | g_string_append_printf(style, "font-size: %s; ", size); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1680 | p = q; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1681 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1682 | p++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1683 | } |
|
10593
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1684 | if ((c = strchr(c, '>')) != NULL) |
|
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1685 | c++; |
|
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1686 | else |
|
cba16404d664
[gaim-migrate @ 12005]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10589
diff
changeset
|
1687 | c = p; |
| 15884 | 1688 | pt = g_new0(struct purple_parse_tag, 1); |
| 8064 | 1689 | pt->src_tag = "font"; |
| 1690 | pt->dest_tag = "span"; | |
| 1691 | 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
|
1692 | if(style->len && xhtml) |
|
18108
cb8669f16994
merge of 'bab0b0bcb66485f4114afcd894f2f45d4b4ef15e'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
diff
changeset
|
1693 | g_string_append_printf(xhtml, "<span style='%s'>", g_strstrip(style->str)); |
| 8064 | 1694 | else |
| 1695 | pt->ignore = TRUE; | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1696 | g_string_free(style, TRUE); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1697 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1698 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1699 | if(!g_ascii_strncasecmp(c, "<body ", 6)) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1700 | const char *p = c; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1701 | gboolean did_something = FALSE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1702 | while(*p && *p != '>') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1703 | if(!g_ascii_strncasecmp(p, "bgcolor=", strlen("bgcolor="))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1704 | const char *q = p + strlen("bgcolor="); |
| 15884 | 1705 | 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
|
1706 | GString *color = g_string_new(""); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1707 | if(*q == '\'' || *q == '\"') |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1708 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1709 | while(*q && *q != '\"' && *q != '\'' && *q != ' ') { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1710 | color = g_string_append_c(color, *q); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1711 | q++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1712 | } |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1713 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1714 | 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
|
1715 | g_string_free(color, TRUE); |
|
10623
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1716 | if ((c = strchr(c, '>')) != NULL) |
|
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1717 | c++; |
|
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1718 | else |
|
33b965c36d84
[gaim-migrate @ 12094]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10614
diff
changeset
|
1719 | c = p; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1720 | pt->src_tag = "body"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1721 | pt->dest_tag = "span"; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1722 | tags = g_list_prepend(tags, pt); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1723 | did_something = TRUE; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1724 | break; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1725 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1726 | p++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1727 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1728 | if(did_something) continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1729 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1730 | /* this has to come after the special case for bgcolor */ |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1731 | ALLOW_TAG("body"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1732 | if(!g_ascii_strncasecmp(c, "<!--", strlen("<!--"))) { |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1733 | char *p = strstr(c + strlen("<!--"), "-->"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1734 | if(p) { |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1735 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1736 | xhtml = g_string_append(xhtml, "<!--"); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1737 | c += strlen("<!--"); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1738 | continue; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1739 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1740 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1741 | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1742 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1743 | xhtml = g_string_append(xhtml, "<"); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1744 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1745 | plain = g_string_append_c(plain, '<'); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1746 | c++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1747 | } |
| 7287 | 1748 | } else if(*c == '&') { |
| 1749 | char buf[7]; | |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1750 | const char *pln; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1751 | int len; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1752 | |
| 16144 | 1753 | if ((pln = purple_markup_unescape_entity(c, &len)) == NULL) { |
| 7287 | 1754 | len = 1; |
| 1755 | g_snprintf(buf, sizeof(buf), "%c", *c); | |
| 1756 | pln = buf; | |
| 1757 | } | |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1758 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1759 | xhtml = g_string_append_len(xhtml, c, len); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1760 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1761 | plain = g_string_append(plain, pln); |
|
21451
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1762 | if(cdata) |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1763 | cdata = g_string_append_len(cdata, c, len); |
| 7287 | 1764 | c += len; |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1765 | } else { |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1766 | if(xhtml) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1767 | xhtml = g_string_append_c(xhtml, *c); |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1768 | if(plain) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1769 | 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
|
1770 | 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
|
1771 | cdata = g_string_append_c(cdata, *c); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1772 | c++; |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1773 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1774 | } |
|
17572
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1775 | if(xhtml) { |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1776 | for (tag = tags; tag ; tag = tag->next) { |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1777 | struct purple_parse_tag *pt = tag->data; |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1778 | if(!pt->ignore) |
|
2f24c76fbb7c
In purple_markup_html_to_xhtml:
Richard Laager <rlaager@pidgin.im>
parents:
17571
diff
changeset
|
1779 | 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
|
1780 | } |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1781 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1782 | g_list_free(tags); |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1783 | if(xhtml_out) |
|
17571
b77a5881459f
Remove needless string duplication.
Richard Laager <rlaager@pidgin.im>
parents:
17541
diff
changeset
|
1784 | *xhtml_out = g_string_free(xhtml, FALSE); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1785 | if(plain_out) |
|
17571
b77a5881459f
Remove needless string duplication.
Richard Laager <rlaager@pidgin.im>
parents:
17541
diff
changeset
|
1786 | *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
|
1787 | if(url) |
|
5be99af1b48b
This was crashing for me when writing a system message when logging
Mark Doliner <markdoliner@pidgin.im>
parents:
18741
diff
changeset
|
1788 | g_string_free(url, TRUE); |
|
21451
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1789 | if (cdata) |
|
ffa5c6863537
applied changes from 0919212f5a8cf4a13c877f98d42baf7e337b33e7
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21441
diff
changeset
|
1790 | g_string_free(cdata, TRUE); |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1791 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1792 | |
| 9161 | 1793 | /* The following are probably reasonable changes: |
| 1794 | * - \n should be converted to a normal space | |
| 1795 | * - in addition to <br>, <p> and <div> etc. should also be converted into \n | |
| 9241 | 1796 | * - We want to turn </td>#whitespace<td> sequences into a single tab |
| 1797 | * - We want to turn <td> into a single tab (for msn profile "parsing") | |
| 9161 | 1798 | * - We want to turn </tr>#whitespace<tr> sequences into a single \n |
| 9241 | 1799 | * - <script>...</script> and <style>...</style> should be completely removed |
| 9161 | 1800 | */ |
| 1801 | ||
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1802 | char * |
| 15884 | 1803 | purple_markup_strip_html(const char *str) |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1804 | { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1805 | int i, j, k, entlen; |
| 7103 | 1806 | gboolean visible = TRUE; |
| 9161 | 1807 | gboolean closing_td_p = FALSE; |
| 7103 | 1808 | gchar *str2; |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1809 | const gchar *cdata_close_tag = NULL, *ent; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1810 | gchar *href = NULL; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1811 | int href_st = 0; |
| 7103 | 1812 | |
| 7110 | 1813 | if(!str) |
| 1814 | return NULL; | |
| 7103 | 1815 | |
| 1816 | str2 = g_strdup(str); | |
| 1817 | ||
| 1818 | for (i = 0, j = 0; str2[i]; i++) | |
| 1819 | { | |
| 1820 | if (str2[i] == '<') | |
| 1821 | { | |
| 9241 | 1822 | if (cdata_close_tag) |
| 9161 | 1823 | { |
| 9241 | 1824 | /* 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
|
1825 | if (g_ascii_strncasecmp(str2 + i, cdata_close_tag, |
| 9241 | 1826 | strlen(cdata_close_tag)) == 0) |
| 1827 | { | |
| 1828 | i += strlen(cdata_close_tag) - 1; | |
| 1829 | cdata_close_tag = NULL; | |
| 1830 | } | |
| 1831 | continue; | |
| 1832 | } | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1833 | else if (g_ascii_strncasecmp(str2 + i, "<td", 3) == 0 && closing_td_p) |
| 9241 | 1834 | { |
| 1835 | str2[j++] = '\t'; | |
| 9161 | 1836 | visible = TRUE; |
| 1837 | } | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1838 | else if (g_ascii_strncasecmp(str2 + i, "</td>", 5) == 0) |
| 8517 | 1839 | { |
| 9161 | 1840 | closing_td_p = TRUE; |
| 1841 | visible = FALSE; | |
| 1842 | } | |
| 1843 | else | |
| 1844 | { | |
| 1845 | closing_td_p = FALSE; | |
| 1846 | visible = TRUE; | |
| 8517 | 1847 | } |
| 1848 | ||
| 7103 | 1849 | k = i + 1; |
| 1850 | ||
| 1851 | if(g_ascii_isspace(str2[k])) | |
| 1852 | visible = TRUE; | |
| 9170 | 1853 | else if (str2[k]) |
| 7103 | 1854 | { |
| 9161 | 1855 | /* Scan until we end the tag either implicitly (closed start |
| 1856 | * tag) or explicitly, using a sloppy method (i.e., < or > | |
| 1857 | * inside quoted attributes will screw us up) | |
| 1858 | */ | |
| 1859 | while (str2[k] && str2[k] != '<' && str2[k] != '>') | |
| 7103 | 1860 | { |
| 1861 | k++; | |
| 1862 | } | |
| 9241 | 1863 | |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1864 | /* 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
|
1865 | * 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
|
1866 | 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
|
1867 | g_ascii_isspace(str2[i+2])) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1868 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1869 | int st; /* start of href, inclusive [ */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1870 | int end; /* end of href, exclusive ) */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1871 | char delim = ' '; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1872 | /* Find start of href */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1873 | for (st = i + 3; st < k; st++) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1874 | { |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1875 | 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
|
1876 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1877 | st += 5; |
|
16230
291f0932fac8
This was causing problems with jabber in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16214
diff
changeset
|
1878 | if (str2[st] == '"' || str2[st] == '\'') |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1879 | { |
|
16230
291f0932fac8
This was causing problems with jabber in finch.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
16214
diff
changeset
|
1880 | delim = str2[st]; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1881 | st++; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1882 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1883 | break; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1884 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1885 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1886 | /* find end of address */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1887 | for (end = st; end < k && str2[end] != delim; end++) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1888 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1889 | /* 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
|
1890 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1891 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1892 | /* 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
|
1893 | * already one saved, kill it. */ |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1894 | if (st < k) |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1895 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1896 | char *tmp; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1897 | g_free(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1898 | tmp = g_strndup(str2 + st, end - st); |
| 15884 | 1899 | href = purple_unescape_html(tmp); |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1900 | g_free(tmp); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1901 | href_st = j; |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1902 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1903 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1904 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1905 | /* Replace </a> with an ascii representation of the |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1906 | * 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
|
1907 | 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
|
1908 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1909 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1910 | size_t hrlen = strlen(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1911 | |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1912 | /* 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
|
1913 | if ((hrlen != j - href_st || |
|
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1914 | strncmp(str2 + href_st, href, hrlen)) && |
|
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1915 | (hrlen != j - href_st + 7 || /* 7 == strlen("http://") */ |
|
1fb40d5d76e7
[gaim-migrate @ 14976]
Richard Laager <rlaager@pidgin.im>
parents:
12628
diff
changeset
|
1916 | strncmp(str2 + href_st, href + 7, hrlen - 7))) |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1917 | { |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1918 | str2[j++] = ' '; |
|
12628
35043a7fb16c
[gaim-migrate @ 14964]
Richard Laager <rlaager@pidgin.im>
parents:
12622
diff
changeset
|
1919 | str2[j++] = '('; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1920 | g_memmove(str2 + j, href, hrlen); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1921 | j += hrlen; |
|
12628
35043a7fb16c
[gaim-migrate @ 14964]
Richard Laager <rlaager@pidgin.im>
parents:
12622
diff
changeset
|
1922 | str2[j++] = ')'; |
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1923 | g_free(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1924 | href = NULL; |
|
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 | } |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1927 | |
| 9161 | 1928 | /* Check for tags which should be mapped to newline */ |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1929 | else if (g_ascii_strncasecmp(str2 + i, "<p>", 3) == 0 |
|
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1930 | || g_ascii_strncasecmp(str2 + i, "<tr", 3) == 0 |
|
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1931 | || 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
|
1932 | || g_ascii_strncasecmp(str2 + i, "<hr", 3) == 0 |
|
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1933 | || g_ascii_strncasecmp(str2 + i, "<li", 3) == 0 |
|
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1934 | || g_ascii_strncasecmp(str2 + i, "<div", 4) == 0 |
|
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1935 | || g_ascii_strncasecmp(str2 + i, "</table>", 8) == 0) |
| 9161 | 1936 | { |
| 1937 | str2[j++] = '\n'; | |
| 1938 | } | |
| 9241 | 1939 | /* Check for tags which begin CDATA and need to be closed */ |
| 1940 | #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
|
1941 | else if (g_ascii_strncasecmp(str2 + i, "<option", 7) == 0) |
| 9241 | 1942 | { |
| 1943 | /* FIXME: We should not do this if the OPTION is SELECT'd */ | |
| 1944 | cdata_close_tag = "</option>"; | |
| 1945 | } | |
| 1946 | #endif | |
|
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 (g_ascii_strncasecmp(str2 + i, "<script", 7) == 0) |
| 9241 | 1948 | { |
| 1949 | cdata_close_tag = "</script>"; | |
| 1950 | } | |
|
18551
b66ed9a5408e
Replace some strncasecmp() calls with g_ascii_strncasecmp() as part of the
Nick Hebner <hebnern@gmail.com>
parents:
18317
diff
changeset
|
1951 | else if (g_ascii_strncasecmp(str2 + i, "<style", 6) == 0) |
| 9241 | 1952 | { |
| 1953 | cdata_close_tag = "</style>"; | |
| 1954 | } | |
| 9161 | 1955 | /* Update the index and continue checking after the tag */ |
|
10731
8d817cb4268b
[gaim-migrate @ 12333]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10700
diff
changeset
|
1956 | i = (str2[k] == '<' || str2[k] == '\0')? k - 1: k; |
| 9161 | 1957 | continue; |
| 7103 | 1958 | } |
| 1959 | } | |
| 9241 | 1960 | else if (cdata_close_tag) |
| 1961 | { | |
| 1962 | continue; | |
| 1963 | } | |
| 9161 | 1964 | else if (!g_ascii_isspace(str2[i])) |
| 7103 | 1965 | { |
| 1966 | visible = TRUE; | |
| 1967 | } | |
| 1968 | ||
| 16144 | 1969 | if (str2[i] == '&' && (ent = purple_markup_unescape_entity(str2 + i, &entlen)) != NULL) |
| 8517 | 1970 | { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1971 | while (*ent) |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1972 | str2[j++] = *ent++; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
1973 | i += entlen - 1; |
| 9273 | 1974 | continue; |
| 1975 | } | |
| 1976 | ||
| 7103 | 1977 | if (visible) |
| 9161 | 1978 | str2[j++] = g_ascii_isspace(str2[i])? ' ': str2[i]; |
| 7103 | 1979 | } |
| 1980 | ||
|
12620
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1981 | g_free(href); |
|
991d2aed617f
[gaim-migrate @ 14956]
Dennis Lambe Jr. <malsyned@users.sourceforge.net>
parents:
12483
diff
changeset
|
1982 | |
| 7103 | 1983 | str2[j] = '\0'; |
| 1984 | ||
| 1985 | return str2; | |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1986 | } |
|
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
1987 | |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
1988 | static gboolean |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1989 | badchar(char c) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1990 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1991 | switch (c) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1992 | case ' ': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1993 | case ',': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1994 | case '\0': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1995 | case '\n': |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
1996 | case '\r': |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1997 | case '<': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1998 | case '>': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
1999 | case '"': |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2000 | case '\'': |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2001 | return TRUE; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2002 | default: |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2003 | return FALSE; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2004 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2005 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2006 | |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2007 | static gboolean |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2008 | badentity(const char *c) |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2009 | { |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2010 | if (!g_ascii_strncasecmp(c, "<", 4) || |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2011 | !g_ascii_strncasecmp(c, ">", 4) || |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2012 | !g_ascii_strncasecmp(c, """, 6)) { |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2013 | return TRUE; |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2014 | } |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2015 | return FALSE; |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2016 | } |
|
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2017 | |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2018 | char * |
| 15884 | 2019 | purple_markup_linkify(const char *text) |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2020 | { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2021 | const char *c, *t, *q = NULL; |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
2022 | char *tmpurlbuf, *url_buf; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2023 | gunichar g; |
| 8538 | 2024 | gboolean inside_html = FALSE; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2025 | int inside_paren = 0; |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2026 | GString *ret = g_string_new(""); |
| 10372 | 2027 | /* Assumes you have a buffer able to carry at least BUF_LEN * 2 bytes */ |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2028 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2029 | c = text; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2030 | while (*c) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2031 | |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2032 | if(*c == '(' && !inside_html) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2033 | inside_paren++; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2034 | ret = g_string_append_c(ret, *c); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2035 | c++; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2036 | } |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2037 | |
| 8538 | 2038 | if(inside_html) { |
| 2039 | if(*c == '>') { | |
| 2040 | inside_html = FALSE; | |
| 2041 | } else if(!q && (*c == '\"' || *c == '\'')) { | |
| 2042 | q = c; | |
| 2043 | } else if(q) { | |
| 2044 | if(*c == *q) | |
| 2045 | q = NULL; | |
| 2046 | } | |
| 2047 | } else if(*c == '<') { | |
| 2048 | inside_html = TRUE; | |
| 9077 | 2049 | if (!g_ascii_strncasecmp(c, "<A", 2)) { |
| 2050 | while (1) { | |
| 2051 | if (!g_ascii_strncasecmp(c, "/A>", 3)) { | |
| 2052 | inside_html = FALSE; | |
| 2053 | break; | |
| 2054 | } | |
| 2055 | ret = g_string_append_c(ret, *c); | |
| 2056 | c++; | |
| 2057 | if (!(*c)) | |
| 2058 | break; | |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2059 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2060 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2061 | } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2062 | (!g_ascii_strncasecmp(c, "https://", 8)))) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2063 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2064 | while (1) { |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2065 | if (badchar(*t) || badentity(t)) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2066 | |
| 17254 | 2067 | if ((!g_ascii_strncasecmp(c, "http://", 7) && (t - c == 7)) || |
| 2068 | (!g_ascii_strncasecmp(c, "https://", 8) && (t - c == 8))) { | |
| 2069 | break; | |
| 2070 | } | |
| 2071 | ||
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2072 | if (*(t) == ',' && (*(t + 1) != ' ')) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2073 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2074 | continue; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2075 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2076 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2077 | if (*(t - 1) == '.') |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2078 | t--; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2079 | if ((*(t - 1) == ')' && (inside_paren > 0))) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2080 | t--; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2081 | } |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2082 | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2083 | url_buf = g_strndup(c, t - c); |
| 15884 | 2084 | tmpurlbuf = purple_unescape_html(url_buf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2085 | g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 8918 | 2086 | tmpurlbuf, url_buf); |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2087 | g_free(url_buf); |
| 8918 | 2088 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2089 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2090 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2091 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2092 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2093 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2094 | } |
|
13772
f4c5bc2d6b71
[gaim-migrate @ 16182]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
13646
diff
changeset
|
2095 | } else if (!g_ascii_strncasecmp(c, "www.", 4) && (c == text || badchar(c[-1]) || badentity(c-1))) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2096 | if (c[4] != '.') { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2097 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2098 | while (1) { |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2099 | if (badchar(*t) || badentity(t)) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2100 | if (t - c == 4) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2101 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2102 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2103 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2104 | if (*(t) == ',' && (*(t + 1) != ' ')) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2105 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2106 | continue; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2107 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2108 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2109 | if (*(t - 1) == '.') |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2110 | t--; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2111 | if ((*(t - 1) == ')' && (inside_paren > 0))) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2112 | t--; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2113 | } |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2114 | url_buf = g_strndup(c, t - c); |
| 15884 | 2115 | tmpurlbuf = purple_unescape_html(url_buf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2116 | g_string_append_printf(ret, |
| 8918 | 2117 | "<A HREF=\"http://%s\">%s</A>", tmpurlbuf, |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2118 | url_buf); |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2119 | g_free(url_buf); |
| 8918 | 2120 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2121 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2122 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2123 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2124 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2125 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2126 | } |
| 14383 | 2127 | } else if (!g_ascii_strncasecmp(c, "ftp://", 6) || !g_ascii_strncasecmp(c, "sftp://", 7)) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2128 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2129 | while (1) { |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2130 | if (badchar(*t) || badentity(t)) { |
| 17254 | 2131 | |
| 2132 | if ((!g_ascii_strncasecmp(c, "ftp://", 6) && (t - c == 6)) || | |
| 2133 | (!g_ascii_strncasecmp(c, "sftp://", 7) && (t - c == 7))) { | |
| 2134 | break; | |
| 2135 | } | |
| 2136 | ||
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2137 | if (*(t - 1) == '.') |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2138 | t--; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2139 | if ((*(t - 1) == ')' && (inside_paren > 0))) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2140 | t--; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2141 | } |
|
10905
56943fe311c2
[gaim-migrate @ 12634]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10902
diff
changeset
|
2142 | url_buf = g_strndup(c, t - c); |
| 15884 | 2143 | tmpurlbuf = purple_unescape_html(url_buf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2144 | g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 8918 | 2145 | tmpurlbuf, url_buf); |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2146 | g_free(url_buf); |
| 8918 | 2147 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2148 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2149 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2150 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2151 | if (!t) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2152 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2153 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2154 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2155 | } |
|
13772
f4c5bc2d6b71
[gaim-migrate @ 16182]
Jérôme Poulin <ticpu@users.sourceforge.net>
parents:
13646
diff
changeset
|
2156 | } else if (!g_ascii_strncasecmp(c, "ftp.", 4) && (c == text || badchar(c[-1]) || badentity(c-1))) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2157 | if (c[4] != '.') { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2158 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2159 | while (1) { |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2160 | if (badchar(*t) || badentity(t)) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2161 | if (t - c == 4) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2162 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2163 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2164 | if (*(t - 1) == '.') |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2165 | t--; |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2166 | if ((*(t - 1) == ')' && (inside_paren > 0))) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2167 | t--; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2168 | } |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2169 | url_buf = g_strndup(c, t - c); |
| 15884 | 2170 | tmpurlbuf = purple_unescape_html(url_buf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2171 | g_string_append_printf(ret, |
| 8918 | 2172 | "<A HREF=\"ftp://%s\">%s</A>", tmpurlbuf, |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2173 | url_buf); |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2174 | g_free(url_buf); |
| 8918 | 2175 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2176 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2177 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2178 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2179 | if (!t) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2180 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2181 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2182 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2183 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2184 | } else if (!g_ascii_strncasecmp(c, "mailto:", 7)) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2185 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2186 | while (1) { |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2187 | if (badchar(*t) || badentity(t)) { |
| 17254 | 2188 | char *d; |
| 2189 | if (t - c == 7) { | |
| 2190 | break; | |
| 2191 | } | |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2192 | if (*(t - 1) == '.') |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2193 | t--; |
| 17254 | 2194 | if ((d = strstr(c + 7, "?")) != NULL && d < t) |
| 2195 | url_buf = g_strndup(c + 7, d - c - 7); | |
| 2196 | else | |
| 2197 | url_buf = g_strndup(c + 7, t - c - 7); | |
| 2198 | if (!purple_email_is_valid(url_buf)) { | |
| 2199 | g_free(url_buf); | |
| 2200 | break; | |
| 2201 | } | |
| 2202 | g_free(url_buf); | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2203 | url_buf = g_strndup(c, t - c); |
| 15884 | 2204 | tmpurlbuf = purple_unescape_html(url_buf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2205 | g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", |
| 8918 | 2206 | tmpurlbuf, url_buf); |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2207 | g_free(url_buf); |
| 8918 | 2208 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2209 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2210 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2211 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2212 | if (!t) |
|
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 | t++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2215 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2216 | } |
| 17254 | 2217 | } else if ((*c=='x') && (!g_ascii_strncasecmp(c, "xmpp:", 5)) && |
| 2218 | (c == text || badchar(c[-1]) || badentity(c-1))) { | |
| 2219 | t = c; | |
| 2220 | while (1) { | |
| 2221 | if (badchar(*t) || badentity(t)) { | |
| 2222 | ||
| 2223 | if (t - c == 5) { | |
| 2224 | break; | |
| 2225 | } | |
| 2226 | ||
| 2227 | if (*(t) == ',' && (*(t + 1) != ' ')) { | |
| 2228 | t++; | |
| 2229 | continue; | |
| 2230 | } | |
| 2231 | ||
| 2232 | if (*(t - 1) == '.') | |
| 2233 | t--; | |
| 2234 | if ((*(t - 1) == ')' && (inside_paren > 0))) { | |
| 2235 | t--; | |
| 2236 | } | |
| 2237 | ||
| 2238 | url_buf = g_strndup(c, t - c); | |
| 2239 | tmpurlbuf = purple_unescape_html(url_buf); | |
| 2240 | g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", | |
| 2241 | tmpurlbuf, url_buf); | |
| 2242 | g_free(url_buf); | |
| 2243 | g_free(tmpurlbuf); | |
| 2244 | c = t; | |
| 2245 | break; | |
| 2246 | } | |
| 2247 | t++; | |
| 2248 | ||
| 2249 | } | |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2250 | } else if (c != text && (*c == '@')) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2251 | int flag; |
|
10905
56943fe311c2
[gaim-migrate @ 12634]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10902
diff
changeset
|
2252 | GString *gurl_buf = NULL; |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2253 | const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2254 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2255 | if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2256 | flag = 0; |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2257 | else { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2258 | flag = 1; |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2259 | gurl_buf = g_string_new(""); |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2260 | } |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2261 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2262 | t = c; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2263 | while (flag) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2264 | /* iterate backwards grabbing the local part of an email address */ |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2265 | g = g_utf8_get_char(t); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2266 | if (badchar(*t) || (g >= 127) || (*t == '(') || |
|
11176
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11153
diff
changeset
|
2267 | ((*t == ';') && ((t > (text+2) && (!g_ascii_strncasecmp(t - 3, "<", 4) || |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11153
diff
changeset
|
2268 | !g_ascii_strncasecmp(t - 3, ">", 4))) || |
|
a7b860aa756e
[gaim-migrate @ 13283]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11153
diff
changeset
|
2269 | (t > (text+4) && (!g_ascii_strncasecmp(t - 5, """, 6)))))) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2270 | /* local part will already be part of ret, strip it out */ |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2271 | ret = g_string_truncate(ret, ret->len - (c - t)); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2272 | ret = g_string_append_unichar(ret, g); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2273 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2274 | } else { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2275 | g_string_prepend_unichar(gurl_buf, g); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2276 | t = g_utf8_find_prev_char(text, t); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2277 | if (t < text) { |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2278 | ret = g_string_assign(ret, ""); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2279 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2280 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2281 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2282 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2283 | |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2284 | t = g_utf8_find_next_char(c, NULL); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2285 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2286 | while (flag) { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2287 | /* iterate forwards grabbing the domain part of an email address */ |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2288 | g = g_utf8_get_char(t); |
|
10461
8125858d1d5f
[gaim-migrate @ 11733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10459
diff
changeset
|
2289 | if (badchar(*t) || (g >= 127) || (*t == ')') || badentity(t)) { |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2290 | char *d; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2291 | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2292 | url_buf = g_string_free(gurl_buf, FALSE); |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2293 | |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2294 | /* strip off trailing periods */ |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2295 | if (strlen(url_buf) > 0) { |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2296 | for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2297 | *d = '\0'; |
|
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2298 | } |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2299 | |
| 15884 | 2300 | tmpurlbuf = purple_unescape_html(url_buf); |
| 2301 | if (purple_email_is_valid(tmpurlbuf)) { | |
| 9045 | 2302 | g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", |
| 2303 | tmpurlbuf, url_buf); | |
| 2304 | } else { | |
| 2305 | g_string_append(ret, url_buf); | |
| 2306 | } | |
|
10902
7b3ac6bd1bba
[gaim-migrate @ 12624]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10876
diff
changeset
|
2307 | g_free(url_buf); |
| 8918 | 2308 | g_free(tmpurlbuf); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2309 | c = t; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2310 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2311 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2312 | } else { |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2313 | g_string_append_unichar(gurl_buf, g); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2314 | t = g_utf8_find_next_char(t, NULL); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2315 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2316 | } |
|
9222
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2317 | } |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2318 | |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2319 | if(*c == ')' && !inside_html) { |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2320 | inside_paren--; |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2321 | ret = g_string_append_c(ret, *c); |
|
e15847e6086a
[gaim-migrate @ 10018]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9220
diff
changeset
|
2322 | c++; |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2323 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2324 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2325 | if (*c == 0) |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2326 | break; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2327 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2328 | ret = g_string_append_c(ret, *c); |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2329 | c++; |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2330 | |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2331 | } |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
2332 | return g_string_free(ret, FALSE); |
|
7107
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2333 | } |
|
903864ff76c3
[gaim-migrate @ 7672]
Christian Hammond <chipx86@chipx86.com>
parents:
7106
diff
changeset
|
2334 | |
| 8163 | 2335 | char * |
| 15884 | 2336 | purple_unescape_html(const char *html) { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2337 | if (html != NULL) { |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2338 | const char *c = html; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2339 | GString *ret = g_string_new(""); |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2340 | while (*c) { |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2341 | int len; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2342 | const char *ent; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2343 | |
| 16144 | 2344 | if ((ent = purple_markup_unescape_entity(c, &len)) != NULL) { |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2345 | ret = g_string_append(ret, ent); |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2346 | c += len; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2347 | } else if (!strncmp(c, "<br>", 4)) { |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2348 | ret = g_string_append_c(ret, '\n'); |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2349 | c += 4; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2350 | } else { |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2351 | ret = g_string_append_c(ret, *c); |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2352 | c++; |
|
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2353 | } |
| 8442 | 2354 | } |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2355 | return g_string_free(ret, FALSE); |
| 8442 | 2356 | } |
|
14101
89a79c2a971e
[gaim-migrate @ 16643]
Mark Doliner <markdoliner@pidgin.im>
parents:
14097
diff
changeset
|
2357 | |
|
14233
4f5fe687b21d
[gaim-migrate @ 16821]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
14183
diff
changeset
|
2358 | return NULL; |
| 8442 | 2359 | } |
| 2360 | ||
| 9175 | 2361 | char * |
| 15884 | 2362 | purple_markup_slice(const char *str, guint x, guint y) |
| 9175 | 2363 | { |
| 2364 | GString *ret; | |
| 2365 | GQueue *q; | |
| 2366 | guint z = 0; | |
| 2367 | gboolean appended = FALSE; | |
| 2368 | gunichar c; | |
| 2369 | char *tag; | |
| 2370 | ||
| 2371 | g_return_val_if_fail(x <= y, NULL); | |
| 2372 | ||
| 2373 | if (x == y) | |
| 2374 | return g_strdup(""); | |
| 2375 | ||
| 2376 | ret = g_string_new(""); | |
| 2377 | q = g_queue_new(); | |
| 2378 | ||
| 2379 | while (*str && (z < y)) { | |
| 2380 | c = g_utf8_get_char(str); | |
| 2381 | ||
| 2382 | if (c == '<') { | |
| 2383 | char *end = strchr(str, '>'); | |
| 2384 | ||
| 2385 | if (!end) { | |
| 2386 | g_string_free(ret, TRUE); | |
| 2387 | while ((tag = g_queue_pop_head(q))) | |
| 2388 | g_free(tag); | |
| 2389 | g_queue_free(q); | |
| 2390 | return NULL; | |
| 2391 | } | |
| 2392 | ||
| 2393 | if (!g_ascii_strncasecmp(str, "<img ", 5)) { | |
| 2394 | z += strlen("[Image]"); | |
| 2395 | } else if (!g_ascii_strncasecmp(str, "<br", 3)) { | |
| 2396 | z += 1; | |
| 2397 | } else if (!g_ascii_strncasecmp(str, "<hr>", 4)) { | |
| 2398 | z += strlen("\n---\n"); | |
| 2399 | } else if (!g_ascii_strncasecmp(str, "</", 2)) { | |
| 2400 | /* pop stack */ | |
| 2401 | char *tmp; | |
| 2402 | ||
| 2403 | tmp = g_queue_pop_head(q); | |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
2404 | g_free(tmp); |
| 9175 | 2405 | /* z += 0; */ |
| 2406 | } else { | |
| 2407 | /* push it unto the stack */ | |
| 2408 | char *tmp; | |
| 2409 | ||
| 2410 | tmp = g_strndup(str, end - str + 1); | |
| 2411 | g_queue_push_head(q, tmp); | |
| 2412 | /* z += 0; */ | |
| 2413 | } | |
| 2414 | ||
| 13644 | 2415 | if (z >= x) { |
| 9175 | 2416 | g_string_append_len(ret, str, end - str + 1); |
| 2417 | } | |
| 2418 | ||
| 2419 | str = end; | |
| 2420 | } else if (c == '&') { | |
| 2421 | char *end = strchr(str, ';'); | |
| 2422 | if (!end) { | |
| 2423 | g_string_free(ret, TRUE); | |
| 2424 | while ((tag = g_queue_pop_head(q))) | |
| 2425 | g_free(tag); | |
| 2426 | g_queue_free(q); | |
| 2427 | ||
| 2428 | return NULL; | |
| 2429 | } | |
| 2430 | ||
| 2431 | if (z >= x) | |
| 2432 | g_string_append_len(ret, str, end - str + 1); | |
| 2433 | ||
| 2434 | z++; | |
| 2435 | str = end; | |
| 2436 | } else { | |
| 13644 | 2437 | if (z == x && z > 0 && !appended) { |
| 2438 | GList *l = q->tail; | |
| 2439 | ||
| 2440 | while (l) { | |
| 2441 | tag = l->data; | |
| 2442 | g_string_append(ret, tag); | |
| 2443 | l = l->prev; | |
| 2444 | } | |
| 2445 | appended = TRUE; | |
| 2446 | } | |
| 2447 | ||
| 9175 | 2448 | if (z >= x) |
| 2449 | g_string_append_unichar(ret, c); | |
| 2450 | z++; | |
| 2451 | } | |
| 2452 | ||
| 2453 | str = g_utf8_next_char(str); | |
| 2454 | } | |
| 2455 | ||
| 2456 | while ((tag = g_queue_pop_head(q))) { | |
| 2457 | char *name; | |
| 2458 | ||
| 15884 | 2459 | name = purple_markup_get_tag_name(tag); |
| 9175 | 2460 | g_string_append_printf(ret, "</%s>", name); |
| 2461 | g_free(name); | |
| 2462 | g_free(tag); | |
| 2463 | } | |
| 2464 | ||
| 2465 | g_queue_free(q); | |
| 2466 | return g_string_free(ret, FALSE); | |
| 2467 | } | |
| 2468 | ||
| 2469 | char * | |
| 15884 | 2470 | purple_markup_get_tag_name(const char *tag) |
| 9175 | 2471 | { |
| 2472 | int i; | |
| 2473 | g_return_val_if_fail(tag != NULL, NULL); | |
| 2474 | g_return_val_if_fail(*tag == '<', NULL); | |
| 2475 | ||
| 2476 | for (i = 1; tag[i]; i++) | |
| 2477 | if (tag[i] == '>' || tag[i] == ' ' || tag[i] == '/') | |
| 2478 | break; | |
| 2479 | ||
| 13644 | 2480 | return g_strndup(tag+1, i-1); |
| 9175 | 2481 | } |
| 2482 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2483 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2484 | * Path/Filename Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2485 | **************************************************************************/ |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2486 | const char * |
| 15884 | 2487 | purple_home_dir(void) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2488 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2489 | #ifndef _WIN32 |
|
11665
6b80cef9b563
[gaim-migrate @ 13950]
Michael Carlson <corfe83@users.sourceforge.net>
parents:
11656
diff
changeset
|
2490 | return g_get_home_dir(); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2491 | #else |
| 15884 | 2492 | return wpurple_data_dir(); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2493 | #endif |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2494 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2495 | |
|
16415
8cbcd9756090
Use ~/.purple only, never ~/.gaim. This is a revert of the functional
Richard Laager <rlaager@pidgin.im>
parents:
16230
diff
changeset
|
2496 | /* 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
|
2497 | const char * |
| 15884 | 2498 | purple_user_dir(void) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2499 | { |
|
18219
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2500 | 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
|
2501 | 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
|
2502 | 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
|
2503 | 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
|
2504 | |
|
7d5a7a92d0f5
Rename the internal home_dir variable to user_dir to match the function and
Richard Laager <rlaager@pidgin.im>
parents:
20330
diff
changeset
|
2505 | return user_dir; |
| 8596 | 2506 | } |
| 2507 | ||
| 15884 | 2508 | void purple_util_set_user_dir(const char *dir) |
| 8596 | 2509 | { |
|
18219
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2510 | 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
|
2511 | |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2512 | 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
|
2513 | 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
|
2514 | else |
|
c95d2009a0c7
Use dynamically allocated strings for the user_dir caching. Do we need to
Richard Laager <rlaager@pidgin.im>
parents:
18203
diff
changeset
|
2515 | custom_user_dir = NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2516 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2517 | |
| 15884 | 2518 | int purple_build_dir (const char *path, int mode) |
| 7612 | 2519 | { |
| 11361 | 2520 | #if GLIB_CHECK_VERSION(2,8,0) |
| 2521 | return g_mkdir_with_parents(path, mode); | |
| 2522 | #else | |
| 7612 | 2523 | char *dir, **components, delim[] = { G_DIR_SEPARATOR, '\0' }; |
| 2524 | int cur, len; | |
| 2525 | ||
| 7632 | 2526 | g_return_val_if_fail(path != NULL, -1); |
| 7612 | 2527 | |
| 2528 | dir = g_new0(char, strlen(path) + 1); | |
| 7622 | 2529 | components = g_strsplit(path, delim, -1); |
| 7612 | 2530 | len = 0; |
| 2531 | for (cur = 0; components[cur] != NULL; cur++) { | |
| 7633 | 2532 | /* If you don't know what you're doing on both |
| 2533 | * win32 and *NIX, stay the hell away from this code */ | |
| 2534 | if(cur > 1) | |
| 2535 | dir[len++] = G_DIR_SEPARATOR; | |
| 7612 | 2536 | strcpy(dir + len, components[cur]); |
| 2537 | len += strlen(components[cur]); | |
| 7633 | 2538 | if(cur == 0) |
| 2539 | dir[len++] = G_DIR_SEPARATOR; | |
| 7632 | 2540 | |
| 2541 | if(g_file_test(dir, G_FILE_TEST_IS_DIR)) { | |
| 2542 | continue; | |
|
10948
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2543 | #ifdef _WIN32 |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2544 | /* allow us to create subdirs on UNC paths |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2545 | * (\\machinename\path\to\blah) |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2546 | * g_file_test() doesn't work on "\\machinename" */ |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2547 | } else if (cur == 2 && dir[0] == '\\' && dir[1] == '\\' |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2548 | && components[cur + 1] != NULL) { |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2549 | continue; |
|
3a55085a2f33
[gaim-migrate @ 12747]
Daniel Atallah <datallah@pidgin.im>
parents:
10905
diff
changeset
|
2550 | #endif |
| 7632 | 2551 | } else if(g_file_test(dir, G_FILE_TEST_EXISTS)) { |
| 15884 | 2552 | purple_debug_warning("build_dir", "bad path: %s\n", path); |
| 7612 | 2553 | g_strfreev(components); |
| 2554 | g_free(dir); | |
| 2555 | return -1; | |
| 2556 | } | |
| 2557 | ||
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2558 | if (g_mkdir(dir, mode) < 0) { |
|
21389
e1dd8142bb87
replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents:
21104
diff
changeset
|
2559 | purple_debug_warning("build_dir", "mkdir: %s\n", g_strerror(errno)); |
| 7612 | 2560 | g_strfreev(components); |
| 2561 | g_free(dir); | |
| 2562 | return -1; | |
| 2563 | } | |
| 2564 | } | |
| 2565 | ||
| 2566 | g_strfreev(components); | |
| 2567 | g_free(dir); | |
| 2568 | return 0; | |
| 11361 | 2569 | #endif |
| 7612 | 2570 | } |
| 2571 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2572 | /* |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2573 | * This function is long and beautiful, like my--um, yeah. Anyway, |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2574 | * 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
|
2575 | * 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
|
2576 | */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2577 | 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
|
2578 | 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
|
2579 | { |
| 15884 | 2580 | 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
|
2581 | gchar *filename_full; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2582 | gboolean ret = FALSE; |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2583 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2584 | g_return_val_if_fail(user_dir != NULL, FALSE); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2585 | |
| 15884 | 2586 | 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
|
2587 | filename, user_dir); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2588 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2589 | /* Ensure the user directory exists */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2590 | if (!g_file_test(user_dir, G_FILE_TEST_IS_DIR)) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2591 | { |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2592 | 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
|
2593 | { |
| 15884 | 2594 | 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
|
2595 | user_dir, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2596 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2597 | } |
|
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 | |
|
10415
faceb835eb87
[gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents:
10414
diff
changeset
|
2600 | 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
|
2601 | |
|
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
|
2602 | 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
|
2603 | |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2604 | g_free(filename_full); |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2605 | return ret; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2606 | } |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2607 | |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2608 | 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
|
2609 | 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
|
2610 | { |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2611 | gchar *filename_temp; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2612 | FILE *file; |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2613 | 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
|
2614 | 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
|
2615 | #ifndef HAVE_FILENO |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2616 | int fd; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2617 | #endif |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2618 | |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2619 | 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
|
2620 | filename_full); |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2621 | |
|
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
|
2622 | 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
|
2623 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2624 | filename_temp = g_strdup_printf("%s.save", filename_full); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2625 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2626 | /* Remove an old temporary file, if one exists */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2627 | if (g_file_test(filename_temp, G_FILE_TEST_EXISTS)) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2628 | { |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2629 | if (g_unlink(filename_temp) == -1) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2630 | { |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2631 | 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
|
2632 | "%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
|
2633 | filename_temp, g_strerror(errno)); |
|
10414
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 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2636 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2637 | /* Open file */ |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2638 | file = g_fopen(filename_temp, "wb"); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2639 | if (file == NULL) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2640 | { |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2641 | 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
|
2642 | "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
|
2643 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2644 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2645 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2646 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2647 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2648 | /* 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
|
2649 | real_size = (size == -1) ? strlen(data) : (size_t) size; |
|
10415
faceb835eb87
[gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents:
10414
diff
changeset
|
2650 | byteswritten = fwrite(data, 1, real_size, file); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2651 | |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2652 | #ifdef HAVE_FILENO |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2653 | /* 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
|
2654 | * 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
|
2655 | * 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
|
2656 | 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
|
2657 | 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
|
2658 | 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
|
2659 | 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
|
2660 | fclose(file); |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2661 | return FALSE; |
|
eab0555e2eab
jtb indirectly points out that we need a fflush() before the fsync(),
Ethan Blanton <elb@pidgin.im>
parents:
21421
diff
changeset
|
2662 | } |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2663 | 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
|
2664 | 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
|
2665 | 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
|
2666 | 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
|
2667 | fclose(file); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2668 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2669 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2670 | #endif |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2671 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2672 | /* Close file */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2673 | if (fclose(file) != 0) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2674 | { |
| 15884 | 2675 | 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
|
2676 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2677 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2678 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2679 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2680 | |
|
21421
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2681 | #ifndef HAVE_FILENO |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2682 | /* 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
|
2683 | * 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
|
2684 | 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
|
2685 | 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
|
2686 | 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
|
2687 | 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
|
2688 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2689 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2690 | 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
|
2691 | 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
|
2692 | 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
|
2693 | 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
|
2694 | close(fd); |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2695 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2696 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2697 | 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
|
2698 | 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
|
2699 | 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
|
2700 | 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
|
2701 | return FALSE; |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2702 | } |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2703 | #endif |
|
1d0f0d592011
Manually fflush() files written with purple_util_write_data_to_file,
Ethan Blanton <elb@pidgin.im>
parents:
21389
diff
changeset
|
2704 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2705 | /* Ensure the file is the correct size */ |
|
10415
faceb835eb87
[gaim-migrate @ 11665]
Mark Doliner <markdoliner@pidgin.im>
parents:
10414
diff
changeset
|
2706 | if (byteswritten != real_size) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2707 | { |
|
19501
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2708 | 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
|
2709 | G_GSIZE_FORMAT " bytes " |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2710 | "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
|
2711 | "; 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
|
2712 | filename_temp, byteswritten, real_size); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2713 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2714 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2715 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2716 | /* Use stat to be absolutely sure. */ |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2717 | 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
|
2718 | { |
| 15884 | 2719 | 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
|
2720 | "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
|
2721 | "full?\n", |
|
4c14c89dcf02
- Add purple_util_write_data_to_file_absolute; glib's
William Ehlhardt <williamehlhardt@gmail.com>
parents:
19327
diff
changeset
|
2722 | filename_temp); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2723 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2724 | return FALSE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2725 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2726 | |
|
12622
55c9c22a3885
[gaim-migrate @ 14958]
Daniel Atallah <datallah@pidgin.im>
parents:
12620
diff
changeset
|
2727 | #ifndef _WIN32 |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2728 | /* Set file permissions */ |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2729 | if (chmod(filename_temp, S_IRUSR | S_IWUSR) == -1) |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2730 | { |
| 15884 | 2731 | 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
|
2732 | filename_temp, g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2733 | } |
|
12622
55c9c22a3885
[gaim-migrate @ 14958]
Daniel Atallah <datallah@pidgin.im>
parents:
12620
diff
changeset
|
2734 | #endif |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2735 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2736 | /* Rename to the REAL name */ |
|
10589
4e10236e06d4
[gaim-migrate @ 11994]
Daniel Atallah <datallah@pidgin.im>
parents:
10569
diff
changeset
|
2737 | if (g_rename(filename_temp, filename_full) == -1) |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2738 | { |
| 15884 | 2739 | 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
|
2740 | 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
|
2741 | g_strerror(errno)); |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2742 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2743 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2744 | g_free(filename_temp); |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2745 | |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2746 | return TRUE; |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2747 | } |
|
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2748 | |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2749 | xmlnode * |
| 15884 | 2750 | 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
|
2751 | { |
| 15884 | 2752 | const char *user_dir = purple_user_dir(); |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2753 | gchar *filename_full; |
| 14940 | 2754 | GError *error = NULL; |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2755 | gchar *contents = NULL; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2756 | gsize length; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2757 | xmlnode *node = NULL; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2758 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2759 | g_return_val_if_fail(user_dir != NULL, NULL); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2760 | |
| 15884 | 2761 | purple_debug_info("util", "Reading file %s from directory %s\n", |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2762 | filename, user_dir); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2763 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2764 | filename_full = g_build_filename(user_dir, filename, NULL); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2765 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2766 | if (!g_file_test(filename_full, G_FILE_TEST_EXISTS)) |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2767 | { |
| 15884 | 2768 | purple_debug_info("util", "File %s does not exist (this is not " |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2769 | "necessarily an error)\n", filename_full); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2770 | g_free(filename_full); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2771 | return NULL; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2772 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2773 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2774 | if (!g_file_get_contents(filename_full, &contents, &length, &error)) |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2775 | { |
| 15884 | 2776 | purple_debug_error("util", "Error reading file %s: %s\n", |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2777 | filename_full, error->message); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2778 | g_error_free(error); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2779 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2780 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2781 | if ((contents != NULL) && (length > 0)) |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2782 | { |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2783 | node = xmlnode_from_str(contents, length); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2784 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2785 | /* If we were unable to parse the file then save its contents to a backup file */ |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2786 | if (node == NULL) |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2787 | { |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2788 | gchar *filename_temp; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2789 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2790 | filename_temp = g_strdup_printf("%s~", filename); |
| 15884 | 2791 | purple_debug_error("util", "Error parsing file %s. Renaming old " |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2792 | "file to %s\n", filename_full, filename_temp); |
| 15884 | 2793 | purple_util_write_data_to_file(filename_temp, contents, length); |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2794 | g_free(filename_temp); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2795 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2796 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2797 | g_free(contents); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2798 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2799 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2800 | /* If we could not parse the file then show the user an error message */ |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2801 | if (node == NULL) |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2802 | { |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2803 | gchar *title, *msg; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2804 | title = g_strdup_printf(_("Error Reading %s"), filename); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2805 | msg = g_strdup_printf(_("An error was encountered reading your " |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2806 | "%s. They have not been loaded, and the old file " |
|
11493
7f7bb96ece74
[gaim-migrate @ 13736]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11407
diff
changeset
|
2807 | "has been renamed to %s~."), description, filename_full); |
| 15884 | 2808 | purple_notify_error(NULL, NULL, title, msg); |
|
10425
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2809 | g_free(title); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2810 | g_free(msg); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2811 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2812 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2813 | g_free(filename_full); |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2814 | |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2815 | return node; |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2816 | } |
|
d82cef15da95
[gaim-migrate @ 11677]
Mark Doliner <markdoliner@pidgin.im>
parents:
10415
diff
changeset
|
2817 | |
|
10414
6b10b76933e1
[gaim-migrate @ 11664]
Mark Doliner <markdoliner@pidgin.im>
parents:
10372
diff
changeset
|
2818 | /* |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2819 | * 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
|
2820 | * 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
|
2821 | * the space for the filepath. |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2822 | * |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2823 | * 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
|
2824 | * 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
|
2825 | * |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2826 | * Returns NULL on failure and cleans up after itself if so. |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2827 | */ |
| 15884 | 2828 | static const char *purple_mkstemp_templ = {"purpleXXXXXX"}; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2829 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2830 | FILE * |
| 15884 | 2831 | purple_mkstemp(char **fpath, gboolean binary) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2832 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2833 | const gchar *tmpdir; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2834 | int fd; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2835 | FILE *fp = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2836 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2837 | g_return_val_if_fail(fpath != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2838 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2839 | if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { |
| 15884 | 2840 | 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
|
2841 | 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
|
2842 | if(fd == -1) { |
| 15884 | 2843 | purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2844 | "Couldn't make \"%s\", error: %d\n", |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2845 | *fpath, errno); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2846 | } else { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2847 | if((fp = fdopen(fd, "r+")) == NULL) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2848 | close(fd); |
| 15884 | 2849 | purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2850 | "Couldn't fdopen(), error: %d\n", errno); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2851 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2852 | } |
|
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
|
2853 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2854 | if(!fp) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2855 | g_free(*fpath); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2856 | *fpath = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2857 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2858 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2859 | } else { |
| 15884 | 2860 | purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", |
|
13985
9d115b698045
[gaim-migrate @ 16439]
Mark Doliner <markdoliner@pidgin.im>
parents:
13836
diff
changeset
|
2861 | "g_get_tmp_dir() failed!\n"); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2862 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2863 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2864 | return fp; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2865 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2866 | |
|
16437
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2867 | 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
|
2868 | 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
|
2869 | { |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2870 | 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
|
2871 | 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
|
2872 | |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2873 | 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
|
2874 | { |
|
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
|
2875 | 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
|
2876 | 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
|
2877 | 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
|
2878 | 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
|
2879 | 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
|
2880 | 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
|
2881 | 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
|
2882 | !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
|
2883 | return "tif"; |
|
17603
22bb998de435
Where did ekse come from?
Richard Laager <rlaager@pidgin.im>
parents:
17602
diff
changeset
|
2884 | 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
|
2885 | 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
|
2886 | } |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2887 | |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2888 | 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
|
2889 | } |
|
7ff7c3405ea2
Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents:
16416
diff
changeset
|
2890 | |
|
18101
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2891 | char * |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2892 | purple_util_get_image_filename(gconstpointer image_data, size_t image_len) |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2893 | { |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2894 | PurpleCipherContext *context; |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2895 | gchar digest[41]; |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2896 | |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2897 | 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
|
2898 | if (context == NULL) |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2899 | { |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2900 | 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
|
2901 | 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
|
2902 | } |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2903 | |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2904 | /* Hash the image data */ |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2905 | 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
|
2906 | 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
|
2907 | { |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2908 | 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
|
2909 | 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
|
2910 | } |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2911 | 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
|
2912 | |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2913 | /* Return the filename */ |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2914 | return g_strdup_printf("%s.%s", digest, |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2915 | purple_util_get_image_extension(image_data, image_len)); |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2916 | } |
|
3ce21b5a182c
A patch from David Grohmann (dave1g) to log embedded images.
Richard Laager <rlaager@pidgin.im>
parents:
17389
diff
changeset
|
2917 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2918 | gboolean |
| 15884 | 2919 | purple_program_is_valid(const char *program) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2920 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2921 | GError *error = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2922 | char **argv; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2923 | gchar *progname; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2924 | gboolean is_valid = FALSE; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2925 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2926 | g_return_val_if_fail(program != NULL, FALSE); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2927 | g_return_val_if_fail(*program != '\0', FALSE); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2928 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2929 | if (!g_shell_parse_argv(program, NULL, &argv, &error)) { |
| 15884 | 2930 | purple_debug(PURPLE_DEBUG_ERROR, "program_is_valid", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2931 | "Could not parse program '%s': %s\n", |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2932 | program, error->message); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2933 | g_error_free(error); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2934 | return FALSE; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2935 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2936 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2937 | if (argv == NULL) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2938 | return FALSE; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2939 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2940 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2941 | progname = g_find_program_in_path(argv[0]); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2942 | is_valid = (progname != NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2943 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2944 | g_strfreev(argv); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2945 | g_free(progname); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2946 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2947 | return is_valid; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2948 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
2949 | |
| 11878 | 2950 | |
| 2951 | gboolean | |
| 15884 | 2952 | purple_running_gnome(void) |
| 11878 | 2953 | { |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2954 | #ifndef _WIN32 |
| 11878 | 2955 | gchar *tmp = g_find_program_in_path("gnome-open"); |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2956 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2957 | if (tmp == NULL) |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2958 | return FALSE; |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2959 | g_free(tmp); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2960 | |
|
21665
a1a724a89a03
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21468
diff
changeset
|
2961 | 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
|
2962 | |
|
a1a724a89a03
Allow empty GNOME_DESKTOP_SESSION_ID to "fail" the running_gnome check as
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
21468
diff
changeset
|
2963 | return ((tmp != NULL) && (*tmp != '\0')); |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2964 | #else |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2965 | return FALSE; |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2966 | #endif |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2967 | } |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2968 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2969 | gboolean |
| 15884 | 2970 | purple_running_kde(void) |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2971 | { |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2972 | #ifndef _WIN32 |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2973 | gchar *tmp = g_find_program_in_path("kfmclient"); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2974 | const char *session; |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2975 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2976 | if (tmp == NULL) |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2977 | return FALSE; |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2978 | g_free(tmp); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2979 | |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2980 | session = g_getenv("KDE_FULL_SESSION"); |
|
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2981 | if (session != NULL && !strcmp(session, "true")) |
| 11878 | 2982 | return TRUE; |
|
12483
38fc67810cdb
[gaim-migrate @ 14795]
Richard Laager <rlaager@pidgin.im>
parents:
12110
diff
changeset
|
2983 | |
| 15884 | 2984 | /* 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
|
2985 | * 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
|
2986 | * only a problem if you're running something !(KDE || GNOME) and |
| 15884 | 2987 | * 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
|
2988 | return ((g_getenv("KDEDIR") != NULL) || g_getenv("KDEDIRS") != NULL); |
|
13616
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2989 | #else |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2990 | return FALSE; |
|
7cf0f845d2d6
[gaim-migrate @ 16001]
Daniel Atallah <datallah@pidgin.im>
parents:
13614
diff
changeset
|
2991 | #endif |
| 11878 | 2992 | } |
| 2993 | ||
|
15016
bdc3f402b3a0
[gaim-migrate @ 17733]
Luke Schierer <lschiere@pidgin.im>
parents:
14940
diff
changeset
|
2994 | gboolean |
| 15884 | 2995 | purple_running_osx(void) |
|
14708
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2996 | { |
|
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
|
2997 | #if defined(__APPLE__) |
|
14708
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2998 | return TRUE; |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
2999 | #else |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
3000 | return FALSE; |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
3001 | #endif |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
3002 | } |
|
6006e069317c
[gaim-migrate @ 17392]
Evan Schoenberg <evands@pidgin.im>
parents:
14648
diff
changeset
|
3003 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3004 | char * |
| 15884 | 3005 | purple_fd_get_ip(int fd) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3006 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3007 | struct sockaddr addr; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3008 | socklen_t namelen = sizeof(addr); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3009 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3010 | g_return_val_if_fail(fd != 0, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3011 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3012 | if (getsockname(fd, &addr, &namelen)) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3013 | return NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3014 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3015 | return g_strdup(inet_ntoa(((struct sockaddr_in *)&addr)->sin_addr)); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3016 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3017 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3018 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3019 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3020 | * String Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3021 | **************************************************************************/ |
| 7162 | 3022 | const char * |
| 15884 | 3023 | purple_normalize(const PurpleAccount *account, const char *str) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3024 | { |
| 7430 | 3025 | const char *ret = NULL; |
|
16610
815ce4002357
sadrul fixed the next but not last crash
Luke Schierer <lschiere@pidgin.im>
parents:
16557
diff
changeset
|
3026 | static char buf[BUF_LEN]; |
| 7261 | 3027 | |
|
13620
1374da61a5e2
[gaim-migrate @ 16005]
Richard Laager <rlaager@pidgin.im>
parents:
13616
diff
changeset
|
3028 | if (account != NULL) |
|
13614
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3029 | { |
| 15884 | 3030 | 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
|
3031 | |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3032 | if (prpl != NULL) |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3033 | { |
| 15884 | 3034 | PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); |
|
13614
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3035 | |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3036 | if(prpl_info && prpl_info->normalize) |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3037 | ret = prpl_info->normalize(account, str); |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3038 | } |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3039 | } |
|
fa07a6cab773
[gaim-migrate @ 15999]
Richard Laager <rlaager@pidgin.im>
parents:
13586
diff
changeset
|
3040 | |
|
13621
788d329bdfa0
[gaim-migrate @ 16006]
Richard Laager <rlaager@pidgin.im>
parents:
13620
diff
changeset
|
3041 | if (ret == NULL) |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3042 | { |
| 7261 | 3043 | char *tmp; |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3044 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3045 | tmp = g_utf8_normalize(str, -1, G_NORMALIZE_DEFAULT); |
| 7261 | 3046 | g_snprintf(buf, sizeof(buf), "%s", tmp); |
| 3047 | g_free(tmp); | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3048 | |
| 7430 | 3049 | ret = buf; |
| 7261 | 3050 | } |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3051 | |
| 7430 | 3052 | return ret; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3053 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3054 | |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3055 | /* |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3056 | * You probably don't want to call this directly, it is |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3057 | * mainly for use as a PRPL callback function. See the |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3058 | * comments in util.h. |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3059 | */ |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3060 | const char * |
| 15884 | 3061 | purple_normalize_nocase(const PurpleAccount *account, const char *str) |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3062 | { |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3063 | static char buf[BUF_LEN]; |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3064 | char *tmp1, *tmp2; |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3065 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3066 | g_return_val_if_fail(str != NULL, NULL); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3067 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3068 | tmp1 = g_utf8_strdown(str, -1); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3069 | tmp2 = g_utf8_normalize(tmp1, -1, G_NORMALIZE_DEFAULT); |
|
13646
3bf958a5e352
[gaim-migrate @ 16043]
Daniel Atallah <datallah@pidgin.im>
parents:
13644
diff
changeset
|
3070 | g_snprintf(buf, sizeof(buf), "%s", tmp2 ? tmp2 : ""); |
|
11153
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3071 | g_free(tmp2); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3072 | g_free(tmp1); |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3073 | |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3074 | return buf; |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3075 | } |
|
b5c721366f2d
[gaim-migrate @ 13235]
Evan Schoenberg <evands@pidgin.im>
parents:
11142
diff
changeset
|
3076 | |
|
8700
0c9288c5e40e
[gaim-migrate @ 9453]
Mark Doliner <markdoliner@pidgin.im>
parents:
8686
diff
changeset
|
3077 | gchar * |
| 15884 | 3078 | purple_strdup_withhtml(const gchar *src) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3079 | { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3080 | gulong destsize, i, j; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3081 | gchar *dest; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3082 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3083 | g_return_val_if_fail(src != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3084 | |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3085 | /* 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
|
3086 | destsize = 1; |
|
fb323d3eefee
[gaim-migrate @ 16475]
Mark Doliner <markdoliner@pidgin.im>
parents:
13994
diff
changeset
|
3087 | for (i = 0; src[i] != '\0'; i++) |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3088 | { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3089 | if (src[i] == '\n') |
|
13994
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3090 | destsize += 4; |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3091 | else if (src[i] != '\r') |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3092 | destsize++; |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3093 | } |
|
f3175c4c6d6a
[gaim-migrate @ 16459]
Mark Doliner <markdoliner@pidgin.im>
parents:
13985
diff
changeset
|
3094 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3095 | dest = g_malloc(destsize); |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3096 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3097 | /* Copy stuff, ignoring \r's, because they are dumb */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3098 | for (i = 0, j = 0; src[i] != '\0'; i++) { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3099 | if (src[i] == '\n') { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3100 | strcpy(&dest[j], "<BR>"); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3101 | j += 4; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3102 | } else if (src[i] != '\r') |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3103 | dest[j++] = src[i]; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3104 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3105 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3106 | dest[destsize-1] = '\0'; |
|
7108
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 dest; |
|
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 | |
| 7628 | 3111 | gboolean |
| 15884 | 3112 | purple_str_has_prefix(const char *s, const char *p) |
| 7628 | 3113 | { |
|
11780
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3114 | #if GLIB_CHECK_VERSION(2,2,0) |
|
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3115 | return g_str_has_prefix(s, p); |
|
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3116 | #else |
|
13096
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3117 | g_return_val_if_fail(s != NULL, FALSE); |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3118 | g_return_val_if_fail(p != NULL, FALSE); |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3119 | |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3120 | return (!strncmp(s, p, strlen(p))); |
|
11780
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3121 | #endif |
| 7628 | 3122 | } |
| 3123 | ||
| 3124 | gboolean | |
| 15884 | 3125 | purple_str_has_suffix(const char *s, const char *x) |
| 7628 | 3126 | { |
|
11780
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3127 | #if GLIB_CHECK_VERSION(2,2,0) |
|
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3128 | return g_str_has_suffix(s, x); |
|
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3129 | #else |
|
13096
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3130 | int off; |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3131 | |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3132 | g_return_val_if_fail(s != NULL, FALSE); |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3133 | g_return_val_if_fail(x != NULL, FALSE); |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3134 | |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3135 | off = strlen(s) - strlen(x); |
|
03d1402b31ea
[gaim-migrate @ 15457]
Richard Laager <rlaager@pidgin.im>
parents:
13090
diff
changeset
|
3136 | return (off >= 0 && !strcmp(s + off, x)); |
|
11780
9aee3bde84b9
[gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11665
diff
changeset
|
3137 | #endif |
| 7628 | 3138 | } |
| 3139 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3140 | char * |
| 15884 | 3141 | purple_str_add_cr(const char *text) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3142 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3143 | char *ret = NULL; |
| 7631 | 3144 | int count = 0, j; |
| 3145 | guint i; | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3146 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3147 | g_return_val_if_fail(text != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3148 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3149 | if (text[0] == '\n') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3150 | count++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3151 | for (i = 1; i < strlen(text); i++) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3152 | if (text[i] == '\n' && text[i - 1] != '\r') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3153 | count++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3154 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3155 | if (count == 0) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3156 | return g_strdup(text); |
|
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 | ret = g_malloc0(strlen(text) + count + 1); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3159 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3160 | i = 0; j = 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3161 | if (text[i] == '\n') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3162 | ret[j++] = '\r'; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3163 | ret[j++] = text[i++]; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3164 | for (; i < strlen(text); i++) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3165 | if (text[i] == '\n' && text[i - 1] != '\r') |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3166 | ret[j++] = '\r'; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3167 | ret[j++] = text[i]; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3168 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3169 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3170 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3171 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3172 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3173 | void |
| 15884 | 3174 | purple_str_strip_char(char *text, char thechar) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3175 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3176 | int i, j; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3177 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3178 | g_return_if_fail(text != NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3179 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3180 | for (i = 0, j = 0; text[i]; i++) |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3181 | if (text[i] != thechar) |
|
11142
3ed4fc774b87
[gaim-migrate @ 13206]
Mark Doliner <markdoliner@pidgin.im>
parents:
11137
diff
changeset
|
3182 | text[j++] = text[i]; |
|
3ed4fc774b87
[gaim-migrate @ 13206]
Mark Doliner <markdoliner@pidgin.im>
parents:
11137
diff
changeset
|
3183 | |
|
3ed4fc774b87
[gaim-migrate @ 13206]
Mark Doliner <markdoliner@pidgin.im>
parents:
11137
diff
changeset
|
3184 | text[j++] = '\0'; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3185 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3186 | |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3187 | void |
| 15884 | 3188 | purple_util_chrreplace(char *string, char delimiter, |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3189 | char replacement) |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3190 | { |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3191 | int i = 0; |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3192 | |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3193 | g_return_if_fail(string != NULL); |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3194 | |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3195 | while (string[i] != '\0') |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3196 | { |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3197 | if (string[i] == delimiter) |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3198 | string[i] = replacement; |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3199 | i++; |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3200 | } |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3201 | } |
|
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11878
diff
changeset
|
3202 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3203 | gchar * |
| 15884 | 3204 | purple_strreplace(const char *string, const char *delimiter, |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3205 | const char *replacement) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3206 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3207 | gchar **split; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3208 | gchar *ret; |
|
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 | g_return_val_if_fail(string != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3211 | g_return_val_if_fail(delimiter != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3212 | g_return_val_if_fail(replacement != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3213 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3214 | split = g_strsplit(string, delimiter, 0); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3215 | ret = g_strjoinv(replacement, split); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3216 | g_strfreev(split); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3217 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3218 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3219 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3220 | |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3221 | gchar * |
| 15884 | 3222 | purple_strcasereplace(const char *string, const char *delimiter, |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3223 | const char *replacement) |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3224 | { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3225 | gchar *ret; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3226 | int length_del, length_rep, i, j; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3227 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3228 | g_return_val_if_fail(string != NULL, NULL); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3229 | g_return_val_if_fail(delimiter != NULL, NULL); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3230 | g_return_val_if_fail(replacement != NULL, NULL); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3231 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3232 | length_del = strlen(delimiter); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3233 | length_rep = strlen(replacement); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3234 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3235 | /* Count how many times the delimiter appears */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3236 | i = 0; /* position in the source string */ |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8700
diff
changeset
|
3237 | j = 0; /* number of occurrences of "delimiter" */ |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3238 | 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
|
3239 | if (!g_ascii_strncasecmp(&string[i], delimiter, length_del)) { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3240 | i += length_del; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3241 | j += length_rep; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3242 | } else { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3243 | i++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3244 | j++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3245 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3246 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3247 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3248 | ret = g_malloc(j+1); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3249 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3250 | i = 0; /* position in the source string */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3251 | j = 0; /* position in the destination string */ |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3252 | 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
|
3253 | if (!g_ascii_strncasecmp(&string[i], delimiter, length_del)) { |
|
8341
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3254 | strncpy(&ret[j], replacement, length_rep); |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3255 | i += length_del; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3256 | j += length_rep; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3257 | } else { |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3258 | ret[j] = string[i]; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3259 | i++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3260 | j++; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3261 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3262 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3263 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3264 | ret[j] = '\0'; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3265 | |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3266 | return ret; |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3267 | } |
|
dc43b1acfc1a
[gaim-migrate @ 9065]
Mark Doliner <markdoliner@pidgin.im>
parents:
8163
diff
changeset
|
3268 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3269 | const char * |
| 15884 | 3270 | purple_strcasestr(const char *haystack, const char *needle) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3271 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3272 | size_t hlen, nlen; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3273 | const char *tmp, *ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3274 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3275 | g_return_val_if_fail(haystack != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3276 | g_return_val_if_fail(needle != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3277 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3278 | hlen = strlen(haystack); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3279 | nlen = strlen(needle); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3280 | tmp = haystack, |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3281 | ret = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3282 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3283 | g_return_val_if_fail(hlen > 0, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3284 | g_return_val_if_fail(nlen > 0, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3285 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3286 | while (*tmp && !ret) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3287 | if (!g_ascii_strncasecmp(needle, tmp, nlen)) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3288 | ret = tmp; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3289 | else |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3290 | tmp++; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3291 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3292 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3293 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3294 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3295 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3296 | char * |
| 15884 | 3297 | purple_str_size_to_units(size_t size) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3298 | { |
|
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
|
3299 | static const char * const size_str[] = { "bytes", "KiB", "MiB", "GiB" }; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3300 | float size_mag; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3301 | int size_index = 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3302 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3303 | if (size == -1) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3304 | return g_strdup(_("Calculating...")); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3305 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3306 | else if (size == 0) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3307 | return g_strdup(_("Unknown.")); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3308 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3309 | else { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3310 | size_mag = (float)size; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3311 | |
|
10569
3324f62c07aa
[gaim-migrate @ 11957]
Daniel Atallah <datallah@pidgin.im>
parents:
10506
diff
changeset
|
3312 | while ((size_index < 3) && (size_mag > 1024)) { |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3313 | size_mag /= 1024; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3314 | size_index++; |
|
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 | |
|
10103
5744088750bc
[gaim-migrate @ 11130]
Caleb Gilmour <caleb_gilmour@users.sourceforge.net>
parents:
9940
diff
changeset
|
3317 | if (size_index == 0) { |
|
11656
56f5e598dc6c
[gaim-migrate @ 13940]
Richard Laager <rlaager@pidgin.im>
parents:
11552
diff
changeset
|
3318 | 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
|
3319 | } else { |
|
5744088750bc
[gaim-migrate @ 11130]
Caleb Gilmour <caleb_gilmour@users.sourceforge.net>
parents:
9940
diff
changeset
|
3320 | 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
|
3321 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3322 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3323 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3324 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3325 | char * |
| 15884 | 3326 | purple_str_seconds_to_string(guint secs) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3327 | { |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3328 | char *ret = NULL; |
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3329 | guint days, hrs, mins; |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3330 | |
| 9424 | 3331 | if (secs < 60) |
| 3332 | { | |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3333 | return g_strdup_printf(dngettext(PACKAGE, "%d second", "%d seconds", secs), secs); |
| 9424 | 3334 | } |
| 3335 | ||
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3336 | days = secs / (60 * 60 * 24); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3337 | secs = secs % (60 * 60 * 24); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3338 | hrs = secs / (60 * 60); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3339 | secs = secs % (60 * 60); |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3340 | mins = secs / 60; |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3341 | secs = secs % 60; |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3342 | |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3343 | if (days > 0) |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3344 | { |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3345 | 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
|
3346 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3347 | |
|
9233
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3348 | if (hrs > 0) |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3349 | { |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3350 | if (ret != NULL) |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3351 | { |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3352 | 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
|
3353 | dngettext(PACKAGE, "%s, %d hour", "%s, %d hours", hrs), |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3354 | ret, hrs); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3355 | g_free(ret); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3356 | ret = tmp; |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3357 | } |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3358 | else |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3359 | 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
|
3360 | } |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3361 | |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3362 | if (mins > 0) |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3363 | { |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3364 | if (ret != NULL) |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3365 | { |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3366 | 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
|
3367 | dngettext(PACKAGE, "%s, %d minute", "%s, %d minutes", mins), |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3368 | ret, mins); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3369 | g_free(ret); |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3370 | ret = tmp; |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3371 | } |
|
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3372 | else |
|
16124
8e5e3e9ada60
Hopefully prevent libpurple causing problems for 3rd party UIs if they also
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
16078
diff
changeset
|
3373 | 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
|
3374 | } |
|
41fb39a8d21e
[gaim-migrate @ 10029]
Christian Hammond <chipx86@chipx86.com>
parents:
9230
diff
changeset
|
3375 | |
|
13098
48f8b34a76bf
[gaim-migrate @ 15459]
Richard Laager <rlaager@pidgin.im>
parents:
13096
diff
changeset
|
3376 | return ret; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3377 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3378 | |
| 9277 | 3379 | |
| 3380 | char * | |
| 15884 | 3381 | purple_str_binary_to_ascii(const unsigned char *binary, guint len) |
| 9277 | 3382 | { |
| 3383 | GString *ret; | |
| 3384 | guint i; | |
| 3385 | ||
| 3386 | g_return_val_if_fail(len > 0, NULL); | |
| 3387 | ||
| 3388 | ret = g_string_sized_new(len); | |
| 3389 | ||
| 3390 | for (i = 0; i < len; i++) | |
| 3391 | if (binary[i] < 32 || binary[i] > 126) | |
| 3392 | g_string_append_printf(ret, "\\x%02hhx", binary[i]); | |
| 3393 | else if (binary[i] == '\\') | |
| 3394 | g_string_append(ret, "\\\\"); | |
| 3395 | else | |
| 3396 | g_string_append_c(ret, binary[i]); | |
| 3397 | ||
| 3398 | return g_string_free(ret, FALSE); | |
| 3399 | } | |
| 3400 | ||
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3401 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3402 | * URI/URL Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3403 | **************************************************************************/ |
|
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
|
3404 | |
| 15884 | 3405 | 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
|
3406 | { |
|
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
|
3407 | char proto[11]; |
|
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 | 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
|
3409 | 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
|
3410 | 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
|
3411 | 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
|
3412 | if (!(tmp = strchr(uri, ':')) || tmp == uri) { |
| 15884 | 3413 | 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
|
3414 | 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
|
3415 | } |
|
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
|
3416 | |
|
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
|
3417 | 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
|
3418 | |
|
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
|
3419 | 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
|
3420 | 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
|
3421 | |
|
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
|
3422 | tmp++; |
| 15884 | 3423 | purple_debug_info("util", "Processing message '%s' for protocol '%s'.\n", tmp, proto); |
|
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
|
3424 | |
|
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
|
3425 | 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
|
3426 | 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
|
3427 | 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
|
3428 | |
|
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
|
3429 | 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
|
3430 | 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
|
3431 | |
|
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
|
3432 | 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
|
3433 | 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
|
3434 | |
|
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
|
3435 | while (*tmp || *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
|
3436 | if (*tmp == '&' || !(*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
|
3437 | /* 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
|
3438 | 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
|
3439 | 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
|
3440 | |
|
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
|
3441 | 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
|
3442 | 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
|
3443 | 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
|
3444 | /* 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
|
3445 | 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
|
3446 | 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
|
3447 | 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
|
3448 | *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
|
3449 | 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
|
3450 | } |
|
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
|
3451 | 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
|
3452 | 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
|
3453 | } 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
|
3454 | 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
|
3455 | |
|
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
|
3456 | 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
|
3457 | 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
|
3458 | } |
|
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
|
3459 | } 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
|
3460 | 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
|
3461 | |
| 15884 | 3462 | 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
|
3463 | |
|
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
|
3464 | 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
|
3465 | 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
|
3466 | 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
|
3467 | } |
|
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
|
3468 | |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3469 | /* |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3470 | * 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
|
3471 | * 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
|
3472 | * 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
|
3473 | * |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3474 | * 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
|
3475 | * 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
|
3476 | * 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
|
3477 | * 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
|
3478 | * 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
|
3479 | */ |
|
7095
17d2b54254f8
[gaim-migrate @ 7660]
Christian Hammond <chipx86@chipx86.com>
parents:
7094
diff
changeset
|
3480 | gboolean |
| 15884 | 3481 | purple_url_parse(const char *url, char **ret_host, int *ret_port, |
| 9227 | 3482 | char **ret_path, char **ret_user, char **ret_passwd) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3483 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3484 | char scan_info[255]; |
|
8118
7f5315bb4506
[gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents:
8088
diff
changeset
|
3485 | char port_str[6]; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3486 | int f; |
| 9341 | 3487 | const char *at, *slash; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3488 | const char *turl; |
| 9227 | 3489 | char host[256], path[256], user[256], passwd[256]; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3490 | int port = 0; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3491 | /* hyphen at end includes it in control set */ |
|
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
|
3492 | static const char addr_ctrl[] = "A-Za-z0-9.-"; |
|
07fe1a99c47b
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents:
21076
diff
changeset
|
3493 | static const char port_ctrl[] = "0-9"; |
|
07fe1a99c47b
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents:
21076
diff
changeset
|
3494 | static const char page_ctrl[] = "A-Za-z0-9.~_/:*!@&%%?=+^-"; |
|
07fe1a99c47b
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents:
21076
diff
changeset
|
3495 | static const char user_ctrl[] = "A-Za-z0-9.~_/*!&%%?=+^-"; |
|
07fe1a99c47b
Patch from Andrew Gaul to constify a bunch of static variables to reduce
Ka-Hing Cheung <khc@pidgin.im>
parents:
21076
diff
changeset
|
3496 | static const char passwd_ctrl[] = "A-Za-z0-9.~_/*!&%%?=+^-"; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3497 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3498 | g_return_val_if_fail(url != NULL, FALSE); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3499 | |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3500 | if ((turl = purple_strcasestr(url, "http://")) != NULL) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3501 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3502 | turl += 7; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3503 | url = turl; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3504 | } |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3505 | 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
|
3506 | { |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3507 | turl += 8; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3508 | url = turl; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3509 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3510 | |
| 9227 | 3511 | /* parse out authentication information if supplied */ |
| 9341 | 3512 | /* Only care about @ char BEFORE the first / */ |
| 3513 | at = strchr(url, '@'); | |
| 3514 | slash = strchr(url, '/'); | |
| 3515 | if ((at != NULL) && | |
| 3516 | (((slash != NULL) && (strlen(at) > strlen(slash))) || | |
| 3517 | (slash == NULL))) { | |
| 9227 | 3518 | g_snprintf(scan_info, sizeof(scan_info), |
| 3519 | "%%255[%s]:%%255[%s]^@", user_ctrl, passwd_ctrl); | |
| 3520 | f = sscanf(url, scan_info, user, passwd); | |
| 3521 | ||
| 3522 | if (f ==1 ) { | |
| 3523 | /* No passwd, possibly just username supplied */ | |
| 3524 | g_snprintf(scan_info, sizeof(scan_info), | |
| 3525 | "%%255[%s]^@", user_ctrl); | |
| 3526 | f = sscanf(url, scan_info, user); | |
| 3527 | *passwd = '\0'; | |
| 3528 | } | |
| 3529 | ||
| 9230 | 3530 | url = at+1; /* move pointer after the @ char */ |
| 9227 | 3531 | } else { |
| 3532 | *user = '\0'; | |
| 3533 | *passwd = '\0'; | |
| 3534 | } | |
| 3535 | ||
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3536 | g_snprintf(scan_info, sizeof(scan_info), |
|
8118
7f5315bb4506
[gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents:
8088
diff
changeset
|
3537 | "%%255[%s]:%%5[%s]/%%255[%s]", addr_ctrl, port_ctrl, page_ctrl); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3538 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3539 | f = sscanf(url, scan_info, host, port_str, path); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3540 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3541 | if (f == 1) |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3542 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3543 | g_snprintf(scan_info, sizeof(scan_info), |
|
8118
7f5315bb4506
[gaim-migrate @ 8822]
Douglas Thrift <douglas@douglasthrift.net>
parents:
8088
diff
changeset
|
3544 | "%%255[%s]/%%255[%s]", |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3545 | addr_ctrl, page_ctrl); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3546 | f = sscanf(url, scan_info, host, path); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3547 | g_snprintf(port_str, sizeof(port_str), "80"); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3548 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3549 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3550 | if (f == 1) |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3551 | *path = '\0'; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3552 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3553 | sscanf(port_str, "%d", &port); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3554 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3555 | if (ret_host != NULL) *ret_host = g_strdup(host); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3556 | if (ret_port != NULL) *ret_port = port; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3557 | if (ret_path != NULL) *ret_path = g_strdup(path); |
| 9227 | 3558 | if (ret_user != NULL) *ret_user = g_strdup(user); |
| 3559 | if (ret_passwd != NULL) *ret_passwd = g_strdup(passwd); | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3560 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3561 | return TRUE; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3562 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3563 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3564 | /** |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3565 | * The arguments to this function are similar to printf. |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3566 | */ |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3567 | static void |
| 15884 | 3568 | purple_util_fetch_url_error(PurpleUtilFetchUrlData *gfud, const char *format, ...) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3569 | { |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3570 | gchar *error_message; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3571 | va_list args; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3572 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3573 | va_start(args, format); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3574 | error_message = g_strdup_vprintf(format, args); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3575 | va_end(args); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3576 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3577 | gfud->callback(gfud, gfud->user_data, NULL, 0, error_message); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3578 | g_free(error_message); |
| 15884 | 3579 | purple_util_fetch_url_cancel(gfud); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3580 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3581 | |
|
14465
2dacb84b7cb2
[gaim-migrate @ 17111]
Mark Doliner <markdoliner@pidgin.im>
parents:
14416
diff
changeset
|
3582 | static void url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message); |
|
2dacb84b7cb2
[gaim-migrate @ 17111]
Mark Doliner <markdoliner@pidgin.im>
parents:
14416
diff
changeset
|
3583 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3584 | static gboolean |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3585 | parse_redirect(const char *data, size_t data_len, gint sock, |
| 15884 | 3586 | PurpleUtilFetchUrlData *gfud) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3587 | { |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3588 | 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
|
3589 | 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
|
3590 | gboolean full; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3591 | int len; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3592 | |
|
21037
4861a7fc6708
When checking for redirects in purple_util_fetch_url(), look for
Mark Doliner <markdoliner@pidgin.im>
parents:
20992
diff
changeset
|
3593 | 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
|
3594 | /* 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
|
3595 | return FALSE; |
|
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 | 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
|
3598 | 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
|
3599 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3600 | /* 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
|
3601 | 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
|
3602 | 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
|
3603 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3604 | 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
|
3605 | return FALSE; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3606 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3607 | 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
|
3608 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3609 | 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
|
3610 | 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
|
3611 | 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
|
3612 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3613 | 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
|
3614 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3615 | if (*new_url == '/' || g_strstr_len(new_url, len, "://") == NULL) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
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 | 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
|
3618 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3619 | 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
|
3620 | 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
|
3621 | |
|
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(temp_url); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3623 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3624 | full = FALSE; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3625 | } |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3626 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3627 | 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
|
3628 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3629 | 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
|
3630 | 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
|
3631 | { |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3632 | 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
|
3633 | _("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
|
3634 | gfud->url); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3635 | return TRUE; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3636 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3637 | |
|
17541
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3638 | /* |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3639 | * 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
|
3640 | * 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
|
3641 | * 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
|
3642 | */ |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3643 | 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
|
3644 | 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
|
3645 | 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
|
3646 | 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
|
3647 | 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
|
3648 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3649 | purple_input_remove(gfud->inpa); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3650 | gfud->inpa = 0; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3651 | close(gfud->fd); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3652 | gfud->fd = -1; |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3653 | 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
|
3654 | 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
|
3655 | 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
|
3656 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3657 | 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
|
3658 | 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
|
3659 | 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
|
3660 | 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
|
3661 | 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
|
3662 | &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
|
3663 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3664 | gfud->connect_data = purple_proxy_connect(NULL, NULL, |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3665 | 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
|
3666 | url_fetch_connect_cb, gfud); |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3667 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3668 | if (gfud->connect_data == NULL) |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3669 | { |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3670 | 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
|
3671 | 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
|
3672 | } |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3673 | |
|
287a70d8189f
Add some notes about why Yahoo! web messenger login doesn't work
Mark Doliner <markdoliner@pidgin.im>
parents:
17287
diff
changeset
|
3674 | return TRUE; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3675 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3676 | |
|
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 | ||
| 3683 | /* This is still technically wrong, since headers are case-insensitive | |
| 3684 | * [RFC 2616, section 4.2], though this ought to catch the normal case. | |
| 3685 | * Note: data is _not_ nul-terminated. | |
| 3686 | */ | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3687 | if(data_len > 16) { |
|
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3688 | p = (strncmp(data, "Content-Length: ", 16) == 0) ? data : NULL; |
|
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3689 | if(!p) |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3690 | p = (strncmp(data, "CONTENT-LENGTH: ", 16) == 0) |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3691 | ? data : NULL; |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3692 | if(!p) { |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3693 | p = g_strstr_len(data, data_len, "\nContent-Length: "); |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3694 | if (p) |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3695 | p++; |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3696 | } |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3697 | if(!p) { |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3698 | p = g_strstr_len(data, data_len, "\nCONTENT-LENGTH: "); |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3699 | if (p) |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3700 | p++; |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3701 | } |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3702 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3703 | if(p) |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3704 | p += 16; |
| 9240 | 3705 | } |
| 3706 | ||
| 3707 | /* If we can find a Content-Length header at all, try to sscanf it. | |
| 3708 | * Response headers should end with at least \r\n, so sscanf is safe, | |
| 3709 | * if we make sure that there is indeed a \n in our header. | |
| 3710 | */ | |
| 3711 | if (p && g_strstr_len(p, data_len - (p - data), "\n")) { | |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3712 | 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
|
3713 | purple_debug_misc("util", "parsed %" G_GSIZE_FORMAT "\n", content_len); |
| 9240 | 3714 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3715 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3716 | return content_len; |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3717 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3718 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3719 | |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3720 | static void |
| 15884 | 3721 | 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
|
3722 | { |
| 15884 | 3723 | PurpleUtilFetchUrlData *gfud = url_data; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3724 | int len; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3725 | char buf[4096]; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3726 | char *data_cursor; |
| 9240 | 3727 | gboolean got_eof = FALSE; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3728 | |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3729 | while((len = read(source, buf, sizeof(buf))) > 0) { |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3730 | /* If we've filled up our buffer, make it bigger */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3731 | if((gfud->len + len) >= gfud->data_len) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3732 | while((gfud->len + len) >= gfud->data_len) |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3733 | gfud->data_len += sizeof(buf); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3734 | |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3735 | gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3736 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3737 | |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3738 | data_cursor = gfud->webdata + gfud->len; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3739 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3740 | gfud->len += len; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3741 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3742 | memcpy(data_cursor, buf, len); |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3743 | |
|
11407
3f89b9b59ba9
[gaim-migrate @ 13642]
Federico G. Schwindt <fgsch@lodoss.net>
parents:
11361
diff
changeset
|
3744 | gfud->webdata[gfud->len] = '\0'; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3745 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3746 | if(!gfud->got_headers) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3747 | char *tmp; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3748 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3749 | /* 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
|
3750 | if((tmp = strstr(gfud->webdata, "\r\n\r\n"))) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3751 | char * new_data; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3752 | guint header_len = (tmp + 4 - gfud->webdata); |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3753 | size_t content_len; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3754 | |
| 15884 | 3755 | purple_debug_misc("util", "Response headers: '%.*s'\n", |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3756 | header_len, gfud->webdata); |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3757 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3758 | /* See if we can find a redirect. */ |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3759 | if(parse_redirect(gfud->webdata, header_len, source, gfud)) |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3760 | return; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3761 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3762 | gfud->got_headers = TRUE; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3763 | |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3764 | /* No redirect. See if we can find a content length. */ |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3765 | content_len = parse_content_len(gfud->webdata, header_len); |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3766 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3767 | if(content_len == 0) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3768 | /* We'll stick with an initial 8192 */ |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3769 | content_len = 8192; |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3770 | } else { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3771 | gfud->has_explicit_data_len = TRUE; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3772 | } |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3773 | |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3774 | |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3775 | /* 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
|
3776 | if(gfud->include_headers) { |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3777 | gfud->data_len = content_len + header_len; |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3778 | gfud->webdata = g_realloc(gfud->webdata, gfud->data_len); |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3779 | } else { |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3780 | size_t body_len = 0; |
|
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3781 | |
|
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3782 | if(gfud->len > (header_len + 1)) |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3783 | body_len = (gfud->len - header_len); |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3784 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3785 | content_len = MAX(content_len, body_len); |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3786 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3787 | new_data = g_try_malloc(content_len); |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3788 | if(new_data == NULL) { |
| 15884 | 3789 | 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
|
3790 | "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
|
3791 | content_len, g_strerror(errno)); |
| 15884 | 3792 | purple_util_fetch_url_error(gfud, |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3793 | _("Unable to allocate enough memory to hold " |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3794 | "the contents from %s. The web server may " |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3795 | "be trying something malicious."), |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3796 | gfud->website.address); |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3797 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3798 | return; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3799 | } |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3800 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3801 | /* 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
|
3802 | if(body_len > 0) { |
|
12907
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3803 | tmp += 4; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3804 | memcpy(new_data, tmp, body_len); |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3805 | } |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3806 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3807 | /* Out with the old... */ |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3808 | g_free(gfud->webdata); |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3809 | |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3810 | /* In with the new. */ |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3811 | gfud->len = body_len; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3812 | gfud->data_len = content_len; |
|
5d2ed97ed7e3
[gaim-migrate @ 15260]
Daniel Atallah <datallah@pidgin.im>
parents:
12887
diff
changeset
|
3813 | gfud->webdata = new_data; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3814 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3815 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3816 | } |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3817 | |
|
13521
3739c2de7e00
[gaim-migrate @ 15896]
Daniel Atallah <datallah@pidgin.im>
parents:
13500
diff
changeset
|
3818 | if(gfud->has_explicit_data_len && gfud->len >= gfud->data_len) { |
| 9240 | 3819 | got_eof = TRUE; |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3820 | break; |
| 9240 | 3821 | } |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3822 | } |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3823 | |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3824 | if(len < 0) { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3825 | if(errno == EAGAIN) { |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3826 | return; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3827 | } else { |
| 15884 | 3828 | 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
|
3829 | gfud->website.address, g_strerror(errno)); |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3830 | return; |
|
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3831 | } |
| 9240 | 3832 | } |
| 3833 | ||
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3834 | if((len == 0) || got_eof) { |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3835 | gfud->webdata = g_realloc(gfud->webdata, gfud->len + 1); |
|
12109
10f7b7f64648
[gaim-migrate @ 14409]
Daniel Atallah <datallah@pidgin.im>
parents:
11920
diff
changeset
|
3836 | gfud->webdata[gfud->len] = '\0'; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3837 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3838 | gfud->callback(gfud, gfud->user_data, gfud->webdata, gfud->len, NULL); |
| 15884 | 3839 | purple_util_fetch_url_cancel(gfud); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3840 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3841 | } |
|
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3842 | |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3843 | static void |
| 15884 | 3844 | url_fetch_send_cb(gpointer data, gint source, PurpleInputCondition cond) |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3845 | { |
| 15884 | 3846 | PurpleUtilFetchUrlData *gfud; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3847 | int len, total_len; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3848 | |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3849 | gfud = data; |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3850 | |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3851 | total_len = strlen(gfud->request); |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3852 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3853 | len = write(gfud->fd, gfud->request + gfud->request_written, |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3854 | total_len - gfud->request_written); |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3855 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3856 | if (len < 0 && errno == EAGAIN) |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3857 | return; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3858 | else if (len < 0) { |
| 15884 | 3859 | purple_util_fetch_url_error(gfud, _("Error writing to %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
|
3860 | gfud->website.address, g_strerror(errno)); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3861 | return; |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3862 | } |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3863 | gfud->request_written += len; |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3864 | |
|
17143
fbc8a7bdb006
Patch #702, Info not reset on URL redirect
Sean Egan <seanegan@pidgin.im>
parents:
16979
diff
changeset
|
3865 | if (gfud->request_written < total_len) |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3866 | return; |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3867 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3868 | /* We're done writing our request, now start reading the response */ |
| 15884 | 3869 | purple_input_remove(gfud->inpa); |
| 3870 | gfud->inpa = purple_input_add(gfud->fd, PURPLE_INPUT_READ, url_fetch_recv_cb, | |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3871 | gfud); |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3872 | } |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3873 | |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3874 | static void |
|
14183
bdde840e984c
[gaim-migrate @ 16755]
Mark Doliner <markdoliner@pidgin.im>
parents:
14170
diff
changeset
|
3875 | url_fetch_connect_cb(gpointer url_data, gint source, const gchar *error_message) |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3876 | { |
| 15884 | 3877 | PurpleUtilFetchUrlData *gfud; |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3878 | |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3879 | gfud = url_data; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3880 | gfud->connect_data = NULL; |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3881 | |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3882 | if (source == -1) |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3883 | { |
| 15884 | 3884 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s: %s"), |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3885 | (gfud->website.address ? gfud->website.address : ""), error_message); |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3886 | return; |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3887 | } |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3888 | |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3889 | gfud->fd = source; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3890 | |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3891 | if (!gfud->request) |
|
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3892 | { |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3893 | if (gfud->user_agent) { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3894 | /* Host header is not forbidden in HTTP/1.0 requests, and HTTP/1.1 |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3895 | * clients must know how to handle the "chunked" transfer encoding. |
| 15884 | 3896 | * Purple doesn't know how to handle "chunked", so should always send |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3897 | * the Host header regardless, to get around some observed problems |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3898 | */ |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3899 | gfud->request = g_strdup_printf( |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3900 | "GET %s%s HTTP/%s\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3901 | "Connection: close\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3902 | "User-Agent: %s\r\n" |
|
13831
448d1c6328e0
[gaim-migrate @ 16274]
Christopher O'Brien <siege@pidgin.im>
parents:
13772
diff
changeset
|
3903 | "Accept: */*\r\n" |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3904 | "Host: %s\r\n\r\n", |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3905 | (gfud->full ? "" : "/"), |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3906 | (gfud->full ? (gfud->url ? gfud->url : "") : (gfud->website.page ? gfud->website.page : "")), |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3907 | (gfud->http11 ? "1.1" : "1.0"), |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3908 | (gfud->user_agent ? gfud->user_agent : ""), |
|
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3909 | (gfud->website.address ? gfud->website.address : "")); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3910 | } else { |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3911 | gfud->request = g_strdup_printf( |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3912 | "GET %s%s HTTP/%s\r\n" |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3913 | "Connection: close\r\n" |
|
13831
448d1c6328e0
[gaim-migrate @ 16274]
Christopher O'Brien <siege@pidgin.im>
parents:
13772
diff
changeset
|
3914 | "Accept: */*\r\n" |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3915 | "Host: %s\r\n\r\n", |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3916 | (gfud->full ? "" : "/"), |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3917 | (gfud->full ? (gfud->url ? gfud->url : "") : (gfud->website.page ? gfud->website.page : "")), |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3918 | (gfud->http11 ? "1.1" : "1.0"), |
|
15021
ac53d5725886
[gaim-migrate @ 17738]
Evan Schoenberg <evands@pidgin.im>
parents:
15016
diff
changeset
|
3919 | (gfud->website.address ? gfud->website.address : "")); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3920 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3921 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3922 | |
| 15884 | 3923 | purple_debug_misc("util", "Request: '%s'\n", gfud->request); |
| 3924 | ||
| 3925 | gfud->inpa = purple_input_add(source, PURPLE_INPUT_WRITE, | |
|
14144
ace3cb62001c
[gaim-migrate @ 16703]
Mark Doliner <markdoliner@pidgin.im>
parents:
14101
diff
changeset
|
3926 | url_fetch_send_cb, gfud); |
| 15884 | 3927 | url_fetch_send_cb(gfud, source, PURPLE_INPUT_WRITE); |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3928 | } |
|
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
3929 | |
| 15884 | 3930 | PurpleUtilFetchUrlData * |
| 3931 | purple_util_fetch_url_request(const char *url, gboolean full, | |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3932 | const char *user_agent, gboolean http11, |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3933 | const char *request, gboolean include_headers, |
| 15884 | 3934 | PurpleUtilFetchUrlCallback callback, void *user_data) |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3935 | { |
| 15884 | 3936 | PurpleUtilFetchUrlData *gfud; |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3937 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3938 | g_return_val_if_fail(url != NULL, NULL); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3939 | g_return_val_if_fail(callback != NULL, NULL); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3940 | |
| 15884 | 3941 | purple_debug_info("util", |
| 9240 | 3942 | "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", |
| 9257 | 3943 | url, full, user_agent?user_agent:"(null)", http11); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3944 | |
| 15884 | 3945 | gfud = g_new0(PurpleUtilFetchUrlData, 1); |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3946 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3947 | gfud->callback = callback; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3948 | gfud->user_data = user_data; |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3949 | gfud->url = g_strdup(url); |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
3950 | gfud->user_agent = g_strdup(user_agent); |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3951 | gfud->http11 = http11; |
|
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3952 | gfud->full = full; |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
3953 | gfud->request = g_strdup(request); |
|
12887
4235bbee17b1
[gaim-migrate @ 15240]
Daniel Atallah <datallah@pidgin.im>
parents:
12880
diff
changeset
|
3954 | gfud->include_headers = include_headers; |
|
20661
f7678627901e
Initialize file-descriptors to -1.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
20656
diff
changeset
|
3955 | gfud->fd = -1; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3956 | |
| 15884 | 3957 | purple_url_parse(url, &gfud->website.address, &gfud->website.port, |
| 9227 | 3958 | &gfud->website.page, &gfud->website.user, &gfud->website.passwd); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3959 | |
| 15884 | 3960 | gfud->connect_data = purple_proxy_connect(NULL, NULL, |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3961 | gfud->website.address, gfud->website.port, |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3962 | url_fetch_connect_cb, gfud); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3963 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3964 | if (gfud->connect_data == NULL) |
|
14151
34427f138b1f
[gaim-migrate @ 16712]
Mark Doliner <markdoliner@pidgin.im>
parents:
14144
diff
changeset
|
3965 | { |
| 15884 | 3966 | purple_util_fetch_url_error(gfud, _("Unable to connect to %s"), |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3967 | gfud->website.address); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3968 | return NULL; |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3969 | } |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3970 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3971 | return gfud; |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3972 | } |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3973 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3974 | void |
| 15884 | 3975 | purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *gfud) |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3976 | { |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3977 | if (gfud->connect_data != NULL) |
| 15884 | 3978 | purple_proxy_connect_cancel(gfud->connect_data); |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3979 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3980 | if (gfud->inpa > 0) |
| 15884 | 3981 | purple_input_remove(gfud->inpa); |
|
14416
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3982 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3983 | if (gfud->fd >= 0) |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3984 | close(gfud->fd); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3985 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3986 | g_free(gfud->website.user); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3987 | g_free(gfud->website.passwd); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3988 | g_free(gfud->website.address); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3989 | g_free(gfud->website.page); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3990 | g_free(gfud->url); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3991 | g_free(gfud->user_agent); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3992 | g_free(gfud->request); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3993 | g_free(gfud->webdata); |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3994 | |
|
c95ffd983a39
[gaim-migrate @ 17060]
Mark Doliner <markdoliner@pidgin.im>
parents:
14395
diff
changeset
|
3995 | g_free(gfud); |
|
7094
8f9588491993
[gaim-migrate @ 7659]
Christian Hammond <chipx86@chipx86.com>
parents:
7078
diff
changeset
|
3996 | } |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
3997 | |
| 7162 | 3998 | const char * |
| 15884 | 3999 | purple_url_decode(const char *str) |
| 7134 | 4000 | { |
| 4001 | static char buf[BUF_LEN]; | |
| 7631 | 4002 | guint i, j = 0; |
| 7134 | 4003 | char *bum; |
|
9804
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4004 | char hex[3]; |
| 7134 | 4005 | |
| 4006 | g_return_val_if_fail(str != NULL, NULL); | |
| 4007 | ||
|
9804
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4008 | /* |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4009 | * XXX - This check could be removed and buf could be made |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4010 | * dynamically allocated, but this is easier. |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4011 | */ |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4012 | if (strlen(str) >= BUF_LEN) |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4013 | return NULL; |
|
1fbe747c77aa
[gaim-migrate @ 10672]
Mark Doliner <markdoliner@pidgin.im>
parents:
9786
diff
changeset
|
4014 | |
| 7134 | 4015 | for (i = 0; i < strlen(str); i++) { |
| 4016 | ||
| 4017 | if (str[i] != '%') | |
| 4018 | buf[j++] = str[i]; | |
| 4019 | else { | |
| 4020 | strncpy(hex, str + ++i, 2); | |
| 4021 | hex[2] = '\0'; | |
| 4022 | ||
| 4023 | /* i is pointing to the start of the number */ | |
| 4024 | i++; | |
| 4025 | ||
| 4026 | /* | |
| 4027 | * Now it's at the end and at the start of the for loop | |
| 4028 | * will be at the next character. | |
| 4029 | */ | |
| 4030 | buf[j++] = strtol(hex, NULL, 16); | |
| 4031 | } | |
| 4032 | } | |
| 4033 | ||
| 4034 | buf[j] = '\0'; | |
| 4035 | ||
| 4036 | if (!g_utf8_validate(buf, -1, (const char **)&bum)) | |
| 4037 | *bum = '\0'; | |
| 4038 | ||
| 4039 | return buf; | |
| 4040 | } | |
| 4041 | ||
| 7162 | 4042 | const char * |
| 15884 | 4043 | purple_url_encode(const char *str) |
| 7134 | 4044 | { |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4045 | const char *iter; |
| 7134 | 4046 | static char buf[BUF_LEN]; |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4047 | char utf_char[6]; |
| 7631 | 4048 | guint i, j = 0; |
| 7134 | 4049 | |
| 4050 | g_return_val_if_fail(str != NULL, NULL); | |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4051 | 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
|
4052 | |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4053 | iter = str; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4054 | 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
|
4055 | gunichar c = g_utf8_get_char(iter); |
|
10800
00a2c404c1dc
[gaim-migrate @ 12446]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10732
diff
changeset
|
4056 | /* If the character is an ASCII character and is alphanumeric |
|
00a2c404c1dc
[gaim-migrate @ 12446]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10732
diff
changeset
|
4057 | * no need to escape */ |
|
00a2c404c1dc
[gaim-migrate @ 12446]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10732
diff
changeset
|
4058 | if (c < 128 && isalnum(c)) { |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4059 | buf[j++] = c; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4060 | } else { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4061 | int bytes = g_unichar_to_utf8(c, utf_char); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4062 | for (i = 0; i < bytes; i++) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4063 | if (j > (BUF_LEN - 4)) |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4064 | break; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4065 | sprintf(buf + j, "%%%02x", utf_char[i] & 0xff); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4066 | j += 3; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4067 | } |
| 7134 | 4068 | } |
| 4069 | } | |
| 4070 | ||
| 4071 | buf[j] = '\0'; | |
| 4072 | ||
| 4073 | return buf; | |
| 4074 | } | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4075 | |
| 9054 | 4076 | /* Originally lifted from |
| 4077 | * http://www.oreillynet.com/pub/a/network/excerpt/spcookbook_chap03/index3.html | |
| 4078 | * ... and slightly modified to be a bit more rfc822 compliant | |
| 4079 | * ... and modified a bit more to make domain checking rfc1035 compliant | |
| 4080 | * with the exception permitted in rfc1101 for domains to start with digit | |
| 4081 | * but not completely checking to avoid conflicts with IP addresses | |
| 4082 | */ | |
| 9045 | 4083 | gboolean |
| 15884 | 4084 | purple_email_is_valid(const char *address) |
| 9045 | 4085 | { |
| 4086 | const char *c, *domain; | |
| 4087 | static char *rfc822_specials = "()<>@,;:\\\"[]"; | |
| 4088 | ||
| 9054 | 4089 | /* first we validate the name portion (name@domain) (rfc822)*/ |
| 9045 | 4090 | for (c = address; *c; c++) { |
| 4091 | if (*c == '\"' && (c == address || *(c - 1) == '.' || *(c - 1) == '\"')) { | |
| 4092 | while (*++c) { | |
| 9054 | 4093 | if (*c == '\\') { |
| 4094 | if (*c++ && *c < 127 && *c != '\n' && *c != '\r') continue; | |
| 4095 | else return FALSE; | |
| 4096 | } | |
| 9045 | 4097 | if (*c == '\"') break; |
| 9054 | 4098 | if (*c < ' ' || *c >= 127) return FALSE; |
| 9045 | 4099 | } |
| 4100 | if (!*c++) return FALSE; | |
| 4101 | if (*c == '@') break; | |
| 4102 | if (*c != '.') return FALSE; | |
| 4103 | continue; | |
| 4104 | } | |
| 4105 | if (*c == '@') break; | |
| 4106 | if (*c <= ' ' || *c >= 127) return FALSE; | |
| 4107 | if (strchr(rfc822_specials, *c)) return FALSE; | |
| 4108 | } | |
|
18871
078df6ae587a
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <markdoliner@pidgin.im>
parents:
18813
diff
changeset
|
4109 | |
|
078df6ae587a
Valgrind was showing "Invalid read of size 1" when a string is passed
Mark Doliner <markdoliner@pidgin.im>
parents:
18813
diff
changeset
|
4110 | /* 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
|
4111 | 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
|
4112 | |
| 9054 | 4113 | /* strictly we should return false if (*(c - 1) == '.') too, but I think |
| 4114 | * we should permit user.@domain type addresses - they do work :) */ | |
| 4115 | if (c == address) return FALSE; | |
| 4116 | ||
| 4117 | /* next we validate the domain portion (name@domain) (rfc1035 & rfc1011) */ | |
| 9045 | 4118 | if (!*(domain = ++c)) return FALSE; |
| 4119 | do { | |
| 9054 | 4120 | if (*c == '.' && (c == domain || *(c - 1) == '.' || *(c - 1) == '-')) |
| 4121 | return FALSE; | |
| 4122 | if (*c == '-' && *(c - 1) == '.') return FALSE; | |
| 4123 | if ((*c < '0' && *c != '-' && *c != '.') || (*c > '9' && *c < 'A') || | |
| 4124 | (*c > 'Z' && *c < 'a') || (*c > 'z')) return FALSE; | |
| 9045 | 4125 | } while (*++c); |
| 4126 | ||
| 9054 | 4127 | if (*(c - 1) == '-') return FALSE; |
| 4128 | ||
| 4129 | return ((c - domain) > 3 ? TRUE : FALSE); | |
| 9045 | 4130 | } |
| 4131 | ||
|
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
|
4132 | gboolean |
|
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
|
4133 | purple_ip_address_is_valid(const char *ip) |
|
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
|
4134 | { |
|
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
|
4135 | 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
|
4136 | char end; |
|
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
|
4137 | 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
|
4138 | 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
|
4139 | 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
|
4140 | 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
|
4141 | } |
|
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
|
4142 | |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4143 | /* Stolen from gnome_uri_list_extract_uris */ |
|
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4144 | GList * |
| 15884 | 4145 | purple_uri_list_extract_uris(const gchar *uri_list) |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4146 | { |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4147 | const gchar *p, *q; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4148 | gchar *retval; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4149 | GList *result = NULL; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4150 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4151 | g_return_val_if_fail (uri_list != NULL, NULL); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4152 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4153 | p = uri_list; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4154 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4155 | /* 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
|
4156 | * 2396, or even check for allowed characters - we just ignore |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4157 | * comments and trim whitespace off the ends. We also |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4158 | * allow LF delimination as well as the specified CRLF. |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4159 | */ |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4160 | while (p) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4161 | if (*p != '#') { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4162 | while (isspace(*p)) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4163 | p++; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4164 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4165 | q = p; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4166 | while (*q && (*q != '\n') && (*q != '\r')) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4167 | q++; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4168 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4169 | if (q > p) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4170 | q--; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4171 | while (q > p && isspace(*q)) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4172 | q--; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4173 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4174 | retval = (gchar*)g_malloc (q - p + 2); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4175 | strncpy (retval, p, q - p + 1); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4176 | retval[q - p + 1] = '\0'; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4177 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4178 | result = g_list_prepend (result, retval); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4179 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4180 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4181 | p = strchr (p, '\n'); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4182 | if (p) |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4183 | p++; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4184 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4185 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4186 | return g_list_reverse (result); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4187 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4188 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4189 | |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4190 | /* Stolen from gnome_uri_list_extract_filenames */ |
|
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4191 | GList * |
| 15884 | 4192 | purple_uri_list_extract_filenames(const gchar *uri_list) |
|
11135
063678d038f9
[gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents:
11132
diff
changeset
|
4193 | { |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4194 | GList *tmp_list, *node, *result; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4195 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4196 | g_return_val_if_fail (uri_list != NULL, NULL); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4197 | |
| 15884 | 4198 | result = purple_uri_list_extract_uris(uri_list); |
|
9670
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4199 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4200 | tmp_list = result; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4201 | while (tmp_list) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4202 | gchar *s = (gchar*)tmp_list->data; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4203 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4204 | node = tmp_list; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4205 | tmp_list = tmp_list->next; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4206 | |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4207 | if (!strncmp (s, "file:", 5)) { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4208 | node->data = g_filename_from_uri (s, NULL, NULL); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4209 | /* not sure if this fallback is useful at all */ |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4210 | if (!node->data) node->data = g_strdup (s+5); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4211 | } else { |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4212 | result = g_list_remove_link(result, node); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4213 | g_list_free_1 (node); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4214 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4215 | g_free (s); |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4216 | } |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4217 | return result; |
|
4e8cb7ef72ab
[gaim-migrate @ 10522]
Daniel Atallah <datallah@pidgin.im>
parents:
9642
diff
changeset
|
4218 | } |
| 9054 | 4219 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4220 | /************************************************************************** |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4221 | * UTF8 String Functions |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4222 | **************************************************************************/ |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4223 | gchar * |
| 15884 | 4224 | purple_utf8_try_convert(const char *str) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4225 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4226 | gsize converted; |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4227 | gchar *utf8; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4228 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4229 | g_return_val_if_fail(str != NULL, NULL); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4230 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4231 | if (g_utf8_validate(str, -1, NULL)) { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4232 | return g_strdup(str); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4233 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4234 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4235 | utf8 = g_locale_to_utf8(str, -1, &converted, NULL, NULL); |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4236 | if (utf8 != NULL) |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4237 | return utf8; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4238 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4239 | 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
|
4240 | if ((utf8 != NULL) && (converted == strlen(str))) |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4241 | return utf8; |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4242 | |
|
14097
0c340861ab79
[gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents:
14002
diff
changeset
|
4243 | g_free(utf8); |
|
9642
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4244 | |
|
ec0b88cf9161
[gaim-migrate @ 10490]
Mark Doliner <markdoliner@pidgin.im>
parents:
9427
diff
changeset
|
4245 | return NULL; |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4246 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4247 | |
| 10258 | 4248 | #define utf8_first(x) ((x & 0x80) == 0 || (x & 0xe0) == 0xc0 \ |
| 4249 | || (x & 0xf0) == 0xe0 || (x & 0xf8) == 0xf) | |
| 4250 | gchar * | |
| 15884 | 4251 | purple_utf8_salvage(const char *str) |
| 10258 | 4252 | { |
| 4253 | GString *workstr; | |
| 4254 | const char *end; | |
| 4255 | ||
| 4256 | g_return_val_if_fail(str != NULL, NULL); | |
| 4257 | ||
| 4258 | workstr = g_string_sized_new(strlen(str)); | |
| 4259 | ||
| 4260 | do { | |
| 4261 | g_utf8_validate(str, -1, &end); | |
| 4262 | workstr = g_string_append_len(workstr, str, end - str); | |
| 4263 | str = end; | |
| 4264 | if (*str == '\0') | |
| 4265 | break; | |
| 4266 | do { | |
| 4267 | workstr = g_string_append_c(workstr, '?'); | |
| 4268 | str++; | |
| 4269 | } while (!utf8_first(*str)); | |
| 4270 | } while (*str != '\0'); | |
| 4271 | ||
| 4272 | return g_string_free(workstr, FALSE); | |
| 4273 | } | |
| 4274 | ||
|
21978
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4275 | /* |
|
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4276 | * 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
|
4277 | * gai_strerror(). |
|
637cf8396faf
Add a comment that I took this from glib
Mark Doliner <markdoliner@pidgin.im>
parents:
21977
diff
changeset
|
4278 | */ |
|
21977
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4279 | 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
|
4280 | 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
|
4281 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4282 | 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
|
4283 | char *msg; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4284 | 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
|
4285 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4286 | 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
|
4287 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4288 | 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
|
4289 | 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
|
4290 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4291 | /* 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
|
4292 | 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
|
4293 | 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
|
4294 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4295 | else |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4296 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4297 | 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
|
4298 | 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
|
4299 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4300 | /* 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
|
4301 | 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
|
4302 | 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
|
4303 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4304 | 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
|
4305 | 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
|
4306 | 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
|
4307 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4308 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4309 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4310 | 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
|
4311 | if (!msg) |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4312 | { |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4313 | 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
|
4314 | 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
|
4315 | } |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4316 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4317 | 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
|
4318 | |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4319 | 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
|
4320 | return msg; |
|
c87889698afb
Create a purple_gai_strerror() function similar to g_str_error() which
Mark Doliner <markdoliner@pidgin.im>
parents:
21909
diff
changeset
|
4321 | } |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4322 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4323 | char * |
| 15884 | 4324 | purple_utf8_ncr_encode(const char *str) |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4325 | { |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4326 | GString *out; |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4327 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4328 | g_return_val_if_fail(str != NULL, NULL); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4329 | 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
|
4330 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4331 | out = g_string_new(""); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4332 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4333 | for(; *str; str = g_utf8_next_char(str)) { |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4334 | gunichar wc = g_utf8_get_char(str); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4335 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4336 | /* super simple check. hopefully not too wrong. */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4337 | if(wc >= 0x80) { |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4338 | g_string_append_printf(out, "&#%u;", (guint32) wc); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4339 | } else { |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4340 | g_string_append_unichar(out, wc); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4341 | } |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4342 | } |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4343 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4344 | return g_string_free(out, FALSE); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4345 | } |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4346 | |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4347 | |
| 9161 | 4348 | char * |
| 15884 | 4349 | purple_utf8_ncr_decode(const char *str) |
| 9161 | 4350 | { |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4351 | GString *out; |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4352 | char *buf, *b; |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4353 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4354 | g_return_val_if_fail(str != NULL, NULL); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4355 | 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
|
4356 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4357 | buf = (char *) str; |
|
12813
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4358 | out = g_string_new(""); |
|
6f67cfa0e6a0
[gaim-migrate @ 15161]
Christopher O'Brien <siege@pidgin.im>
parents:
12802
diff
changeset
|
4359 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4360 | while( (b = strstr(buf, "&#")) ) { |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4361 | gunichar wc; |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4362 | int base = 0; |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4363 | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4364 | /* append everything leading up to the &# */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4365 | g_string_append_len(out, buf, b-buf); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4366 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4367 | b += 2; /* skip past the &# */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4368 | |
|
13489
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4369 | /* 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
|
4370 | if(*b == 'x' || *b == 'X') { |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4371 | base = 16; |
|
13489
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4372 | b++; |
|
6fbb8904f434
[gaim-migrate @ 15864]
Christopher O'Brien <siege@pidgin.im>
parents:
13465
diff
changeset
|
4373 | } |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4374 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4375 | /* advances buf to the end of the ncr segment */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4376 | wc = (gunichar) strtoul(b, &buf, base); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4377 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4378 | /* this mimics the previous impl of ncr_decode */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4379 | if(*buf == ';') { |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4380 | g_string_append_unichar(out, wc); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4381 | buf++; |
| 9161 | 4382 | } |
| 4383 | } | |
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4384 | |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4385 | /* append whatever's left */ |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4386 | g_string_append(out, buf); |
|
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4387 | |
| 9161 | 4388 | return g_string_free(out, FALSE); |
| 4389 | } | |
| 4390 | ||
|
12880
eb39a798ff9a
[gaim-migrate @ 15232]
Christopher O'Brien <siege@pidgin.im>
parents:
12813
diff
changeset
|
4391 | |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4392 | int |
| 15884 | 4393 | purple_utf8_strcasecmp(const char *a, const char *b) |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4394 | { |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4395 | char *a_norm = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4396 | char *b_norm = NULL; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4397 | int ret = -1; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4398 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4399 | if(!a && b) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4400 | return -1; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4401 | else if(!b && a) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4402 | return 1; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4403 | else if(!a && !b) |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4404 | return 0; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4405 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4406 | 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
|
4407 | { |
| 15884 | 4408 | purple_debug_error("purple_utf8_strcasecmp", |
|
7108
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4409 | "One or both parameters are invalid UTF8\n"); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4410 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4411 | } |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4412 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4413 | a_norm = g_utf8_casefold(a, -1); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4414 | b_norm = g_utf8_casefold(b, -1); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4415 | ret = g_utf8_collate(a_norm, b_norm); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4416 | g_free(a_norm); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4417 | g_free(b_norm); |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4418 | |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4419 | return ret; |
|
82655fa54acb
[gaim-migrate @ 7673]
Christian Hammond <chipx86@chipx86.com>
parents:
7107
diff
changeset
|
4420 | } |
| 7162 | 4421 | |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4422 | /* previously conversation::find_nick() */ |
|
13201
8c224ef70efa
[gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents:
13164
diff
changeset
|
4423 | gboolean |
| 15884 | 4424 | purple_utf8_has_word(const char *haystack, const char *needle) |
|
11552
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4425 | { |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4426 | char *hay, *pin, *p; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4427 | int n; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4428 | gboolean ret = FALSE; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4429 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4430 | hay = g_utf8_strdown(haystack, -1); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4431 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4432 | pin = g_utf8_strdown(needle, -1); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4433 | n = strlen(pin); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4434 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4435 | if ((p = strstr(hay, pin)) != NULL) { |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4436 | if ((p == hay || !isalnum(*(p - 1))) && !isalnum(*(p + n))) { |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4437 | ret = TRUE; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4438 | } |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4439 | } |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4440 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4441 | g_free(pin); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4442 | g_free(hay); |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4443 | |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4444 | return ret; |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4445 | } |
|
674a2a79943a
[gaim-migrate @ 13812]
Casey Harkins <charkins@pidgin.im>
parents:
11493
diff
changeset
|
4446 | |
|
13090
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4447 | void |
| 15884 | 4448 | 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
|
4449 | { |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4450 | gchar *message_conv; |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4451 | GError *error = NULL; |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4452 | |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4453 | /* Try to convert 'message' to user's locale */ |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4454 | 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
|
4455 | if (message_conv != NULL) { |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4456 | fputs(message_conv, filestream); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4457 | g_free(message_conv); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4458 | } |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4459 | else |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4460 | { |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4461 | /* use 'message' as a fallback */ |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4462 | g_warning("%s\n", error->message); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4463 | g_error_free(error); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4464 | fputs(message, filestream); |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4465 | } |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4466 | } |
|
aee4ed853ff3
[gaim-migrate @ 15451]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
13033
diff
changeset
|
4467 | |
|
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
|
4468 | gboolean purple_message_meify(char *message, gssize len) |
| 7564 | 4469 | { |
| 4470 | char *c; | |
| 4471 | gboolean inside_html = FALSE; | |
| 4472 | ||
| 4473 | g_return_val_if_fail(message != NULL, FALSE); | |
| 4474 | ||
| 4475 | if(len == -1) | |
| 4476 | len = strlen(message); | |
| 4477 | ||
| 4478 | for (c = message; *c; c++, len--) { | |
| 4479 | if(inside_html) { | |
| 4480 | if(*c == '>') | |
| 4481 | inside_html = FALSE; | |
| 4482 | } else { | |
| 4483 | if(*c == '<') | |
| 4484 | inside_html = TRUE; | |
| 4485 | else | |
| 4486 | break; | |
| 4487 | } | |
| 4488 | } | |
| 4489 | ||
| 4490 | if(*c && !g_ascii_strncasecmp(c, "/me ", 4)) { | |
| 4491 | memmove(c, c+4, len-3); | |
| 4492 | return TRUE; | |
| 4493 | } | |
| 4494 | ||
| 4495 | return FALSE; | |
| 4496 | } | |
| 4497 | ||
| 15884 | 4498 | char *purple_text_strip_mnemonic(const char *in) |
| 7889 | 4499 | { |
| 4500 | char *out; | |
| 4501 | char *a; | |
| 8561 | 4502 | char *a0; |
| 7889 | 4503 | const char *b; |
| 4504 | ||
| 4505 | g_return_val_if_fail(in != NULL, NULL); | |
| 4506 | ||
| 4507 | out = g_malloc(strlen(in)+1); | |
| 4508 | a = out; | |
| 4509 | b = in; | |
| 4510 | ||
| 8561 | 4511 | a0 = a; /* The last non-space char seen so far, or the first char */ |
| 4512 | ||
| 7889 | 4513 | while(*b) { |
| 4514 | if(*b == '_') { | |
| 8561 | 4515 | if(a > out && b > in && *(b-1) == '(' && *(b+1) && !(*(b+1) & 0x80) && *(b+2) == ')') { |
| 4516 | /* Detected CJK style shortcut (Bug 875311) */ | |
| 4517 | a = a0; /* undo the left parenthesis */ | |
| 4518 | b += 3; /* and skip the whole mess */ | |
| 4519 | } else if(*(b+1) == '_') { | |
| 7889 | 4520 | *(a++) = '_'; |
| 4521 | b += 2; | |
| 8561 | 4522 | a0 = a; |
| 7889 | 4523 | } else { |
| 4524 | b++; | |
| 4525 | } | |
| 8561 | 4526 | /* We don't want to corrupt the middle of UTF-8 characters */ |
| 4527 | } else if (!(*b & 0x80)) { /* other 1-byte char */ | |
| 4528 | if (*b != ' ') | |
| 4529 | a0 = a; | |
| 4530 | *(a++) = *(b++); | |
| 7889 | 4531 | } else { |
| 8561 | 4532 | /* Multibyte utf8 char, don't look for _ inside these */ |
| 4533 | int n = 0; | |
| 4534 | int i; | |
| 4535 | if ((*b & 0xe0) == 0xc0) { | |
| 4536 | n = 2; | |
| 4537 | } else if ((*b & 0xf0) == 0xe0) { | |
| 4538 | n = 3; | |
| 4539 | } else if ((*b & 0xf8) == 0xf0) { | |
| 4540 | n = 4; | |
| 4541 | } else if ((*b & 0xfc) == 0xf8) { | |
| 4542 | n = 5; | |
| 4543 | } else if ((*b & 0xfe) == 0xfc) { | |
| 4544 | n = 6; | |
| 4545 | } else { /* Illegal utf8 */ | |
| 4546 | n = 1; | |
| 4547 | } | |
| 4548 | a0 = a; /* unless we want to delete CJK spaces too */ | |
| 4549 | for (i = 0; i < n && *b; i += 1) { | |
| 4550 | *(a++) = *(b++); | |
| 4551 | } | |
| 7889 | 4552 | } |
| 4553 | } | |
| 4554 | *a = '\0'; | |
| 4555 | ||
| 4556 | return out; | |
| 4557 | } | |
| 4558 | ||
| 15884 | 4559 | const char* purple_unescape_filename(const char *escaped) { |
| 4560 | return purple_url_decode(escaped); | |
| 9926 | 4561 | } |
| 4562 | ||
| 4563 | ||
| 15884 | 4564 | /* this is almost identical to purple_url_encode (hence purple_url_decode |
| 9926 | 4565 | * being used above), but we want to keep certain characters unescaped |
| 4566 | * for compat reasons */ | |
| 4567 | const char * | |
| 15884 | 4568 | purple_escape_filename(const char *str) |
| 9926 | 4569 | { |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4570 | const char *iter; |
| 9926 | 4571 | static char buf[BUF_LEN]; |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4572 | char utf_char[6]; |
| 9926 | 4573 | guint i, j = 0; |
| 4574 | ||
| 4575 | g_return_val_if_fail(str != NULL, NULL); | |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4576 | 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
|
4577 | |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4578 | iter = str; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4579 | 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
|
4580 | gunichar c = g_utf8_get_char(iter); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4581 | /* If the character is an ASCII character and is alphanumeric, |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4582 | * 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
|
4583 | if (c < 128 && (g_ascii_isalnum(c) || c == '@' || c == '-' || |
|
10700
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4584 | c == '_' || c == '.' || c == '#')) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4585 | buf[j++] = c; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4586 | } else { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4587 | int bytes = g_unichar_to_utf8(c, utf_char); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4588 | for (i = 0; i < bytes; i++) { |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4589 | if (j > (BUF_LEN - 4)) |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4590 | break; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4591 | sprintf(buf + j, "%%%02x", utf_char[i] & 0xff); |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4592 | j += 3; |
|
93f5099b2775
[gaim-migrate @ 12273]
Daniel Atallah <datallah@pidgin.im>
parents:
10636
diff
changeset
|
4593 | } |
| 9926 | 4594 | } |
| 4595 | } | |
| 4596 | ||
| 4597 | buf[j] = '\0'; | |
| 4598 | ||
| 4599 | return buf; | |
| 4600 | } | |
| 4601 | ||
| 15884 | 4602 | 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
|
4603 | { |
|
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
|
4604 | if (protocol && act && strcmp(protocol, "prpl-oscar") == 0) { |
|
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
|
4605 | 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
|
4606 | 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
|
4607 | 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
|
4608 | 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
|
4609 | 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
|
4610 | } |
|
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
|
4611 | 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
|
4612 | } |
|
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
|
4613 | |
| 15884 | 4614 | 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
|
4615 | { |
|
15726
03539465ace5
Merge fix and build fix for win32
Daniel Atallah <datallah@pidgin.im>
parents:
15725
diff
changeset
|
4616 | #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
|
4617 | #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
|
4618 | 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
|
4619 | 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
|
4620 | 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
|
4621 | 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
|
4622 | 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
|
4623 | 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
|
4624 | |
|
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
|
4625 | #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
|
4626 | 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
|
4627 | #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
|
4628 | |
|
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
|
4629 | #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
|
4630 | 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
|
4631 | #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
|
4632 | |
|
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
|
4633 | 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
|
4634 | 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
|
4635 | 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
|
4636 | 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
|
4637 | 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
|
4638 | 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
|
4639 | 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
|
4640 | 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
|
4641 | 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
|
4642 | 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
|
4643 | #endif /* HAVE_SIGNAL_H */ |
|
15726
03539465ace5
Merge fix and build fix for win32
Daniel Atallah <datallah@pidgin.im>
parents:
15725
diff
changeset
|
4644 | #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
|
4645 | } |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4646 | |
|
22217
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4647 | static void |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4648 | 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
|
4649 | { |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4650 | va_list args; |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4651 | va_start(args, status); |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4652 | 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
|
4653 | va_end(args); |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4654 | } |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4655 | |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4656 | 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
|
4657 | { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4658 | 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
|
4659 | 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
|
4660 | PurplePresence *presence; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4661 | PurpleStatus *tune; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4662 | 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
|
4663 | 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
|
4664 | continue; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4665 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4666 | 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
|
4667 | 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
|
4668 | if (!tune) |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4669 | continue; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4670 | if (title) { |
|
22217
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4671 | 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
|
4672 | PURPLE_TUNE_TITLE, title, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4673 | PURPLE_TUNE_ARTIST, artist, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4674 | PURPLE_TUNE_ALBUM, album, |
|
f06fcbcb6ca5
Make setting 'now listening' actually work, thanks to khc.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22181
diff
changeset
|
4675 | NULL); |
|
22133
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4676 | } else { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4677 | 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
|
4678 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4679 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4680 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4681 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4682 | 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
|
4683 | { |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4684 | GString *string; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4685 | char *esc; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4686 | |
|
22181
4b62573becd9
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22133
diff
changeset
|
4687 | 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
|
4688 | return NULL; |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4689 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4690 | 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
|
4691 | 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
|
4692 | 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
|
4693 | g_free(esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4694 | |
|
22181
4b62573becd9
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22133
diff
changeset
|
4695 | 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
|
4696 | 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
|
4697 | 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
|
4698 | g_free(esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4699 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4700 | |
|
22181
4b62573becd9
Ignore both NULL and empty strings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22133
diff
changeset
|
4701 | 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
|
4702 | 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
|
4703 | 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
|
4704 | g_free(esc); |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4705 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4706 | |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4707 | 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
|
4708 | } |
|
6eb22afb9701
Utility functions to set and format song information. Closes #4398.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
21978
diff
changeset
|
4709 |