|  | @@ -111,13 +111,20 @@ static void downloader_finished ( struct downloader *downloader, int rc ) {
 | 
		
	
		
			
			| 111 | 111 |   */
 | 
		
	
		
			
			| 112 | 112 |  static int downloader_progress ( struct downloader *downloader,
 | 
		
	
		
			
			| 113 | 113 |  				 struct job_progress *progress ) {
 | 
		
	
		
			
			|  | 114 | +	int rc;
 | 
		
	
		
			
			|  | 115 | +
 | 
		
	
		
			
			|  | 116 | +	/* Allow data transfer to provide an accurate description */
 | 
		
	
		
			
			|  | 117 | +	if ( ( rc = job_progress ( &downloader->xfer, progress ) ) != 0 )
 | 
		
	
		
			
			|  | 118 | +		return rc;
 | 
		
	
		
			
			| 114 | 119 |  
 | 
		
	
		
			
			| 115 | 120 |  	/* This is not entirely accurate, since downloaded data may
 | 
		
	
		
			
			| 116 | 121 |  	 * arrive out of order (e.g. with multicast protocols), but
 | 
		
	
		
			
			| 117 | 122 |  	 * it's a reasonable first approximation.
 | 
		
	
		
			
			| 118 | 123 |  	 */
 | 
		
	
		
			
			| 119 |  | -	progress->completed = downloader->buffer.pos;
 | 
		
	
		
			
			| 120 |  | -	progress->total = downloader->buffer.len;
 | 
		
	
		
			
			|  | 124 | +	if ( ! progress->total ) {
 | 
		
	
		
			
			|  | 125 | +		progress->completed = downloader->buffer.pos;
 | 
		
	
		
			
			|  | 126 | +		progress->total = downloader->buffer.len;
 | 
		
	
		
			
			|  | 127 | +	}
 | 
		
	
		
			
			| 121 | 128 |  
 | 
		
	
		
			
			| 122 | 129 |  	return 0;
 | 
		
	
		
			
			| 123 | 130 |  }
 |