]> sjero.net Git - wget/blobdiff - src/retr.c
Improved exit status handling.
[wget] / src / retr.c
index 39627e4bbf5067e8ea563ac110c39c44e1cf087a..f1b8f955a36f3f2361f7142b1366fd78aaba72c5 100644 (file)
@@ -39,6 +39,7 @@ as that of the covered work.  */
 #include <string.h>
 #include <assert.h>
 
+#include "exits.h"
 #include "utils.h"
 #include "retr.h"
 #include "progress.h"
@@ -143,10 +144,8 @@ limit_bandwidth (wgint bytes, struct ptimer *timer)
 
 static int
 write_data (FILE *out, const char *buf, int bufsize, wgint *skip,
-            wgint *written, int flags)
+            wgint *written)
 {
-  static int cr_pending = 0;    /* Found CR in ASCII FTP data. */
-
   if (!out)
     return 1;
   if (*skip > bufsize)
@@ -163,72 +162,8 @@ write_data (FILE *out, const char *buf, int bufsize, wgint *skip,
         return 1;
     }
 
-/* Note: This code assumes that "\n" is the universal line ending
-   character, as on UNIX and VMS.  If this is not true, then here's
-   where to change it.
-*/
-
-#if 1
-# define EOL_STRING "\n"
-#else /* 1 */
-# define EOL_STRING "\r\n"
-#endif /* 1 [else] */
-#define EOL_STRING_LEN (sizeof( EOL_STRING)- 1)
-
-  if (flags & rb_ftp_ascii)
-    {
-      const char *bufend;
-
-      /* ASCII transfer.  Put out lines delimited by CRLF. */
-      bufend = buf+ bufsize;
-      while (buf < bufend)
-        {
-          /* If CR, put out any pending CR, then set CR-pending flag. */
-          if (*buf == '\r')
-            {
-              if (cr_pending)
-                {
-                  fwrite ("\r", 1, 1, out);
-                  *written += 1;
-                }
-              cr_pending = 1;
-              buf++;
-              continue;
-            }
-
-          if (cr_pending)
-            {
-              if (*buf == '\n')
-                {
-                  /* Found FTP EOL (CRLF).  Put out local EOL. */
-                  fwrite (EOL_STRING, 1, EOL_STRING_LEN, out);
-                  *written += EOL_STRING_LEN;
-                }
-              else
-                {
-                  /* Normal character.  Put out pending CR and it. */
-                  fwrite ("\r", 1, 1, out);
-                  fwrite (buf, 1, 1, out);
-                  *written += 2;
-                }
-              buf++;
-              cr_pending = 0;
-            }
-          else
-            {
-              /* Normal character.  Put it out. */
-              fwrite (buf, 1, 1, out);
-              *written += 1;
-              buf++;
-            }
-        }
-    }
-  else
-    {
-      /* Image transfer.  Put out buffer. */
-      fwrite (buf, 1, bufsize, out);
-      *written += bufsize;
-    }
+  fwrite (buf, 1, bufsize, out);
+  *written += bufsize;
 
   /* Immediately flush the downloaded data.  This should not hinder
      performance: fast downloads will arrive in large 16K chunks
@@ -376,7 +311,7 @@ fd_read_body (int fd, FILE *out, wgint toread, wgint startpos,
       if (ret > 0)
         {
           sum_read += ret;
-          if (!write_data (out, dlbuf, ret, &skip, &sum_written, flags))
+          if (!write_data (out, dlbuf, ret, &skip, &sum_written))
             {
               ret = -2;
               goto out;
@@ -677,7 +612,7 @@ static char *getproxy (struct url *);
 uerr_t
 retrieve_url (struct url * orig_parsed, const char *origurl, char **file,
               char **newloc, const char *refurl, int *dt, bool recursive,
-              struct iri *iri)
+              struct iri *iri, bool register_status)
 {
   uerr_t result;
   char *url;
@@ -734,7 +669,8 @@ retrieve_url (struct url * orig_parsed, const char *origurl, char **file,
           xfree (url);
           xfree (error);
           RESTORE_POST_DATA;
-          return PROXERR;
+          result = PROXERR;
+          goto bail;
         }
       if (proxy_url->scheme != SCHEME_HTTP && proxy_url->scheme != u->scheme)
         {
@@ -742,7 +678,8 @@ retrieve_url (struct url * orig_parsed, const char *origurl, char **file,
           url_free (proxy_url);
           xfree (url);
           RESTORE_POST_DATA;
-          return PROXERR;
+          result = PROXERR;
+          goto bail;
         }
     }
 
@@ -823,7 +760,7 @@ retrieve_url (struct url * orig_parsed, const char *origurl, char **file,
           xfree (mynewloc);
           xfree (error);
           RESTORE_POST_DATA;
-          return result;
+          goto bail;
         }
 
       /* Now mynewloc will become newloc_parsed->url, because if the
@@ -845,7 +782,8 @@ retrieve_url (struct url * orig_parsed, const char *origurl, char **file,
           xfree (url);
           xfree (mynewloc);
           RESTORE_POST_DATA;
-          return WRONGCODE;
+          result = WRONGCODE;
+          goto bail;
         }
 
       xfree (url);
@@ -932,6 +870,9 @@ retrieve_url (struct url * orig_parsed, const char *origurl, char **file,
 
   RESTORE_POST_DATA;
 
+bail:
+  if (register_status)
+    inform_exit_status (result);
   return result;
 }
 
@@ -976,7 +917,7 @@ retrieve_from_file (const char *file, bool html, int *count)
         opt.base_href = xstrdup (url);
 
       status = retrieve_url (url_parsed, url, &input_file, NULL, NULL, &dt,
-                             false, iri);
+                             false, iri, true);
       if (status != RETROK)
         return status;
 
@@ -1036,7 +977,8 @@ retrieve_from_file (const char *file, bool html, int *count)
       else
         status = retrieve_url (parsed_url ? parsed_url : cur_url->url,
                                cur_url->url->url, &filename,
-                               &new_file, NULL, &dt, opt.recursive, tmpiri);
+                               &new_file, NULL, &dt, opt.recursive, tmpiri,
+                               true);
 
       if (parsed_url)
           url_free (parsed_url);