Mercurial > pidgin
changeset 30264:28d5f60910c9
merge of '6eb94bb98b242b76b07fe78fe89d136b9201d6f1'
and 'a61565c363dde22672cf7caafa30d1279ec84f33'
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Mon, 12 Jul 2010 15:15:18 +0000 |
parents | 1f44f0144ff8 (diff) 7c5f2e776ceb (current diff) |
children | 62ca462d0abc 8816f2c9ae43 |
files | |
diffstat | 2 files changed, 36 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/libpurple/upnp.c Sat Jul 10 02:10:19 2010 +0000 +++ b/libpurple/upnp.c Mon Jul 12 15:15:18 2010 +0000 @@ -403,6 +403,11 @@ lookup_internal_ip(); } + if (dd->inpa > 0) + purple_input_remove(dd->inpa); + if (dd->tima > 0) + purple_timeout_remove(dd->tima); + g_free(dd); } @@ -506,6 +511,8 @@ if (dd->inpa) purple_input_remove(dd->inpa); + if (dd->tima > 0) + purple_timeout_remove(dd->tima); dd->inpa = 0; dd->tima = 0; @@ -610,7 +617,7 @@ /* We have already done all our retries. Make sure that the callback * doesn't get called before the original function returns */ - purple_timeout_add(10, purple_upnp_discover_timeout, dd); + dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd); } void @@ -647,7 +654,7 @@ "purple_upnp_discover(): Failed In sock creation\n"); /* Short circuit the retry attempts */ dd->retry_count = NUM_UDP_ATTEMPTS; - purple_timeout_add(10, purple_upnp_discover_timeout, dd); + dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd); return; } @@ -659,7 +666,7 @@ "purple_upnp_discover(): Failed In gethostbyname\n"); /* Short circuit the retry attempts */ dd->retry_count = NUM_UDP_ATTEMPTS; - purple_timeout_add(10, purple_upnp_discover_timeout, dd); + dd->tima = purple_timeout_add(10, purple_upnp_discover_timeout, dd); return; }
--- a/libpurple/util.c Sat Jul 10 02:10:19 2010 +0000 +++ b/libpurple/util.c Mon Jul 12 15:15:18 2010 +0000 @@ -3423,7 +3423,7 @@ char **ret_path, char **ret_user, char **ret_passwd) { gboolean is_https = FALSE; - char scan_info[255]; + const char * scan_info; char port_str[6]; int f; const char *at, *slash; @@ -3431,11 +3431,12 @@ char host[256], path[256], user[256], passwd[256]; int port = 0; /* hyphen at end includes it in control set */ - static const char addr_ctrl[] = "A-Za-z0-9.-"; - static const char port_ctrl[] = "0-9"; - static const char page_ctrl[] = "A-Za-z0-9.~_/:*!@&%%?=+^-"; - static const char user_ctrl[] = "A-Za-z0-9.~_/*!&%%?=+^-"; - static const char passwd_ctrl[] = "A-Za-z0-9.~_/*!&%%?=+^-"; + +#define ADDR_CTRL "A-Za-z0-9.-" +#define PORT_CTRL "0-9" +#define PAGE_CTRL "A-Za-z0-9.~_/:*!@&%%?=+^-" +#define USER_CTRL "A-Za-z0-9.~_/*!&%%?=+^-" +#define PASSWD_CTRL "A-Za-z0-9.~_/*!&%%?=+^-" g_return_val_if_fail(url != NULL, FALSE); @@ -3455,37 +3456,32 @@ /* Only care about @ char BEFORE the first / */ at = strchr(url, '@'); slash = strchr(url, '/'); - if ((at != NULL) && - (((slash != NULL) && (strlen(at) > strlen(slash))) || - (slash == NULL))) { - g_snprintf(scan_info, sizeof(scan_info), - "%%255[%s]:%%255[%s]^@", user_ctrl, passwd_ctrl); + f = 0; + if (at && (!slash || at < slash)) { + scan_info = "%255[" USER_CTRL "]:%255[" PASSWD_CTRL "]^@"; f = sscanf(url, scan_info, user, passwd); - if (f ==1 ) { + if (f == 1) { /* No passwd, possibly just username supplied */ - g_snprintf(scan_info, sizeof(scan_info), - "%%255[%s]^@", user_ctrl); + scan_info = "%255[" USER_CTRL "]^@"; f = sscanf(url, scan_info, user); - *passwd = '\0'; } url = at+1; /* move pointer after the @ char */ - } else { + } + + if (f < 1) { *user = '\0'; *passwd = '\0'; - } - - g_snprintf(scan_info, sizeof(scan_info), - "%%255[%s]:%%5[%s]/%%255[%s]", addr_ctrl, port_ctrl, page_ctrl); - + } else if (f == 1) + *passwd = '\0'; + + scan_info = "%255[" ADDR_CTRL "]:%5[" PORT_CTRL "]/%255[" PAGE_CTRL "]"; f = sscanf(url, scan_info, host, port_str, path); if (f == 1) { - g_snprintf(scan_info, sizeof(scan_info), - "%%255[%s]/%%255[%s]", - addr_ctrl, page_ctrl); + scan_info = "%255[" ADDR_CTRL "]/%255[" PAGE_CTRL "]"; f = sscanf(url, scan_info, host, path); /* Use the default port */ if (is_https) @@ -3509,6 +3505,12 @@ if (ret_passwd != NULL) *ret_passwd = g_strdup(passwd); return ((*host != '\0') ? TRUE : FALSE); + +#undef ADDR_CTRL +#undef PORT_CTRL +#undef PAGE_CTRL +#undef USER_CTRL +#undef PASSWD_CTRL } /**