libpurple/xfer.c

changeset 37210
68004413f6e7
parent 37193
ab3750dcd85e
child 37644
451ed08be0b9
--- a/libpurple/xfer.c	Wed Jul 22 21:38:10 2015 -0400
+++ b/libpurple/xfer.c	Thu Jul 23 17:16:41 2015 -0400
@@ -69,7 +69,6 @@
 	int watcher;                 /* Watcher.                            */
 
 	goffset bytes_sent;          /* The number of bytes sent.           */
-	goffset bytes_remaining;     /* The number of bytes remaining.      */
 	time_t start_time;           /* When the transfer of data began.    */
 	time_t end_time;             /* When the transfer of data ended.    */
 
@@ -825,7 +824,7 @@
 
 	g_return_val_if_fail(priv != NULL, 0);
 
-	return priv->bytes_remaining;
+	return priv->size - priv->bytes_sent;
 }
 
 goffset
@@ -1028,7 +1027,6 @@
 	g_return_if_fail(priv != NULL);
 
 	priv->size = size;
-	priv->bytes_remaining = priv->size - purple_xfer_get_bytes_sent(xfer);
 
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_FILE_SIZE]);
 }
@@ -1054,9 +1052,6 @@
 
 	priv->bytes_sent = bytes_sent;
 
-	if (purple_xfer_get_size(xfer) > 0)
-		priv->bytes_remaining = purple_xfer_get_size(xfer) - bytes_sent;
-
 	g_object_notify_by_pspec(G_OBJECT(xfer), properties[PROP_BYTES_SENT]);
 }
 
@@ -1229,10 +1224,6 @@
 		if (r < 0 && errno == EAGAIN)
 			r = 0;
 	}
-	if (r >= 0 && (purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer) &&
-		!purple_xfer_is_completed(xfer))
-		purple_xfer_set_completed(xfer, TRUE);
-	
 
 	return r;
 }
@@ -1355,9 +1346,6 @@
 				return;
 			}
 
-			if ((purple_xfer_get_size(xfer) > 0) &&
-				((purple_xfer_get_bytes_sent(xfer)+r) >= purple_xfer_get_size(xfer)))
-				purple_xfer_set_completed(xfer, TRUE);
 		} else if(r < 0) {
 			purple_xfer_cancel_remote(xfer);
 			g_free(buffer);
@@ -1450,8 +1438,6 @@
 	}
 
 	if (r > 0) {
-		purple_xfer_set_bytes_sent(xfer, priv->bytes_sent + r);
-
 		if (priv->ops.ack != NULL)
 			priv->ops.ack(xfer, buffer, r);
 
@@ -1462,8 +1448,17 @@
 				purple_xfer_get_progress(xfer));
 	}
 
-	if (purple_xfer_is_completed(xfer))
+	if (purple_xfer_get_bytes_sent(xfer) >= purple_xfer_get_size(xfer) &&
+			!purple_xfer_is_completed(xfer)) {
+		purple_xfer_set_completed(xfer, TRUE);
+	}
+
+	/* TODO: Check if above is the only place xfers are marked completed.
+	 *       If so, merge these conditions.
+	 */
+	if (purple_xfer_is_completed(xfer)) {
 		purple_xfer_end(xfer);
+	}
 }
 
 static void
@@ -1673,11 +1668,18 @@
 		purple_xfer_set_watcher(xfer, 0);
 	}
 
-	if (priv->fd != -1)
-		close(priv->fd);
+	if (priv->fd != -1) {
+		if (close(priv->fd)) {
+			purple_debug_error("xfer", "closing file descr in purple_xfer_end() failed: %s",
+					g_strerror(errno));
+		}
+	}
 
 	if (priv->dest_fp != NULL) {
-		fclose(priv->dest_fp);
+		if (fclose(priv->dest_fp)) {
+			purple_debug_error("xfer", "closing dest file in purple_xfer_end() failed: %s",
+					g_strerror(errno));
+		}
 		priv->dest_fp = NULL;
 	}
 
@@ -1766,8 +1768,6 @@
 	if (ui_ops != NULL && ui_ops->cancel_local != NULL)
 		ui_ops->cancel_local(xfer);
 
-	priv->bytes_remaining = 0;
-
 	g_object_unref(xfer);
 }
 
@@ -1834,8 +1834,6 @@
 	if (ui_ops != NULL && ui_ops->cancel_remote != NULL)
 		ui_ops->cancel_remote(xfer);
 
-	priv->bytes_remaining = 0;
-
 	g_object_unref(xfer);
 }
 

mercurial