wget: chunked mode fix. Closes bug 3229
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		| @@ -466,15 +466,6 @@ static void NOINLINE retrieve_file_data(FILE *dfp, int output_fd) | ||||
|  | ||||
| 	polldata.fd = fileno(dfp); | ||||
| 	polldata.events = POLLIN | POLLPRI; | ||||
|  | ||||
| 	/* Must use nonblocking I/O, otherwise fread will loop | ||||
| 	 * and *block* until it reads full buffer, | ||||
| 	 * which messes up progress bar and/or timing out. | ||||
| 	 * Because of nonblocking I/O, we need to dance | ||||
| 	 * very carefully around EAGAIN. See explanation at | ||||
| 	 * clearerr() call. | ||||
| 	 */ | ||||
| 	ndelay_on(polldata.fd); | ||||
| #endif | ||||
| 	progress_meter(PROGRESS_START); | ||||
|  | ||||
| @@ -483,6 +474,17 @@ static void NOINLINE retrieve_file_data(FILE *dfp, int output_fd) | ||||
|  | ||||
| 	/* Loops only if chunked */ | ||||
| 	while (1) { | ||||
|  | ||||
| #if ENABLE_FEATURE_WGET_STATUSBAR || ENABLE_FEATURE_WGET_TIMEOUT | ||||
| 		/* Must use nonblocking I/O, otherwise fread will loop | ||||
| 		 * and *block* until it reads full buffer, | ||||
| 		 * which messes up progress bar and/or timeout logic. | ||||
| 		 * Because of nonblocking I/O, we need to dance | ||||
| 		 * very carefully around EAGAIN. See explanation at | ||||
| 		 * clearerr() call. | ||||
| 		 */ | ||||
| 		ndelay_on(polldata.fd); | ||||
| #endif | ||||
| 		while (1) { | ||||
| 			int n; | ||||
| 			unsigned rdsz; | ||||
| @@ -552,11 +554,15 @@ static void NOINLINE retrieve_file_data(FILE *dfp, int output_fd) | ||||
| 					break; | ||||
| 			} | ||||
| 		} | ||||
| #if ENABLE_FEATURE_WGET_STATUSBAR || ENABLE_FEATURE_WGET_TIMEOUT | ||||
| 		clearerr(dfp); | ||||
| 		ndelay_off(polldata.fd); | ||||
| #endif | ||||
|  | ||||
| 		if (!G.chunked) | ||||
| 			break; | ||||
|  | ||||
| 		fgets_and_trim(dfp); /* This is a newline */ | ||||
| 		fgets_and_trim(dfp); /* Eat empty line */ | ||||
|  get_clen: | ||||
| 		fgets_and_trim(dfp); | ||||
| 		G.content_len = STRTOOFF(G.wget_buf, NULL, 16); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user