comparison src/proxy.c @ 10305:9bfcb5eb12bd

[gaim-migrate @ 11490] Remove what was apparently the only goto in Gaim. I almost didn't do this because this is probably Syd Logan's last few lines of code, or something. Eh. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Fri, 03 Dec 2004 00:10:19 +0000
parents 36b7335d3452
children 2ac21bf20e04
comparison
equal deleted inserted replaced
10304:842c424078a3 10305:9bfcb5eb12bd
634 634
635 #elif defined _WIN32 /* end __unix__ */ 635 #elif defined _WIN32 /* end __unix__ */
636 636
637 /* Note: The below win32 implementation is actually platform independent. 637 /* Note: The below win32 implementation is actually platform independent.
638 Perhaps this can be used in place of the above platform dependent code. 638 Perhaps this can be used in place of the above platform dependent code.
639 */ 639 */
640 640
641 typedef struct _dns_tdata { 641 typedef struct _dns_tdata {
642 char *hostname; 642 char *hostname;
643 int port; 643 int port;
644 dns_callback_t callback; 644 dns_callback_t callback;
658 static gpointer dns_thread(gpointer data) { 658 static gpointer dns_thread(gpointer data) {
659 struct sockaddr_in sin; 659 struct sockaddr_in sin;
660 dns_tdata *td = (dns_tdata*)data; 660 dns_tdata *td = (dns_tdata*)data;
661 struct hostent *hp; 661 struct hostent *hp;
662 662
663 if(!(hp = gethostbyname(td->hostname))) 663 if(!(hp = gethostbyname(td->hostname))) {
664 goto failure; 664 g_free(td->hostname);
665 g_free(td);
666 return 0;
667 }
668
665 memset(&sin, 0, sizeof(struct sockaddr_in)); 669 memset(&sin, 0, sizeof(struct sockaddr_in));
666 memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length); 670 memcpy(&sin.sin_addr.s_addr, hp->h_addr, hp->h_length);
667 sin.sin_family = hp->h_addrtype; 671 sin.sin_family = hp->h_addrtype;
668 sin.sin_port = htons(td->port); 672 sin.sin_port = htons(td->port);
669 673
670 td->hosts = g_slist_append(td->hosts, GINT_TO_POINTER(sizeof(sin))); 674 td->hosts = g_slist_append(td->hosts, GINT_TO_POINTER(sizeof(sin)));
671 td->hosts = g_slist_append(td->hosts, g_memdup(&sin, sizeof(sin))); 675 td->hosts = g_slist_append(td->hosts, g_memdup(&sin, sizeof(sin)));
672 /* back to main thread */ 676 /* back to main thread */
673 g_idle_add(dns_main_thread_cb, td); 677 g_idle_add(dns_main_thread_cb, td);
674 return 0; 678 return 0;
675 failure: 679 }
676 g_free(td->hostname);
677 g_free(td);
678 return 0;
679 }
680 680
681 int gaim_gethostbyname_async(const char *hostname, int port, 681 int gaim_gethostbyname_async(const char *hostname, int port,
682 dns_callback_t callback, gpointer data) { 682 dns_callback_t callback, gpointer data) {
683 dns_tdata *td; 683 dns_tdata *td;
684 struct sockaddr_in sin; 684 struct sockaddr_in sin;