]> sjero.net Git - wget/commitdiff
Implement --config.
authorReza Snowdon <vivi@mage.me.uk>
Thu, 28 Oct 2010 22:20:31 +0000 (00:20 +0200)
committerGiuseppe Scrivano <gscrivano@gnu.org>
Thu, 28 Oct 2010 22:20:31 +0000 (00:20 +0200)
NEWS
doc/ChangeLog
doc/wget.texi
src/ChangeLog
src/init.c
src/init.h
src/main.c
src/options.h

diff --git a/NEWS b/NEWS
index 1e1df96ba5376d9bf935f27a48dd5ab3f769aef9..166de35bf74d1a91899674dd444e0e82b23c16a1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -48,6 +48,9 @@ Please send GNU Wget bug reports to <bug-wget@gnu.org>.
 ** Use persistent connections with proxies supporting them.
 
 ** Print the total download time as part of the summary for recursive downloads.
+
+** Now it is possible to specify a different startup configuration file trough
+   the --config option.
 \f
 * Changes in Wget 1.12
 
index e7646f4c92bd0b35c719b42ce1dd5a8a82a2fc9d..ca6d8219efa69ef795f1efd4d090f0fa8d0c3299 100644 (file)
@@ -1,3 +1,8 @@
+2010-08-08  Reza Snowdon <vivi@mage.me.uk>
+       * wget.texi: Added information about the config option to the
+       'Overview' section and a description of the option in
+       'Logging and Input File Options'.
+
 2010-10-26  Giuseppe Scrivano  <gscrivano@gnu.org>
 
        * wget.texi (Download Options): Remove unclear statement about the
index 1378b41425d0b32c4250f6454fca0c7a87de9ed2..fbb3d8945cea205667424de32d0971385f0f2489 100644 (file)
@@ -190,7 +190,9 @@ gauge can be customized to your preferences.
 Most of the features are fully configurable, either through command line
 options, or via the initialization file @file{.wgetrc} (@pxref{Startup
 File}).  Wget allows you to define @dfn{global} startup files
-(@file{/usr/local/etc/wgetrc} by default) for site settings.
+(@file{/usr/local/etc/wgetrc} by default) for site settings. You can also
+specify the location of a startup file with the --config option.
 
 @ignore
 @c man begin FILES
@@ -524,6 +526,10 @@ presence of a @code{BASE} tag in the @sc{html} input file, with
 For instance, if you specify @samp{http://foo/bar/a.html} for
 @var{URL}, and Wget reads @samp{../baz/b.html} from the input file, it
 would be resolved to @samp{http://foo/baz/b.html}.
+
+@cindex specify config 
+@item --config=@var{FILE}
+Specify the location of a startup file you wish to use.
 @end table
 
 @node Download Options, Directory Options, Logging and Input File Options, Invoking
index c0329cb1af9a558c8dd19615ff3ae51527fa9867..ed09202506b1d3bd4561b6a9461ce6d58bea1d14 100644 (file)
@@ -1,3 +1,20 @@
+2010-08-08  Reza Snowdon <vivi@mage.me.uk>
+
+       * main.c (main): inserted 'defaults'.
+         Added additional 'getopt_long' while loop to search and apply a
+         user specified config file before any other options.
+         New variables 'retconf', 'use_userconfig',
+         'confval', 'userrc_ret', 'config_opt'.
+       * init.c: Include stdbool.h.
+          (commands): Added config details.
+         (defaults): Removed static.
+         (wgetrc): Removed static.
+         (initialize): Removed 'defaults ()',
+          changed 'int ok' to 'bool ok'.
+       * options.h: New variable 'choose_config'.
+        * init.h (defaults): exported function.
+         (run_wgetrc): exported function.
+
 2010-10-24  Jessica McKellar <jesstess@mit.edu> (tiny change)
 
        * main.c (main): Print the total download time as part of the
index e752205d9caeb6002d9489b3f7c6a0cfb6a4a317..ffdaa6d6a93c65fc1f7af6beb05b81287ab940fd 100644 (file)
@@ -32,6 +32,7 @@ as that of the covered work.  */
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <stdbool.h>
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
@@ -136,6 +137,7 @@ static const struct {
   { "certificatetype",  &opt.cert_type,         cmd_cert_type },
   { "checkcertificate", &opt.check_cert,        cmd_boolean },
 #endif
+  { "chooseconfig",     &opt.choose_config,    cmd_file },
   { "connecttimeout",   &opt.connect_timeout,   cmd_time },
   { "contentdisposition", &opt.content_disposition, cmd_boolean },
   { "continue",         &opt.always_rest,       cmd_boolean },
@@ -291,7 +293,7 @@ command_by_name (const char *cmdname)
 }
 \f
 /* Reset the variables to default values.  */
-static void
+void
 defaults (void)
 {
   char *tmp;
@@ -510,7 +512,7 @@ static bool setval_internal_tilde (int, const char *, const char *);
 /* Initialize variables from a wgetrc file.  Returns zero (failure) if
    there were errors in the file.  */
 
-static bool
+bool
 run_wgetrc (const char *file)
 {
   FILE *fp;
@@ -574,10 +576,7 @@ void
 initialize (void)
 {
   char *file, *env_sysrc;
-  int ok = true;
-
-  /* Load the hard-coded defaults.  */
-  defaults ();
+  bool ok = true;
 
   /* Run a non-standard system rc file when the according environment
      variable has been set. For internal testing purposes only!  */
@@ -1578,6 +1577,7 @@ cleanup (void)
     extern acc_t *netrc_list;
     free_netrc (netrc_list);
   }
+  xfree_null (opt.choose_config);
   xfree_null (opt.lfilename);
   xfree_null (opt.dir_prefix);
   xfree_null (opt.input_filename);
index 968099cfbf0e1ffac99a95e9e00668530720a9a2..25f5b3a3ae5f9710ccb27f5adc2edff9e080ca37 100644 (file)
@@ -39,5 +39,7 @@ void run_command (const char *);
 void setoptval (const char *, const char *, const char *);
 char *home_dir (void);
 void cleanup (void);
+void defaults (void);
+bool run_wgetrc (const char *file);
 
 #endif /* INIT_H */
index 1ed8e695894f7bafe6ca06ef6040cad2fb54dad6..b576ba87405ede2a79622f35fa5957bd71baf69f 100644 (file)
@@ -165,6 +165,7 @@ static struct cmdline_option option_data[] =
     { IF_SSL ("certificate-type"), 0, OPT_VALUE, "certificatetype", -1 },
     { IF_SSL ("check-certificate"), 0, OPT_BOOLEAN, "checkcertificate", -1 },
     { "clobber", 0, OPT__CLOBBER, NULL, optional_argument },
+    { "config", 0, OPT_VALUE, "chooseconfig", -1 },
     { "connect-timeout", 0, OPT_VALUE, "connecttimeout", -1 },
     { "continue", 'c', OPT_BOOLEAN, "continue", -1 },
     { "convert-links", 'k', OPT_BOOLEAN, "convertlinks", -1 },
@@ -441,6 +442,8 @@ Logging and input file:\n"),
     N_("\
   -B,  --base=URL            resolves HTML input-file links (-i -F)\n\
                              relative to URL.\n"),
+    N_("\
+       --config=FILE         Specify config file to use.\n"), 
     "\n",
 
     N_("\
@@ -900,10 +903,46 @@ main (int argc, char **argv)
   windows_main ((char **) &exec_name);
 #endif
 
-  /* Set option defaults; read the system wgetrc and ~/.wgetrc.  */
-  initialize ();
+  /* Load the hard-coded defaults.  */
+  defaults ();
 
   init_switches ();
+
+  /* This seperate getopt_long is needed to find the user config
+     and parse it before the other user options. */
+  longindex = -1;
+  int retconf;
+  bool use_userconfig = false;
+
+  while ((retconf = getopt_long (argc, argv,
+                                short_options, long_options, &longindex)) != -1)
+    {
+      int confval;
+      bool userrc_ret = true;
+      struct cmdline_option *config_opt;
+      confval = long_options[longindex].val;
+      config_opt = &option_data[confval & ~BOOLEAN_NEG_MARKER];
+      if (strcmp (config_opt->long_name, "config") == 0)
+        {
+          userrc_ret &= run_wgetrc (optarg);
+          use_userconfig = true;
+        }
+      if (!userrc_ret)
+        {
+          printf ("Exiting due to error in %s\n", optarg);
+          exit (2);
+        }
+      else
+        break;
+    }
+
+  /* If the user did not specify a config, read the system wgetrc and ~/.wgetrc. */
+  if (use_userconfig == false)
+    initialize ();
+
+  opterr = 0;
+  optind = 0;
+
   longindex = -1;
   while ((ret = getopt_long (argc, argv,
                              short_options, long_options, &longindex)) != -1)
index e9fe2d2c0b6f7679e80629d71cb19f1bc62e882a..a3e9df65b26b0f0125f85aef96e59f7b7f17aa12 100644 (file)
@@ -58,6 +58,7 @@ struct options
   char *dir_prefix;            /* The top of directory tree */
   char *lfilename;             /* Log filename */
   char *input_filename;                /* Input filename */
+  char *choose_config;         /* Specified config file */
   bool force_html;             /* Is the input file an HTML file? */
 
   char *default_page;           /* Alternative default page (index file) */