]> sjero.net Git - wget/blobdiff - src/main.c
[svn] Logging system bugfixes and improvements.
[wget] / src / main.c
index 5dc9bb0332da9dd9533606769ca4029e5078e29e..aef78bf5d6851ddb23a3218d8c69b581f0ffc881 100644 (file)
@@ -53,6 +53,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "url.h"
 #include "progress.h"          /* for progress_handle_sigwinch */
 
+#ifdef HAVE_SSL
+# include "gen_sslfunc.h"
+#endif
+
 /* On GNU system this will include system-wide getopt.h. */
 #include "getopt.h"
 
@@ -71,7 +75,7 @@ struct options opt;
 /* From log.c.  */
 void log_init PARAMS ((const char *, int));
 void log_close PARAMS ((void));
-void redirect_output PARAMS ((const char *));
+void log_request_redirect_output PARAMS ((const char *));
 
 static RETSIGTYPE redirect_output_signal PARAMS ((int));
 
@@ -146,6 +150,7 @@ Logging and input file:\n\
   -B,  --base=URL             prepends URL to relative links in -F -i file.\n\
        --sslcertfile=FILE     optional client certificate.\n\
        --sslcertkey=KEYFILE   optional keyfile for this certificate.\n\
+       --egd-file=FILE        file name of the EGD socket.\n\
 \n"), stdout);
   fputs (_("\
 Download:\n\
@@ -222,7 +227,6 @@ Recursive accept/reject:\n\
   -L,  --relative                   follow relative links only.\n\
   -I,  --include-directories=LIST   list of allowed directories.\n\
   -X,  --exclude-directories=LIST   list of excluded directories.\n\
-  -nh, --no-host-lookup             don\'t DNS-lookup hosts.\n\
   -np, --no-parent                  don\'t ascend to the parent directory.\n\
 \n"), stdout);
   fputs (_("Mail bug reports and suggestions to <bug-wget@gnu.org>.\n"),
@@ -320,6 +324,7 @@ main (int argc, char *const *argv)
 #ifdef HAVE_SSL
     { "sslcertfile", required_argument, NULL, 158 },
     { "sslcertkey", required_argument, NULL, 159 },
+    { "egd-file", required_argument, NULL, 166 },
 #endif /* HAVE_SSL */
     { "wait", required_argument, NULL, 'w' },
     { "waitretry", required_argument, NULL, 152 },
@@ -540,6 +545,9 @@ GNU General Public License for more details.\n"));
        case 159:
          setval ("sslcertkey", optarg);
          break;
+       case 166:
+         setval ("egdfile", optarg);
+         break;
 #endif /* HAVE_SSL */
        case 'A':
          setval ("accept", optarg);
@@ -671,11 +679,6 @@ GNU General Public License for more details.\n"));
        }
     }
 
-  /* Initialize progress.  Have to do this after the options are
-     processed so we know where the log file is.  */
-  if (opt.verbose)
-    set_progress_implementation (opt.progress_type);
-
   /* All user options have now been processed, so it's now safe to do
      interoption dependency checks. */
 
@@ -723,6 +726,11 @@ Can't timestamp and not clobber old files at the same time.\n"));
   if (opt.background)
     fork_to_background ();
 
+  /* Initialize progress.  Have to do this after the options are
+     processed so we know where the log file is.  */
+  if (opt.verbose)
+    set_progress_implementation (opt.progress_type);
+
   /* Allocate basic pointer.  */
   url = ALLOCA_ARRAY (char *, nurl + 1);
   /* Fill in the arguments.  */
@@ -730,10 +738,7 @@ Can't timestamp and not clobber old files at the same time.\n"));
     {
       char *rewritten = rewrite_shorthand_url (argv[optind]);
       if (rewritten)
-       {
-         printf ("Converted %s to %s\n", argv[optind], rewritten);
-         url[i] = rewritten;
-       }
+       url[i] = rewritten;
       else
        url[i] = xstrdup (argv[optind]);
     }
@@ -790,8 +795,13 @@ Can't timestamp and not clobber old files at the same time.\n"));
 #endif
 #endif /* HAVE_SIGNAL */
 
+#ifdef HAVE_SSL
+  /* Must call this before resolving any URLs because it has the power
+     to disable `https'.  */
+  ssl_init_prng ();
+#endif
+
   status = RETROK;             /* initialize it, just-in-case */
-  /*recursive_reset ();*/
   /* Retrieve the URLs from argument list.  */
   for (t = url; *t; t++)
     {
@@ -867,19 +877,20 @@ Can't timestamp and not clobber old files at the same time.\n"));
 #ifdef HAVE_SIGNAL
 /* Hangup signal handler.  When wget receives SIGHUP or SIGUSR1, it
    will proceed operation as usual, trying to write into a log file.
-   If that is impossible, the output will be turned off.  */
+   If that is impossible, the output will be turned off.
+
+   #### It is unsafe to do call libc functions from a signal handler.
+   What we should do is, set a global variable, and have the code in
+   log.c pick it up.  */
 
 static RETSIGTYPE
 redirect_output_signal (int sig)
 {
-  char tmp[100];
+  char *signal_name = (sig == SIGHUP ? "SIGHUP" :
+                      (sig == SIGUSR1 ? "SIGUSR1" :
+                       "WTF?!"));
+  log_request_redirect_output (signal_name);
+  progress_schedule_redirect ();
   signal (sig, redirect_output_signal);
-  /* Please note that the double `%' in `%%s' is intentional, because
-     redirect_output passes tmp through printf.  */
-  sprintf (tmp, _("%s received, redirecting output to `%%s'.\n"),
-          (sig == SIGHUP ? "SIGHUP" :
-           (sig == SIGUSR1 ? "SIGUSR1" :
-            "WTF?!")));
-  redirect_output (tmp);
 }
 #endif /* HAVE_SIGNAL */