diff libpurple/upnp.c @ 32192:f71b6a715cc7

Fix some closes on invalid fds, which can crash on Windows. committer: Ethan Blanton <elb@pidgin.im>
author Florian Quèze <florian@instantbird.org>
date Sun, 10 Jul 2011 13:11:36 +0000
parents b39b6d0008c5
children 06c38384f43d
line wrap: on
line diff
--- a/libpurple/upnp.c	Sat Jul 09 22:34:25 2011 +0000
+++ b/libpurple/upnp.c	Sun Jul 10 13:11:36 2011 +0000
@@ -535,7 +535,7 @@
 		dd->retry_count++;
 		purple_upnp_discover_send_broadcast(dd);
 	} else {
-		if (dd->fd)
+		if (dd->fd != -1)
 			close(dd->fd);
 
 		control_info.status = PURPLE_UPNP_STATUS_UNABLE_TO_DISCOVER;
@@ -662,7 +662,7 @@
 	}
 
 	/* Set up the sockets */
-	sock = socket(AF_INET, SOCK_DGRAM, 0);
+	dd->fd = sock = socket(AF_INET, SOCK_DGRAM, 0);
 	if(sock == -1) {
 		purple_debug_error("upnp",
 			"purple_upnp_discover(): Failed In sock creation\n");
@@ -672,8 +672,6 @@
 		return;
 	}
 
-	dd->fd = sock;
-
 	/* TODO: Non-blocking! */
 	if((hp = gethostbyname(HTTPMU_HOST_ADDRESS)) == NULL) {
 		purple_debug_error("upnp",
@@ -820,7 +818,7 @@
 static void
 looked_up_internal_ip_cb(gpointer data, gint source, const gchar *error_message)
 {
-	if (source) {
+	if (source != -1) {
 		strncpy(control_info.internalip,
 			purple_network_get_local_system_ip(source),
 			sizeof(control_info.internalip));