wget: support multiple URLs on command line even without -O :)
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 13 Feb 2011 01:49:43 +0000 (02:49 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 13 Feb 2011 01:49:43 +0000 (02:49 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/wget.c

index 76bd5e2609769e940d51df632062ecc2d64b788d..6c015dccca43f51a3b84d7094bab612de273f32d 100644 (file)
@@ -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;
 }