[git commit master 1/1] wget: support multiple URLs on command line even without -O :)

Denys Vlasenko vda.linux at googlemail.com
Sun Feb 13 01:49:43 UTC 2011


commit: http://git.busybox.net/busybox/commit/?id=9a5b7f636dad35ac84056768b3669bdca02d2700
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/wget.c |   70 +++++++++++-----------------------------------------
 1 files changed, 15 insertions(+), 55 deletions(-)

diff --git a/networking/wget.c b/networking/wget.c
index 76bd5e2..6c015dc 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -140,41 +140,6 @@ static void strip_ipv6_scope_id(char *host)
 	overlapping_strcpy(scope, cp);
 }
 
-#if 0 /* were needed when we used signal-driven progress bar */
-/* Read NMEMB bytes into PTR from STREAM.  Returns the number of bytes read,
- * and a short count if an eof or non-interrupt error is encountered.  */
-static size_t safe_fread(void *ptr, size_t nmemb, FILE *stream)
-{
-	size_t ret;
-	char *p = (char*)ptr;
-
-	do {
-		clearerr(stream);
-		errno = 0;
-		ret = fread(p, 1, nmemb, stream);
-		p += ret;
-		nmemb -= ret;
-	} while (nmemb && ferror(stream) && errno == EINTR);
-
-	return p - (char*)ptr;
-}
-
-/* Read a line or SIZE-1 bytes into S, whichever is less, from STREAM.
- * Returns S, or NULL if an eof or non-interrupt error is encountered.  */
-static char *safe_fgets(char *s, int size, FILE *stream)
-{
-	char *ret;
-
-	do {
-		clearerr(stream);
-		errno = 0;
-		ret = fgets(s, size, stream);
-	} while (ret == NULL && ferror(stream) && errno == EINTR);
-
-	return ret;
-}
-#endif
-
 #if ENABLE_FEATURE_WGET_AUTHENTICATION
 /* Base64-encode character string. */
 static char *base64enc(const char *str)
@@ -631,7 +596,7 @@ static int download_one_url(const char *url)
 	/* If there was no -O FILE, guess output filename */
 	output_fd = -1;
 	fname_out_alloc = NULL;
-	if (!G.fname_out) {
+	if (!(option_mask32 & WGET_OPT_OUTNAME)) {
 		G.fname_out = bb_get_last_path_component_nostrip(target.path);
 		/* handle "wget http://kernel.org//" */
 		if (G.fname_out[0] == '/' || !G.fname_out[0])
@@ -865,28 +830,19 @@ However, in real world it was observed that some web servers
 	}
 
 	free(lsa);
-	free(server.allocated);
-	free(target.allocated);
-
-	if (option_mask32 & WGET_OPT_SPIDER) {
-		free(fname_out_alloc);
-		fclose(sfp);
-		return EXIT_SUCCESS;
-	}
 
-	if (output_fd < 0) {
-		int o_flags = O_WRONLY | O_CREAT | O_TRUNC | O_EXCL;
-		/* compat with wget: -O FILE can overwrite */
-		if (option_mask32 & WGET_OPT_OUTNAME)
-			o_flags = O_WRONLY | O_CREAT | O_TRUNC;
-		output_fd = xopen(G.fname_out, o_flags);
+	if (!(option_mask32 & WGET_OPT_SPIDER)) {
+		if (output_fd < 0) {
+			int o_flags = O_WRONLY | O_CREAT | O_TRUNC | O_EXCL;
+			/* compat with wget: -O FILE can overwrite */
+			if (option_mask32 & WGET_OPT_OUTNAME)
+				o_flags = O_WRONLY | O_CREAT | O_TRUNC;
+			output_fd = xopen(G.fname_out, o_flags);
+		}
+		retrieve_file_data(dfp, output_fd);
+		xclose(output_fd);
 	}
 
-	free(fname_out_alloc);
-
-	retrieve_file_data(dfp, output_fd);
-	xclose(output_fd);
-
 	if (dfp != sfp) {
 		/* It's ftp. Close data connection properly */
 		fclose(dfp);
@@ -896,6 +852,10 @@ However, in real world it was observed that some web servers
 	}
 	fclose(sfp);
 
+	free(server.allocated);
+	free(target.allocated);
+	free(fname_out_alloc);
+
 	return EXIT_SUCCESS;
 }
 
-- 
1.7.3.4



More information about the busybox-cvs mailing list