comparison libpurple/util.c @ 32819:2c6510167895 default tip

propagate from branch 'im.pidgin.pidgin.2.x.y' (head 3315c5dfbd0ad16511bdcf865e5b07c02d07df24) to branch 'im.pidgin.pidgin' (head cbd1eda6bcbf0565ae7766396bb8f6f419cb6a9a)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 02 Jun 2012 02:30:49 +0000
parents d413405ab2fb
children
comparison
equal deleted inserted replaced
32818:01ff09d4a463 32819:2c6510167895
71 gssize max_len; 71 gssize max_len;
72 gboolean chunked; 72 gboolean chunked;
73 PurpleAccount *account; 73 PurpleAccount *account;
74 }; 74 };
75 75
76 struct _PurpleMenuAction
77 {
78 char *label;
79 PurpleCallback callback;
80 gpointer data;
81 GList *children;
82 };
83
76 static char *custom_user_dir = NULL; 84 static char *custom_user_dir = NULL;
77 static char *user_dir = NULL; 85 static char *user_dir = NULL;
78 86
79 87
80 PurpleMenuAction * 88 PurpleMenuAction *
96 104
97 g_free(act->label); 105 g_free(act->label);
98 g_free(act); 106 g_free(act);
99 } 107 }
100 108
109 char * purple_menu_action_get_label(const PurpleMenuAction *act)
110 {
111 g_return_val_if_fail(act != NULL, NULL);
112
113 return act->label;
114 }
115
116 PurpleCallback purple_menu_action_get_callback(const PurpleMenuAction *act)
117 {
118 g_return_val_if_fail(act != NULL, NULL);
119
120 return act->callback;
121 }
122
123 gpointer purple_menu_action_get_data(const PurpleMenuAction *act)
124 {
125 g_return_val_if_fail(act != NULL, NULL);
126
127 return act->data;
128 }
129
130 GList* purple_menu_action_get_children(const PurpleMenuAction *act)
131 {
132 g_return_val_if_fail(act != NULL, NULL);
133
134 return act->children;
135 }
136
137 void purple_menu_action_set_label(PurpleMenuAction *act, char *label)
138 {
139 g_return_if_fail(act != NULL);
140
141 act-> label = label;
142 }
143
144 void purple_menu_action_set_callback(PurpleMenuAction *act, PurpleCallback callback)
145 {
146 g_return_if_fail(act != NULL);
147
148 act->callback = callback;
149 }
150
151 void purple_menu_action_set_data(PurpleMenuAction *act, gpointer data)
152 {
153 g_return_if_fail(act != NULL);
154
155 act->data = data;
156 }
157
158 void purple_menu_action_set_children(PurpleMenuAction *act, GList *children)
159 {
160 g_return_if_fail(act != NULL);
161
162 act->children = children;
163 }
164
101 void 165 void
102 purple_util_init(void) 166 purple_util_init(void)
103 { 167 {
104 /* This does nothing right now. It exists for symmetry with 168 /* This does nothing right now. It exists for symmetry with
105 * purple_util_uninit() and forwards compatibility. */ 169 * purple_util_uninit() and forwards compatibility. */
145 209
146 g_return_val_if_fail(str != NULL, NULL); 210 g_return_val_if_fail(str != NULL, NULL);
147 211
148 len = strlen(str); 212 len = strlen(str);
149 213
150 g_return_val_if_fail(strlen(str) > 0, 0); 214 g_return_val_if_fail(*str, 0);
151 g_return_val_if_fail(len % 2 == 0, 0); 215 g_return_val_if_fail(len % 2 == 0, 0);
152 216
153 data = g_malloc(len / 2); 217 data = g_malloc(len / 2);
154 218
155 for (i = 0; i < len; i++) 219 for (i = 0; i < len; i++)
610 purple_debug_error("util", "Result conversion failed in purple_utf8_strftime(): %s\n", err->message); 674 purple_debug_error("util", "Result conversion failed in purple_utf8_strftime(): %s\n", err->message);
611 g_error_free(err); 675 g_error_free(err);
612 } 676 }
613 else 677 else
614 { 678 {
615 purple_strlcpy(buf, utf8); 679 g_strlcpy(buf, utf8, sizeof(buf));
616 g_free(utf8); 680 g_free(utf8);
617 } 681 }
618 682
619 return buf; 683 return buf;
620 } 684 }
1319 } 1383 }
1320 else 1384 else
1321 g_string_append_len(dest, p, q - p); 1385 g_string_append_len(dest, p, q - p);
1322 } 1386 }
1323 1387
1324 purple_notify_user_info_add_pair(user_info, display_name, dest->str); 1388 purple_notify_user_info_add_pair_html(user_info, display_name, dest->str);
1325 g_string_free(dest, TRUE); 1389 g_string_free(dest, TRUE);
1326 1390
1327 return TRUE; 1391 return TRUE;
1328 } 1392 }
1329 1393
2265 char *d; 2329 char *d;
2266 2330
2267 url_buf = g_string_free(gurl_buf, FALSE); 2331 url_buf = g_string_free(gurl_buf, FALSE);
2268 2332
2269 /* strip off trailing periods */ 2333 /* strip off trailing periods */
2270 if (strlen(url_buf) > 0) { 2334 if (*url_buf) {
2271 for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) 2335 for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--)
2272 *d = '\0'; 2336 *d = '\0';
2273 } 2337 }
2274 2338
2275 tmpurlbuf = purple_unescape_html(url_buf); 2339 tmpurlbuf = purple_unescape_html(url_buf);
3265 3329
3266 return ret; 3330 return ret;
3267 } 3331 }
3268 3332
3269 char * 3333 char *
3270 purple_str_size_to_units(size_t size) 3334 purple_str_size_to_units(goffset size)
3271 { 3335 {
3272 static const char * const size_str[] = { "bytes", "KiB", "MiB", "GiB" }; 3336 static const char * const size_str[] = { "bytes", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB" };
3273 float size_mag; 3337 float size_mag;
3274 int size_index = 0; 3338 int size_index = 0;
3275 3339
3276 if (size == -1) { 3340 if (size == -1) {
3277 return g_strdup(_("Calculating...")); 3341 return g_strdup(_("Calculating..."));
3280 return g_strdup(_("Unknown.")); 3344 return g_strdup(_("Unknown."));
3281 } 3345 }
3282 else { 3346 else {
3283 size_mag = (float)size; 3347 size_mag = (float)size;
3284 3348
3285 while ((size_index < 3) && (size_mag > 1024)) { 3349 while ((size_index < G_N_ELEMENTS(size_str) - 1) && (size_mag > 1024)) {
3286 size_mag /= 1024; 3350 size_mag /= 1024;
3287 size_index++; 3351 size_index++;
3288 } 3352 }
3289 3353
3290 if (size_index == 0) { 3354 if (size_index == 0) {
4101 (gfud->website.address ? gfud->website.address : ""), 4165 (gfud->website.address ? gfud->website.address : ""),
4102 purple_ssl_strerror(error)); 4166 purple_ssl_strerror(error));
4103 } 4167 }
4104 4168
4105 PurpleUtilFetchUrlData * 4169 PurpleUtilFetchUrlData *
4106 purple_util_fetch_url_request(const char *url, gboolean full, 4170 purple_util_fetch_url_request(PurpleAccount *account,
4107 const char *user_agent, gboolean http11,
4108 const char *request, gboolean include_headers,
4109 PurpleUtilFetchUrlCallback callback, void *user_data)
4110 {
4111 return purple_util_fetch_url_request_len_with_account(NULL, url, full,
4112 user_agent, http11,
4113 request, include_headers, -1,
4114 callback, user_data);
4115 }
4116
4117 PurpleUtilFetchUrlData *
4118 purple_util_fetch_url_request_len(const char *url, gboolean full,
4119 const char *user_agent, gboolean http11,
4120 const char *request, gboolean include_headers, gssize max_len,
4121 PurpleUtilFetchUrlCallback callback, void *user_data)
4122 {
4123 return purple_util_fetch_url_request_len_with_account(NULL, url, full,
4124 user_agent, http11, request, include_headers, max_len, callback,
4125 user_data);
4126 }
4127
4128 PurpleUtilFetchUrlData *
4129 purple_util_fetch_url_request_len_with_account(PurpleAccount *account,
4130 const char *url, gboolean full, const char *user_agent, gboolean http11, 4171 const char *url, gboolean full, const char *user_agent, gboolean http11,
4131 const char *request, gboolean include_headers, gssize max_len, 4172 const char *request, gboolean include_headers, gssize max_len,
4132 PurpleUtilFetchUrlCallback callback, void *user_data) 4173 PurpleUtilFetchUrlCallback callback, void *user_data)
4133 { 4174 {
4134 PurpleUtilFetchUrlData *gfud; 4175 PurpleUtilFetchUrlData *gfud;
4411 * we didn't see a '::' and saw exactly 8 chunks. 4452 * we didn't see a '::' and saw exactly 8 chunks.
4412 */ 4453 */
4413 return (double_colon && chunks < 8) || (!double_colon && chunks == 8); 4454 return (double_colon && chunks < 8) || (!double_colon && chunks == 8);
4414 } 4455 }
4415 4456
4416 /* TODO 3.0.0: Add ipv6 check, too */
4417 gboolean 4457 gboolean
4418 purple_ip_address_is_valid(const char *ip) 4458 purple_ip_address_is_valid(const char *ip)
4419 { 4459 {
4420 return purple_ipv4_address_is_valid(ip); 4460 return (purple_ipv4_address_is_valid(ip) || purple_ipv6_address_is_valid(ip));
4421 } 4461 }
4422 4462
4423 /* Stolen from gnome_uri_list_extract_uris */ 4463 /* Stolen from gnome_uri_list_extract_uris */
4424 GList * 4464 GList *
4425 purple_uri_list_extract_uris(const gchar *uri_list) 4465 purple_uri_list_extract_uris(const gchar *uri_list)
4595 4635
4596 /* 4636 /*
4597 * This function is copied from g_strerror() but changed to use 4637 * This function is copied from g_strerror() but changed to use
4598 * gai_strerror(). 4638 * gai_strerror().
4599 */ 4639 */
4600 G_CONST_RETURN gchar * 4640 const gchar *
4601 purple_gai_strerror(gint errnum) 4641 purple_gai_strerror(gint errnum)
4602 { 4642 {
4603 static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT; 4643 static GStaticPrivate msg_private = G_STATIC_PRIVATE_INIT;
4604 char *msg; 4644 char *msg;
4605 int saved_errno = errno; 4645 int saved_errno = errno;
4941 buf[j] = '\0'; 4981 buf[j] = '\0';
4942 4982
4943 return buf; 4983 return buf;
4944 } 4984 }
4945 4985
4946 const char *_purple_oscar_convert(const char *act, const char *protocol)
4947 {
4948 if (act && purple_strequal(protocol, "prpl-oscar")) {
4949 int i;
4950 for (i = 0; act[i] != '\0'; i++)
4951 if (!isdigit(act[i]))
4952 return "prpl-aim";
4953 return "prpl-icq";
4954 }
4955 return protocol;
4956 }
4957
4958 void purple_restore_default_signal_handlers(void) 4986 void purple_restore_default_signal_handlers(void)
4959 { 4987 {
4960 #ifndef _WIN32 4988 #ifndef _WIN32
4961 #ifdef HAVE_SIGNAL_H 4989 #ifdef HAVE_SIGNAL_H
4962 signal(SIGHUP, SIG_DFL); /* 1: terminal line hangup */ 4990 signal(SIGHUP, SIG_DFL); /* 1: terminal line hangup */