Mercurial > pidgin
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 */ |
