]> sjero.net Git - wget/commitdiff
Automated merge.
authorSaint Xavier <wget@sxav.eu>
Sat, 14 Jun 2008 15:46:53 +0000 (17:46 +0200)
committerSaint Xavier <wget@sxav.eu>
Sat, 14 Jun 2008 15:46:53 +0000 (17:46 +0200)
1  2 
src/init.c
src/main.c

diff --combined src/init.c
index 2aa8e133b17275474bc89090521a9f8684ea1ab8,a634fa79612612c83bca66120e155ab88b811f91..167c84fea7a6dd297be54fdb98a1e638fcf040bc
@@@ -181,15 -181,9 +181,15 @@@ static const struct 
    { "inet6only",        &opt.ipv6_only,         cmd_boolean },
  #endif
    { "input",            &opt.input_filename,    cmd_file },
 +#ifdef ENABLE_IRI
 +  { "iri",              &opt.enable_iri,        cmd_boolean },
 +#endif
    { "keepsessioncookies", &opt.keep_session_cookies, cmd_boolean },
    { "limitrate",        &opt.limit_rate,        cmd_bytes },
    { "loadcookies",      &opt.cookies_input,     cmd_file },
 +#ifdef ENABLE_IRI
 +  { "locale",           &opt.locale,            cmd_string },
 +#endif
    { "logfile",          &opt.lfilename,         cmd_file },
    { "login",            &opt.ftp_user,          cmd_string },/* deprecated*/
    { "maxredirect",      &opt.max_redirect,      cmd_number },
    { "referer",          &opt.referer,           cmd_string },
    { "reject",           &opt.rejects,           cmd_vector },
    { "relativeonly",     &opt.relative_only,     cmd_boolean },
 +#ifdef ENABLE_IRI
 +  { "remoteencoding",   &opt.encoding_remote,   cmd_string },
 +#endif
    { "removelisting",    &opt.remove_listing,    cmd_boolean },
    { "restrictfilenames", NULL,                  cmd_spec_restrict_file_names },
    { "retrsymlinks",     &opt.retr_symlinks,     cmd_boolean },
@@@ -380,19 -371,14 +380,14 @@@ home_dir (void
    return home ? xstrdup (home) : NULL;
  }
  
- /* Return the path to the user's .wgetrc.  This is either the value of
-    `WGETRC' environment variable, or `$HOME/.wgetrc'.
+ /* Check the 'WGETRC' environment variable and return the file name 
+    if  'WGETRC' is set and is a valid file.  
     If the `WGETRC' variable exists but the file does not exist, the
     function will exit().  */
static char *
- wgetrc_file_name (void)
+ char *
+ wgetrc_env_file_name (void) 
  {
-   char *env, *home;
-   char *file = NULL;
-   /* Try the environment.  */
-   env = getenv ("WGETRC");
+   char *env = getenv ("WGETRC");
    if (env && *env)
      {
        if (!file_exists_p (env))
          }
        return xstrdup (env);
      }
-   /* If that failed, try $HOME/.wgetrc.  */
-   home = home_dir ();
+   return NULL;
+ }
+ /* Check for the existance of '$HOME/.wgetrc' and return it's path
+    if it exists and is set.  */
+ char *
+ wgetrc_user_file_name (void) 
+ {
+   char *home = home_dir();
+   char *file = NULL;
    if (home)
      file = aprintf ("%s/.wgetrc", home);
    xfree_null (home);
+   if (!file)
+     return NULL;
+   if (!file_exists_p (file))
+     {
+       xfree (file);
+       return NULL;
+     }
+   return file;
+ }
+ /* Return the path to the user's .wgetrc.  This is either the value of
+    `WGETRC' environment variable, or `$HOME/.wgetrc'.
+    Additionally, for windows, look in the directory where wget.exe 
+    resides.  */
+ char *
+ wgetrc_file_name (void)
+ {
+   char *file = wgetrc_env_file_name ();
+   if (file && *file)
+     return file;
+   file = wgetrc_user_file_name ();
  
  #ifdef WINDOWS
    /* Under Windows, if we still haven't found .wgetrc, look for the file
@@@ -549,7 -563,7 +572,7 @@@ initialize (void
    xfree (file);
    return;
  }
\f
  /* Remove dashes and underscores from S, modifying S in the
     process. */
  
diff --combined src/main.c
index 0727b1db5ac3d85bbb095fdca1cf699e45e612f6,dc15bfbf9e82cd54e03696a3ee8880cdb7efe9f5..9b449438468c7e31dea9d2c18528863bb7a1e4e9
@@@ -43,9 -43,6 +43,9 @@@ as that of the covered work.  *
  #include <assert.h>
  #include <errno.h>
  #include <time.h>
 +#ifdef ENABLE_IRI
 +#include <langinfo.h>
 +#endif
  
  #include "utils.h"
  #include "init.h"
  
  struct options opt;
  
+ /* defined in version.c */
  extern char *version_string;
+ extern char *compilation_string;
+ extern char *system_getrc;
+ extern char *link_string;
+ /* defined in build_info.c */
+ extern char *compiled_features[];
+ extern char *system_wgetrc;
+ extern char *locale_dir;
+ /* Used for --version output in print_version */
+ static const int max_chars_per_line = 72;
  
  #if defined(SIGHUP) || defined(SIGUSR1)
  static void redirect_output_signal (int);
@@@ -193,16 -200,10 +203,16 @@@ static struct cmdline_option option_dat
      { "inet6-only", '6', OPT_BOOLEAN, "inet6only", -1 },
  #endif
      { "input-file", 'i', OPT_VALUE, "input", -1 },
 +#ifdef ENABLE_IRI
 +    { "iri", 0, OPT_BOOLEAN, "iri", -1 },
 +#endif
      { "keep-session-cookies", 0, OPT_BOOLEAN, "keepsessioncookies", -1 },
      { "level", 'l', OPT_VALUE, "reclevel", -1 },
      { "limit-rate", 0, OPT_VALUE, "limitrate", -1 },
      { "load-cookies", 0, OPT_VALUE, "loadcookies", -1 },
 +#ifdef ENABLE_IRI
 +    { "locale", 0, OPT_VALUE, "locale", -1 },
 +#endif
      { "max-redirect", 0, OPT_VALUE, "maxredirect", -1 },
      { "mirror", 'm', OPT_BOOLEAN, "mirror", -1 },
      { "no", 'n', OPT__NO, NULL, required_argument },
      { "referer", 0, OPT_VALUE, "referer", -1 },
      { "reject", 'R', OPT_VALUE, "reject", -1 },
      { "relative", 'L', OPT_BOOLEAN, "relativeonly", -1 },
 +#ifdef ENABLE_IRI
 +    { "remote-encoding", 0, OPT_VALUE, "remoteencoding", -1},
 +#endif
      { "remove-listing", 0, OPT_BOOLEAN, "removelisting", -1 },
      { "restrict-file-names", 0, OPT_BOOLEAN, "restrictfilenames", -1 },
      { "retr-symlinks", 0, OPT_BOOLEAN, "retrsymlinks", -1 },
@@@ -700,10 -698,111 +710,111 @@@ prompt_for_password (void
    return getpass("");
  }
  
+ /* Function that prints the line argument while limiting it
+    to at most line_length. prefix is printed on the first line
+    and an appropriate number of spaces are added on subsequent
+    lines.*/
+ static void
+ format_and_print_line (char* prefix, char* line,
+                      int line_length) 
+ {
+   assert (prefix != NULL);
+   assert (line != NULL);
+   if (line_length <= 0)
+     line_length = max_chars_per_line;
+   const int leading_spaces = strlen (prefix);
+   printf ("%s", prefix);
+   int remaining_chars = line_length - leading_spaces;
+   /* We break on spaces. */
+   char* token = strtok (line, " ");
+   while (token != NULL) 
+     {
+       /* If however a token is much larger than the maximum
+          line length, all bets are off and we simply print the
+          token on the next line. */
+       if (remaining_chars <= strlen (token)) 
+         {
+           printf ("\n");
+           int j = 0;
+           for (j = 0; j < leading_spaces; j++) 
+             {
+               printf (" ");
+             }
+           remaining_chars = line_length - leading_spaces;
+         }
+       printf ("%s ", token);
+       remaining_chars -= strlen (token) + 1;  // account for " "
+       token = strtok (NULL, " ");
+     }
+   printf ("\n");
+   xfree (prefix);
+   xfree (line);
+ }
  static void
  print_version (void)
  {
-   printf ("GNU Wget %s\n\n", version_string);
+   const char *options_title = "Options    : ";
+   const char *wgetrc_title  = "Wgetrc     : ";
+   const char *locale_title  = "Locale     : ";
+   const char *compile_title = "Compile    : ";
+   const char *link_title    = "Link       : ";
+   const char *prefix_spaces = "             ";
+   const int prefix_space_length = strlen (prefix_spaces);
+   printf ("GNU Wget %s\n", version_string);
+   printf (options_title);
+   /* compiled_features is a char*[]. We limit the characters per
+      line to max_chars_per_line and prefix each line with a constant
+      number of spaces for proper alignment. */
+   int i =0;
+   for (i = 0; compiled_features[i] != NULL; ) 
+     {
+       int line_length = max_chars_per_line - prefix_space_length;
+       while ((line_length > 0) && (compiled_features[i] != NULL)) 
+         {
+           printf ("%s ", compiled_features[i]);
+           line_length -= strlen (compiled_features[i]) + 2;
+           i++;
+         }
+       printf ("\n");
+       if (compiled_features[i] != NULL) 
+         {
+         printf (prefix_spaces);
+         }
+     }
+   /* Handle the case when $WGETRC is unset and $HOME/.wgetrc is 
+      absent. */
+   printf (wgetrc_title);
+   char *env_wgetrc = wgetrc_env_file_name ();
+   if (env_wgetrc && *env_wgetrc) 
+     {
+       printf ("%s (env)\n%s", env_wgetrc, prefix_spaces);
+       xfree (env_wgetrc);
+     }
+   char *user_wgetrc = wgetrc_user_file_name ();
+   if (user_wgetrc) 
+     {
+       printf ("%s (user)\n%s", user_wgetrc, prefix_spaces);
+       xfree (user_wgetrc);
+     }
+   printf ("%s (system)\n", system_wgetrc);
+   format_and_print_line (strdup (locale_title),
+                        strdup (locale_dir), 
+                        max_chars_per_line);
+   
+   format_and_print_line (strdup (compile_title),
+                        strdup (compilation_string),
+                        max_chars_per_line);
+   format_and_print_line (strdup (link_title),
+                        strdup (link_string),
+                        max_chars_per_line);
+   printf ("\n");
    /* TRANSLATORS: When available, an actual copyright character
       (cirle-c) should be used in preference to "(C)". */
    fputs (_("\
@@@ -721,7 -820,6 +832,6 @@@ There is NO WARRANTY, to the extent per
           stdout);
    exit (0);
  }
\f
  
  int
  main (int argc, char **argv)
@@@ -959,24 -1057,6 +1069,24 @@@ for details.\n\n"))
        exit (1);
      }
  
 +#ifdef ENABLE_IRI
 +  if (opt.enable_iri)
 +    {
 +      if (!opt.locale)
 +        {
 +          opt.locale = getenv ("CHARSET");
 +
 +          if (opt.locale == NULL)
 +            opt.locale = nl_langinfo(CODESET);
 +        }
 +      else
 +        {
 +          /* sXXXav : check given locale */
 +          logprintf (LOG_VERBOSE, "Check the locale...\n");
 +        }
 +    }
 +#endif
 +
    if (opt.ask_passwd)
      {
        opt.passwd = prompt_for_password ();